1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tracing.time_summary_side_panel');
8 tvcm.require('tracing.trace_model');
9 tvcm.require('tracing.test_utils');
11 tvcm.unittest.testSuite('tracing.time_summary_side_panel_test', function() {
12 var newSliceNamed = tracing.test_utils.newSliceNamed;
14 function createModel() {
15 var m = new tracing.TraceModel();
16 m.importTraces([], false, false, function() {
17 var browserProcess = m.getOrCreateProcess(1);
18 var browserMain = browserProcess.getOrCreateThread(2);
19 browserMain.name = 'CrBrowserMain';
20 browserMain.sliceGroup.beginSlice('cat', 'Task', 0, undefined, 0);
21 browserMain.sliceGroup.endSlice(10, 9);
22 browserMain.sliceGroup.beginSlice('cat', 'Task', 20, undefined, 10);
23 browserMain.sliceGroup.endSlice(30, 20);
25 var rendererProcess = m.getOrCreateProcess(4);
26 var rendererMain = rendererProcess.getOrCreateThread(5);
27 rendererMain.name = 'CrRendererMain';
28 rendererMain.sliceGroup.beginSlice('cat', 'Task', 0, undefined, 0);
29 rendererMain.sliceGroup.endSlice(30, 25);
30 rendererMain.sliceGroup.beginSlice('cat', 'Task', 40, undefined, 40);
31 rendererMain.sliceGroup.endSlice(60, 50);
36 test('group', function() {
37 var m = createModel();
38 var group = new tracing.ResultsForGroup(m, 'foo');
39 group.appendThreadSlices(m.bounds, m.processes[1].threads[2]);
40 assertEquals(20, group.wallTime);
41 assertEquals(19, group.cpuTime);
44 test('trim', function() {
47 value: 2.854999999999997,
51 value: 9.948999999999998,
55 value: 42.314000000000725,
59 value: 31.06900000000028,
60 label: 'AudioOutputDevice'
64 label: 'BrowserBlockingWorker2/50951'
68 label: 'BrowserBlockingWorker3/50695'
71 value: 18.52599999999993,
72 label: 'Chrome_ChildIOThread'
76 label: 'Chrome_FileThread'
80 label: 'Chrome_HistoryThread'
83 value: 25.421000000000046,
84 label: 'Chrome_IOThread'
88 label: 'Chrome_ProcessLauncherThread'
91 value: 643.087999999995,
95 value: 4.049999999999973,
96 label: 'CompositorRasterWorker1/22031'
99 value: 50.040000000000106,
100 label: 'CrBrowserMain'
103 value: 1256.5130000000042,
107 value: 5502.19499999999,
108 label: 'CrRendererMain'
111 value: 15.552999999999862,
112 label: 'FFmpegDemuxer'
115 value: 63.706000000001524,
119 value: 2.7419999999999987,
120 label: 'PowerSaveBlocker'
123 value: 0.11500000000000005,
129 var m = new tracing.TraceModel();
130 m.importTraces([], false, false, function() {
132 groupData.forEach(function(groupData) {
133 var group = new tracing.ResultsForGroup(m, groupData.label);
135 var slice = newSliceNamed(groupData.label, start, groupData.value);
136 start += groupData.value;
137 group.allSlices.push(slice);
138 group.topLevelSlices.push(slice);
145 function getValueFromGroup(d) { return d.wallTime; }
147 var otherGroup = new tracing.ResultsForGroup(m, 'Other');
148 var newGroups = tracing.trimPieChartData(
149 groups, otherGroup, getValueFromGroup);
151 // Visualize the data once its trimmed.
152 var chart = tracing.createPieChartFromResultGroups(
153 newGroups, 'Trimmed', getValueFromGroup);
154 this.addHTMLOutput(chart);
155 chart.setSize(chart.getMinSize());
159 test('basic', function() {
160 var m = createModel();
161 assertTrue(tracing.TimeSummarySidePanel.supportsModel(m).supported);
163 var panel = new tracing.TimeSummarySidePanel();
164 this.addHTMLOutput(panel);
166 panel.style.border = '1px solid black';