Commit 5a410370 authored by alph@chromium.org's avatar alph@chromium.org

DevTools: [timeline tree view] fix total time calculation for recursive case.

BUG=523537
NOTRY=true

Review URL: https://codereview.chromium.org/1312563002

git-svn-id: svn://svn.chromium.org/blink/trunk@201072 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent dd1c9d20
......@@ -15,15 +15,21 @@ JSFrame: 230.000 / 0.833 l
JSFrame: 230.000 / 0.833 a
Layout: 230.010 / 0.100
FunctionCall: 250.000 / 10.000
JSFrame: 251.000 / 8.482 x
JSFrame: 251.000 / 8.482 y
FunctionCall: 251.000 / 8.000
JSFrame: 251.000 / 1.513 x
JSFrame: 251.000 / 1.513 y
FunctionCall: 251.000 / 1.000
JSFrame: 251.000 / 0.200 z
JSFrame: 251.000 / 0.200 w
JSFrame: 251.200 / 0.200 w
JSFrame: 253.000 / 0.015 recursive_a
JSFrame: 253.000 / 0.014 recursive_b
JSFrame: 253.000 / 0.012 recursive_a
JSFrame: 253.000 / 0.008 recursive_b
JSFrame: 253.100 / 0.200 recursive_a
JSFrame: 253.100 / 0.100 recursive_b
Top-Down Chart: 0.000 40.000
Function Call: 22.305 40.000
Function Call: 29.059 40.000
a: 0.000 8.380
b: 7.125 8.380
c: 0.351 0.351
......@@ -33,17 +39,26 @@ Top-Down Chart: 0.000 40.000
l: 0.000 0.833
a: 0.733 0.833
Layout: 0.100 0.100
x: 0.000 8.482
y: 0.482 8.482
Function Call: 7.600 8.000
x: 0.000 1.513
y: 0.513 1.513
Function Call: 0.600 1.000
z: 0.000 0.200
w: 0.200 0.200
w: 0.200 0.200
recursive_a: 0.101 0.215
recursive_b: 0.102 0.114
recursive_a: 0.004 0.012
recursive_b: 0.008 0.008
Bottom-Up Chart: 40.000 40.000
Function Call: 29.905 48.000
y: 7.600 8.000
x: 7.600 8.000
Function Call: 7.600 8.000
Function Call: 29.659 40.000
y: 0.600 1.000
x: 0.600 1.000
Function Call: 0.600 1.000
a: 0.733 9.213
Function Call: 0.000 8.380
l: 0.733 0.833
f: 0.733 0.833
Function Call: 0.733 0.833
b: 7.125 8.380
a: 7.125 8.380
Function Call: 7.125 8.380
......@@ -56,18 +71,14 @@ Bottom-Up Chart: 40.000 40.000
b: 0.905 0.905
a: 0.905 0.905
Function Call: 0.905 0.905
a: 0.733 0.833
l: 0.733 0.833
f: 0.733 0.833
Function Call: 0.733 0.833
Layout: 0.100 0.100
a: 0.100 0.100
l: 0.100 0.100
f: 0.100 0.100
Function Call: 0.100 0.100
y: 0.482 8.482
x: 0.482 8.482
Function Call: 0.482 8.482
y: 0.513 1.513
x: 0.513 1.513
Function Call: 0.513 1.513
w: 0.400 0.400
z: 0.200 0.200
Function Call: 0.200 0.200
......@@ -78,4 +89,15 @@ Bottom-Up Chart: 40.000 40.000
y: 0.200 0.200
x: 0.200 0.200
Function Call: 0.200 0.200
recursive_a: 0.105 0.215
Function Call: 0.101 0.215
recursive_b: 0.004 0.012
recursive_a: 0.004 0.012
Function Call: 0.004 0.012
recursive_b: 0.110 0.114
recursive_a: 0.110 0.114
Function Call: 0.102 0.114
recursive_b: 0.008 0.008
recursive_a: 0.008 0.008
Function Call: 0.008 0.008
......@@ -323,7 +323,7 @@ function test()
"pid": 17851,
"tid": 23,
"ts": 251000,
"dur": 8000
"dur": 1000
},
{
"args": {
......@@ -411,6 +411,131 @@ function test()
"tid": 23,
"ts": 251400,
},
{
"args": {
"data": {
"stackTrace": [
{ "functionName": "recursive_b", "scriptId": 1 },
{ "functionName": "recursive_a", "scriptId": 1 },
{ "functionName": "recursive_b", "scriptId": 1 },
{ "functionName": "recursive_a", "scriptId": 1 }
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253000,
},
{
"args": {
"data": {
"stackTrace": [
{ "functionName": "recursive_a", "scriptId": 1 },
{ "functionName": "recursive_b", "scriptId": 1 },
{ "functionName": "recursive_a", "scriptId": 1 }
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253008,
},
{
"args": {
"data": {
"stackTrace": [
{ "functionName": "recursive_b", "scriptId": 1 },
{ "functionName": "recursive_a", "scriptId": 1 }
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253012,
},
{
"args": {
"data": {
"stackTrace": [
{ "functionName": "recursive_a", "scriptId": 1 }
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253014,
},
{
"args": {
"data": {
"stackTrace": [
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253015,
},
{
"args": {
"data": {
"stackTrace": [
{ "functionName": "recursive_b", "scriptId": 1 },
{ "functionName": "recursive_a", "scriptId": 1 }
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253100,
},
{
"args": {
"data": {
"stackTrace": [
{ "functionName": "recursive_a", "scriptId": 1 }
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253200,
},
{
"args": {
"data": {
"stackTrace": [
]
}
},
"cat": "disabled-by-default-devtools.timeline",
"name": "JSSample",
"ph": "I",
"pid": 17851,
"tid": 23,
"ts": 253300,
},
{
"args": {},
"cat": "disabled-by-default-devtools.timeline",
......
......@@ -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 nodesOnStack = /** @type {!Set<string>} */ (new Set());
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 hadNode = nodesOnStack.has(tdNode.id);
if (!hadNode)
nodesOnStack.add(tdNode.id);
if (tdNode.children)
tdNode.children.forEach(processNode);
if (!hadNode)
nodesOnStack.delete(tdNode.id);
}
/**
......@@ -1592,6 +1596,7 @@ WebInspector.TimelineModel.buildBottomUpTree = function(topDownTree, groupingCal
buParent.children.set(id, buNode);
} else {
buNode.selfTime += selfTime;
if (!nodesOnStack.has(id))
buNode.totalTime += totalTime;
}
tdNode = tdNode.parent;
......@@ -1599,6 +1604,13 @@ WebInspector.TimelineModel.buildBottomUpTree = function(topDownTree, groupingCal
}
}
// 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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment