From b6547734c62773cd57358d5fd4e45f58ab81f81a Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Thu, 17 Mar 2016 21:23:41 +0000 Subject: [PATCH] Strip complex values from ReactPerf.printDOM() output Fixes #6288 --- src/test/ReactDefaultPerf.js | 13 ++++++++++++- src/test/__tests__/ReactDefaultPerf-test.js | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/test/ReactDefaultPerf.js b/src/test/ReactDefaultPerf.js index 548fab05a5..5cb43e9048 100644 --- a/src/test/ReactDefaultPerf.js +++ b/src/test/ReactDefaultPerf.js @@ -52,6 +52,17 @@ function getID(inst) { } } +function stripComplexValues(key, value) { + if (typeof value !== 'object' || Array.isArray(value) || value == null) { + return value; + } + var prototype = Object.getPrototypeOf(value); + if (!prototype || prototype === Object.prototype) { + return value; + } + return ''; +} + // This implementation of ReactPerf is going away some time mid 15.x. // While we plan to keep most of the API, the actual format of measurements // will change dramatically. To signal this, we wrap them into an opaque-ish @@ -174,7 +185,7 @@ var ReactDefaultPerf = { var result = {}; result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id; result.type = item.type; - result.args = JSON.stringify(item.args); + result.args = JSON.stringify(item.args, stripComplexValues); return result; })); console.log( diff --git a/src/test/__tests__/ReactDefaultPerf-test.js b/src/test/__tests__/ReactDefaultPerf-test.js index 3131f21cf1..afa7770aab 100644 --- a/src/test/__tests__/ReactDefaultPerf-test.js +++ b/src/test/__tests__/ReactDefaultPerf-test.js @@ -237,6 +237,21 @@ describe('ReactDefaultPerf', function() { expect(summary).toEqual([]); }); + it('should print a table after calling printOperations', function() { + var container = document.createElement('div'); + var measurements = measure(() => { + ReactDOM.render(
hey
, container); + }); + spyOn(console, 'table'); + ReactDefaultPerf.printOperations(measurements); + expect(console.table.calls.length).toBe(1); + expect(console.table.argsForCall[0][0]).toEqual([{ + 'data-reactid': '', + type: 'set innerHTML', + args: '{"node":"","children":[],"html":null,"text":null}', + }]); + }); + it('warns once when using getMeasurementsSummaryMap', function() { var measurements = measure(() => {}); spyOn(console, 'error');