Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / analysis / analyze_slices_test.html
1 <!DOCTYPE html>
2 <!--
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.
6 -->
7
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">
13
14 <script>
15 'use strict';
16
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;
25
26   var createSelectionWithSingleSlice = function(withCategory) {
27     var model = new Model();
28     var t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
29     if (withCategory)
30       t53.sliceGroup.pushSlice(newSliceCategory('foo', 'b', 0, 0.002));
31     else
32       t53.sliceGroup.pushSlice(newSliceNamed('b', 0, 0.002));
33
34     var t53track = {};
35     t53track.thread = t53;
36
37     var selection = new Selection();
38     selection.push(t53.sliceGroup.slices[0]);
39     assertEquals(1, selection.length);
40
41     return selection;
42   };
43
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));
49
50     var t53track = {};
51     t53track.thread = t53;
52
53     var selection = new Selection();
54     selection.push(t53.sliceGroup.slices[0]);
55     selection.push(t53.sliceGroup.slices[1]);
56
57     return selection;
58   };
59
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));
65
66     var t53track = {};
67     t53track.thread = t53;
68
69     var selection = new Selection();
70     selection.push(t53.sliceGroup.slices[0]);
71     selection.push(t53.sliceGroup.slices[1]);
72
73     return selection;
74   };
75
76   test('instantiate_withSingleSlice', function() {
77     var selection = createSelectionWithSingleSlice();
78
79     var analysisEl = new AnalysisView();
80     analysisEl.selection = selection;
81     this.addHTMLOutput(analysisEl);
82   });
83
84   test('instantiate_withSingleSliceCategory', function() {
85     var selection = createSelectionWithSingleSlice(true);
86
87     var analysisEl = new AnalysisView();
88     analysisEl.selection = selection;
89     this.addHTMLOutput(analysisEl);
90   });
91
92   test('instantiate_withMultipleSlices', function() {
93     var selection = createSelectionWithTwoSlices();
94
95     var analysisEl = new AnalysisView();
96     analysisEl.selection = selection;
97     this.addHTMLOutput(analysisEl);
98   });
99
100   test('instantiate_withMultipleSlicesSameTitle', function() {
101     var selection = createSelectionWithTwoSlicesSameTitle();
102
103     var analysisEl = new AnalysisView();
104     analysisEl.selection = selection;
105     this.addHTMLOutput(analysisEl);
106   });
107
108   test('analyzeSelectionWithSingleSlice', function() {
109     var selection = createSelectionWithSingleSlice();
110
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);
118
119     assertEquals('b', table.rows[0].text);
120     assertEquals(0, table.rows[1].time);
121     assertAlmostEquals(0.002, table.rows[2].time);
122   });
123
124   test('analyzeSelectionWithSingleSliceCategory', function() {
125     var selection = createSelectionWithSingleSlice(true);
126
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);
134
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);
139   });
140
141   test('analyzeSelectionWithTwoSlices', function() {
142     var selection = createSelectionWithTwoSlices();
143
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);
150
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);
166
167     assertEquals('Selection start', table.rows[4].label);
168     assertAlmostEquals(0, table.rows[4].time);
169
170     assertEquals('Selection extent', table.rows[5].label);
171     assertAlmostEquals(0.18, table.rows[5].time);
172   });
173
174   test('analyzeSelectionWithTwoSlicesSameTitle', function() {
175     var selection = createSelectionWithTwoSlicesSameTitle();
176
177     var results = new StubAnalysisResults();
178     tracing.analysis.analyzeSelection(results, selection);
179     assertEquals(2, results.tables.length);
180
181     var t;
182     assertEquals('Slices:', results.headers[0].label);
183     // Table 1.
184     t = results.tables[0];
185     assertObjectEquals({
186       label: 'c',
187       duration: 0.1,
188       cpuDuration: null,
189       selfTime: 0.1,
190       cpuSelfTime: null,
191       occurences: 2,
192       percentage: null,
193       details: {
194         min: 0.04, max: 0.06, avg: 0.05,
195         avg_stddev: 0.014142135623730947
196       }
197     }, t.rows[0]);
198
199     assertObjectEquals({label: 'Selection start', time: 0}, t.rows[1]);
200     assertObjectEquals({label: 'Selection extent', time: 0.18}, t.rows[2]);
201
202     assertObjectEquals({label: 'Title: ', value: 'c'}, results.info[0]);
203     assertObjectEquals({label: 'Category: ', value: ''}, results.info[1]);
204
205     // Table 2.
206     var t = results.tables[1];
207     assertObjectEquals(
208         {start: 0,
209           duration: 0.04,
210           selfTime: 0.04,
211           args: {}
212         },
213         t.rows[0]);
214     assertObjectEquals(
215         {start: 0.12,
216           duration: 0.06,
217           selfTime: 0.06,
218           args: {}
219         },
220         t.rows[1]);
221   });
222
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);
228
229     var t1 = p1.getOrCreateThread(1);
230     t1.sliceGroup.pushSlice(newSliceCategory('cat', 'b', 0, 2));
231     t1.sliceGroup.slices[0].args.my_object = myObjectSlice;
232
233     var t1track = {};
234     t1track.thread = t1;
235
236     var selection = new Selection();
237     selection.push(t1.sliceGroup.slices[0]);
238     assertEquals(1, selection.length);
239
240     var analysisEl = new AnalysisView();
241     analysisEl.selection = selection;
242     this.addHTMLOutput(analysisEl);
243   });
244 });
245 </script>