Track parentID for ReactPerf

This commit is contained in:
Dan Abramov
2016-04-21 17:59:31 +01:00
parent f530b977ec
commit ab0ef89ec7
2 changed files with 38 additions and 14 deletions
@@ -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) {
@@ -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;
}