From ab0ef89ec77962a39e3621ab4ce46cc073d3d7b2 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Thu, 21 Apr 2016 17:55:31 +0100 Subject: [PATCH] Track parentID for ReactPerf --- .../devtools/ReactComponentTreeDevtool.js | 34 +++++++++++++------ .../ReactComponentTreeDevtool-test.js | 18 +++++++--- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/isomorphic/devtools/ReactComponentTreeDevtool.js b/src/isomorphic/devtools/ReactComponentTreeDevtool.js index f5d2b784a5..af00521163 100644 --- a/src/isomorphic/devtools/ReactComponentTreeDevtool.js +++ b/src/isomorphic/devtools/ReactComponentTreeDevtool.js @@ -50,20 +50,34 @@ var ReactComponentTreeDevtool = { updateTree(id, item => item.displayName = displayName); }, - onSetChildren(id, childIDs) { - childIDs.forEach(childID => { - var childItem = tree[childID]; - expect(childItem).toBeDefined(); - expect(childItem.isComposite).toBeDefined(); - expect(childItem.displayName).toBeDefined(); - expect(childItem.childIDs || childItem.text).toBeDefined(); + onSetChildren(id, nextChildIDs) { + var prevChildIDs; + updateTree(id, item => { + prevChildIDs = item.childIDs || []; + item.childIDs = nextChildIDs; }); - updateTree(id, item => item.childIDs = childIDs); + prevChildIDs.forEach(prevChildID => { + if (tree[prevChildID] && nextChildIDs.indexOf(prevChildID) === -1) { + tree[prevChildID].parentID = null; + } + }); + + nextChildIDs.forEach(nextChildID => { + var item = tree[nextChildID]; + expect(item).toBeDefined(); + expect(item.isComposite).toBeDefined(); + expect(item.displayName).toBeDefined(); + expect(item.childIDs || item.text).toBeDefined(); + + if (tree[nextChildID] && prevChildIDs.indexOf(nextChildID) === -1) { + tree[nextChildID].parentID = id; + } + }); }, - onSetOwner(id, ownerDebugID) { - updateTree(id, item => item.ownerDebugID = ownerDebugID); + onSetOwner(id, ownerID) { + updateTree(id, item => item.ownerID = ownerID); }, onSetText(id, text) { diff --git a/src/isomorphic/devtools/__tests__/ReactComponentTreeDevtool-test.js b/src/isomorphic/devtools/__tests__/ReactComponentTreeDevtool-test.js index 9c1952668f..ced1b0f411 100644 --- a/src/isomorphic/devtools/__tests__/ReactComponentTreeDevtool-test.js +++ b/src/isomorphic/devtools/__tests__/ReactComponentTreeDevtool-test.js @@ -36,22 +36,32 @@ describe('ReactComponentTreeDevtool', () => { ReactDebugTool.removeDevtool(ReactComponentTreeDevtool); }); - function denormalizeTree(tree, rootID, includeOwner) { + function denormalizeTree( + tree, + rootID, + includeOwner = false, + expectedParentID = null + ) { var item = tree[rootID]; var result = { isComposite: item.isComposite, displayName: item.displayName, }; + + if (expectedParentID) { + expect(item.parentID).toBe(expectedParentID); + } + if (item.childIDs) { result.children = item.childIDs.map(childID => - denormalizeTree(tree, childID, includeOwner) + denormalizeTree(tree, childID, includeOwner, rootID) ); } if (item.text != null) { result.text = item.text; } - if (includeOwner && item.ownerDebugID) { - result.ownerDisplayName = tree[item.ownerDebugID].displayName; + if (includeOwner && item.ownerID) { + result.ownerDisplayName = tree[item.ownerID].displayName; } return result; }