Chromium Code Reviews| Index: Source/devtools/front_end/timeline/TimelineModel.js |
| diff --git a/Source/devtools/front_end/timeline/TimelineModel.js b/Source/devtools/front_end/timeline/TimelineModel.js |
| index d198d9cbebd951fbd20ac5f025eed08532cd4662..2a72f4de28416c7a6557d4d9397b9b9c5d032077 100644 |
| --- a/Source/devtools/front_end/timeline/TimelineModel.js |
| +++ b/Source/devtools/front_end/timeline/TimelineModel.js |
| @@ -1552,19 +1552,23 @@ WebInspector.TimelineModel.buildBottomUpTree = function(topDownTree, groupingCal |
| buRoot.name = WebInspector.UIString("Bottom-Up Chart"); |
| /** @type {!Map<string,!WebInspector.TimelineModel.ProfileTreeNode>} */ |
| buRoot.children = new Map(); |
| - processNode(topDownTree); |
| + var nodesStack = /** @type {!Set<string>} */ (new Set()); |
|
yurys
2015/08/24 18:14:36
nodesOnStack
alph
2015/08/24 18:19:05
Done.
|
| + topDownTree.children.forEach(processNode); |
| /** |
| * @param {!WebInspector.TimelineModel.ProfileTreeNode} tdNode |
| */ |
| function processNode(tdNode) |
| { |
| - if (tdNode.selfTime > 0) { |
| - var buParent = groupingCallback && groupingCallback(tdNode) || buRoot; |
| - appendNode(tdNode, buParent); |
| - } |
| + var buParent = groupingCallback && groupingCallback(tdNode) || buRoot; |
| + appendNode(tdNode, buParent); |
| + var hadNode = nodesStack.has(tdNode.id); |
| + if (!hadNode) |
| + nodesStack.add(tdNode.id); |
| if (tdNode.children) |
| tdNode.children.forEach(processNode); |
| + if (!hadNode) |
| + nodesStack.delete(tdNode.id); |
| } |
| /** |
| @@ -1592,13 +1596,21 @@ WebInspector.TimelineModel.buildBottomUpTree = function(topDownTree, groupingCal |
| buParent.children.set(id, buNode); |
| } else { |
| buNode.selfTime += selfTime; |
| - buNode.totalTime += totalTime; |
| + if (!nodesStack.has(id)) |
| + buNode.totalTime += totalTime; |
| } |
| tdNode = tdNode.parent; |
| buParent = buNode; |
| } |
| } |
| + // Purge zero self time nodes. |
| + var rootChildren = buRoot.children; |
| + for (var item of rootChildren.entries()) { |
| + if (item[1].selfTime === 0) |
| + rootChildren.delete(item[0]); |
| + } |
| + |
| return buRoot; |
| } |