3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/tracing/analysis/analysis_view.html">
9 <link rel="import" href="/tracing/analysis/stub_analysis_results.html">
10 <link rel="import" href="/tracing/test_utils.html">
11 <link rel="import" href="/tracing/selection.html">
12 <link rel="import" href="/tracing/trace_model.html">
17 tvcm.unittest.testSuite(function() {
18 var Model = tracing.TraceModel;
19 var Thread = tracing.trace_model.Thread;
20 var Selection = tracing.Selection;
21 var AnalysisView = tracing.analysis.AnalysisView;
22 var StubAnalysisResults = tracing.analysis.StubAnalysisResults;
23 var newSliceNamed = tracing.test_utils.newSliceNamed;
24 var newSliceCategory = tracing.test_utils.newSliceCategory;
26 var createSelectionWithSingleSlice = function(withCategory) {
27 var model = new Model();
28 var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
30 t53.sliceGroup.pushSlice(newSliceCategory('foo', 'b', 0, 0.002));
32 t53.sliceGroup.pushSlice(newSliceNamed('b', 0, 0.002));
35 t53track.thread = t53;
37 var selection = new Selection();
38 selection.push(t53.sliceGroup.slices[0]);
39 assertEquals(1, selection.length);
44 var createSelectionWithTwoSlices = function() {
45 var model = new Model();
46 var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
47 t53.sliceGroup.pushSlice(newSliceNamed('a', 0.0, 0.04));
48 t53.sliceGroup.pushSlice(newSliceNamed('aa', 0.120, 0.06));
51 t53track.thread = t53;
53 var selection = new Selection();
54 selection.push(t53.sliceGroup.slices[0]);
55 selection.push(t53.sliceGroup.slices[1]);
60 var createSelectionWithTwoSlicesSameTitle = function() {
61 var model = new Model();
62 var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
63 t53.sliceGroup.pushSlice(newSliceNamed('c', 0.0, 0.04));
64 t53.sliceGroup.pushSlice(newSliceNamed('c', 0.12, 0.06));
67 t53track.thread = t53;
69 var selection = new Selection();
70 selection.push(t53.sliceGroup.slices[0]);
71 selection.push(t53.sliceGroup.slices[1]);
76 test('instantiate_withSingleSlice', function() {
77 var selection = createSelectionWithSingleSlice();
79 var analysisEl = new AnalysisView();
80 analysisEl.selection = selection;
81 this.addHTMLOutput(analysisEl);
84 test('instantiate_withSingleSliceCategory', function() {
85 var selection = createSelectionWithSingleSlice(true);
87 var analysisEl = new AnalysisView();
88 analysisEl.selection = selection;
89 this.addHTMLOutput(analysisEl);
92 test('instantiate_withMultipleSlices', function() {
93 var selection = createSelectionWithTwoSlices();
95 var analysisEl = new AnalysisView();
96 analysisEl.selection = selection;
97 this.addHTMLOutput(analysisEl);
100 test('instantiate_withMultipleSlicesSameTitle', function() {
101 var selection = createSelectionWithTwoSlicesSameTitle();
103 var analysisEl = new AnalysisView();
104 analysisEl.selection = selection;
105 this.addHTMLOutput(analysisEl);
108 test('analyzeSelectionWithSingleSlice', function() {
109 var selection = createSelectionWithSingleSlice();
111 var results = new StubAnalysisResults();
112 tracing.analysis.analyzeSelection(results, selection);
113 assertEquals(1, results.tables.length);
114 var table = results.tables[0];
115 var header = results.headers[0];
116 assertEquals('Selected Slice:', header.label);
117 assertEquals(3, table.rows.length);
119 assertEquals('b', table.rows[0].text);
120 assertEquals(0, table.rows[1].time);
121 assertAlmostEquals(0.002, table.rows[2].time);
124 test('analyzeSelectionWithSingleSliceCategory', function() {
125 var selection = createSelectionWithSingleSlice(true);
127 var results = new StubAnalysisResults();
128 tracing.analysis.analyzeSelection(results, selection);
129 assertEquals(1, results.tables.length);
130 var table = results.tables[0];
131 var header = results.headers[0];
132 assertEquals('Selected Slice:', header.label);
133 assertEquals(4, table.rows.length);
135 assertEquals('b', table.rows[0].text);
136 assertEquals('foo', table.rows[1].text);
137 assertEquals(0, table.rows[2].time);
138 assertAlmostEquals(0.002, table.rows[3].time);
141 test('analyzeSelectionWithTwoSlices', function() {
142 var selection = createSelectionWithTwoSlices();
144 var results = new StubAnalysisResults();
145 tracing.analysis.analyzeSelection(results, selection);
146 assertEquals(1, results.tables.length);
147 var table = results.tables[0];
148 assertEquals('Slices:', results.headers[0].label);
149 assertEquals(6, table.rows.length);
151 assertEquals('a', table.rows[0].label);
152 assertEquals(1, table.rows[0].occurences);
153 assertAlmostEquals(0.04, table.rows[0].duration);
154 assertAlmostEquals(0.04, table.rows[0].selfTime);
155 assertEquals(null, table.rows[0].cpuDuration);
156 assertEquals('aa', table.rows[1].label);
157 assertEquals(1, table.rows[1].occurences);
158 assertAlmostEquals(0.06, table.rows[1].duration);
159 assertAlmostEquals(0.06, table.rows[1].selfTime);
160 assertEquals(null, table.rows[1].cpuDuration);
161 assertEquals('Totals', table.rows[2].label);
162 assertEquals(2, table.rows[2].occurences);
163 assertAlmostEquals(0.1, table.rows[2].duration);
164 assertAlmostEquals(0.1, table.rows[2].selfTime);
165 assertEquals(null, table.rows[2].cpuDuration);
167 assertEquals('Selection start', table.rows[4].label);
168 assertAlmostEquals(0, table.rows[4].time);
170 assertEquals('Selection extent', table.rows[5].label);
171 assertAlmostEquals(0.18, table.rows[5].time);
174 test('analyzeSelectionWithTwoSlicesSameTitle', function() {
175 var selection = createSelectionWithTwoSlicesSameTitle();
177 var results = new StubAnalysisResults();
178 tracing.analysis.analyzeSelection(results, selection);
179 assertEquals(2, results.tables.length);
182 assertEquals('Slices:', results.headers[0].label);
184 t = results.tables[0];
194 min: 0.04, max: 0.06, avg: 0.05,
195 avg_stddev: 0.014142135623730947
199 assertObjectEquals({label: 'Selection start', time: 0}, t.rows[1]);
200 assertObjectEquals({label: 'Selection extent', time: 0.18}, t.rows[2]);
202 assertObjectEquals({label: 'Title: ', value: 'c'}, results.info[0]);
203 assertObjectEquals({label: 'Category: ', value: ''}, results.info[1]);
206 var t = results.tables[1];
223 test('instantiate_withSingleSliceContainingIDRef', function() {
224 var model = new Model();
225 var p1 = model.getOrCreateProcess(1);
226 var myObjectSlice = p1.objects.addSnapshot(
227 '0x1000', 'cat', 'my_object', 0);
229 var t1 = p1.getOrCreateThread(1);
230 t1.sliceGroup.pushSlice(newSliceCategory('cat', 'b', 0, 2));
231 t1.sliceGroup.slices[0].args.my_object = myObjectSlice;
236 var selection = new Selection();
237 selection.push(t1.sliceGroup.slices[0]);
238 assertEquals(1, selection.length);
240 var analysisEl = new AnalysisView();
241 analysisEl.selection = selection;
242 this.addHTMLOutput(analysisEl);