blob: eacb261e95687a3024a0b75b8cffbe1aa54ab2fb [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Test timeline aggregated details.\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.loadModule('network_test_runner');
await TestRunner.showPanel('timeline');
const sessionId = '6.23';
const rawTraceEvents = [
{
'args': {'name': 'Renderer'},
'cat': '__metadata',
'name': 'process_name',
'ph': 'M',
'pid': 17851,
'tid': 23,
'ts': 0
},
{
'args': {'name': 'CrRendererMain'},
'cat': '__metadata',
'name': 'thread_name',
'ph': 'M',
'pid': 17851,
'tid': 23,
'ts': 0
},
{
'args': {
'data': {
'page': '0x2f7b63884000',
'sessionId': sessionId,
'persistentIds': true,
'frames': [
{'frame': '0x2f7b63884000', 'url': 'top-page-url', 'name': 'top-page-name'}
]
}
},
'cat': 'disabled-by-default-devtools.timeline',
'name': 'TracingStartedInPage',
'ph': 'I',
'pid': 17851,
'tid': 23,
'ts': 100000,
'tts': 606543
},
{'pid':17851,'tid':23,'ts':101000,'ph':'b','cat':'blink.user_timing','name':'HTML done parsing','args':{},'id':'0x472bc7'},
{'pid':17851,'tid':23,'ts':102000,'ph':'e','cat':'blink.user_timing','name':'HTML done parsing','args':{},'id':'0x472bc7'},
{'pid':17851,'tid':23,'ts':101250,'ph':'b','cat':'blink.user_timing','name':'eval scripts','args':{},'id':'0xa09f70'},
{'pid':17851,'tid':23,'ts':102000,'ph':'e','cat':'blink.user_timing','name':'eval scripts','args':{},'id':'0xa09f70'}
];
const timeline = UI.panels.timeline;
timeline._setModel(PerformanceTestRunner.createPerformanceModelWithEvents(rawTraceEvents));
testEventTree('CallTree');
testEventTree('BottomUp');
testEventTree('EventLog');
TestRunner.completeTest();
function getTreeView(type) {
timeline._flameChart._detailsView._tabbedPane.selectTab(type, true);
return timeline._flameChart._detailsView._tabbedPane.visibleView;
}
function testEventTree(type) {
const flameChart = timeline._flameChart._mainFlameChart;
flameChart._selectGroup(flameChart._rawTimelineData.groups.findIndex(group => group.name === 'Timings'));
TestRunner.addResult('');
TestRunner.addResult(type);
const tree = getTreeView(type);
const rootNode = tree.dataGrid.rootNode();
for (const node of rootNode.children)
printEventTree(1, node._profileNode, node._treeView);
}
function printEventTree(padding, node, treeView) {
let name;
if (node.isGroupNode()) {
name = treeView._displayInfoForGroupNode(node).name;
} else {
name = node.event.name === TimelineModel.TimelineModel.RecordType.JSFrame ?
UI.beautifyFunctionName(node.event.args['data']['functionName']) :
Timeline.TimelineUIUtils.eventTitle(node.event);
}
TestRunner.addResult(' '.repeat(padding) + `${name}: ${node.selfTime.toFixed(3)} ${node.totalTime.toFixed(3)}`);
node.children().forEach(printEventTree.bind(null, padding + 1));
}
})();