diff --git a/src/test/ReactDefaultPerf.js b/src/test/ReactDefaultPerf.js
index 7fdc6e518e..f7de7934f2 100644
--- a/src/test/ReactDefaultPerf.js
+++ b/src/test/ReactDefaultPerf.js
@@ -205,6 +205,9 @@ var ReactDefaultPerf = {
var id = args[0];
if (moduleName === 'EventPluginHub') {
id = id._rootNodeID;
+ } else if (fnName === 'replaceNodeWithMarkup') {
+ // Old node is already unmounted; can't get its instance
+ id = ReactDOMComponentTree.getInstanceFromNode(args[1].node)._rootNodeID;
} else if (typeof id === 'object') {
id = ReactDOMComponentTree.getInstanceFromNode(args[0])._rootNodeID;
}
diff --git a/src/test/__tests__/ReactDefaultPerf-test.js b/src/test/__tests__/ReactDefaultPerf-test.js
index 9eb3867a9e..f04f9bebaf 100644
--- a/src/test/__tests__/ReactDefaultPerf-test.js
+++ b/src/test/__tests__/ReactDefaultPerf-test.js
@@ -36,13 +36,13 @@ describe('ReactDefaultPerf', function() {
App = React.createClass({
render: function() {
- return
;
+ return
;
},
});
Box = React.createClass({
render: function() {
- return ;
+ return ;
},
});
@@ -84,6 +84,28 @@ describe('ReactDefaultPerf', function() {
/*eslint-enable dot-notation */
});
+ it('should count no-op update in child as waste', function() {
+ var container = document.createElement('div');
+ ReactDOM.render(, container);
+
+ // Here, we add a Box -- two of the updates are wasted time (but the
+ // addition of the third is not)
+ var measurements = measure(() => {
+ ReactDOM.render(, container);
+ });
+
+ var summary = ReactDefaultPerf.getMeasurementsSummaryMap(measurements);
+ expect(summary.length).toBe(1);
+
+ /*eslint-disable dot-notation */
+
+ expect(summary[0]['Owner > component']).toBe('App > Box');
+ expect(summary[0]['Wasted time (ms)']).not.toBe(0);
+ expect(summary[0]['Instances']).toBe(1);
+
+ /*eslint-enable dot-notation */
+ });
+
function expectNoWaste(fn) {
var measurements = measure(fn);
var summary = ReactDefaultPerf.getMeasurementsSummaryMap(measurements);