Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / tracing / timeline_track_view_test.js
1 // Copyright (c) 2013 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.
4
5 'use strict';
6
7 tvcm.require('tracing.test_utils');
8 tvcm.require('tracing.timeline_track_view');
9 tvcm.require('tracing.importer.trace_event_importer');
10
11 tvcm.unittest.testSuite('tracing.timeline_track_view_test', function() {
12
13   var Selection = tracing.Selection;
14   var SelectionState = tracing.trace_model.SelectionState;
15
16   function contains(array, element) {
17     for (var i = 0; i < array.length; i++) {
18       if (array[i] === element) {
19         return true;
20       }
21     }
22     return false;
23   };
24
25   function checkSelectionStates(timeline, selection, highlight) {
26     selection = selection || [];
27     highlight = highlight || [];
28
29     assertEquals(selection.length, timeline.selection.length);
30     assertEquals(highlight.length, timeline.highlight.length);
31
32     assertArrayEquals(selection, timeline.selection);
33     assertArrayEquals(highlight, timeline.highlight);
34
35     timeline.model.iterateAllEvents(function(event) {
36       if (contains(selection, event))
37         assertEquals(SelectionState.SELECTED, event.selectionState);
38       else if (contains(highlight, event))
39         assertEquals(SelectionState.HIGHLIGHTED, event.selectionState);
40       else if (highlight.length)
41         assertEquals(SelectionState.DIMMED, event.selectionState);
42       else
43         assertEquals(SelectionState.NONE, event.selectionState);
44     });
45   };
46
47   test('instantiate', function() {
48     var events = [
49       {name: 'a', args: {}, pid: 52, ts: 520, cat: 'foo', tid: 53, ph: 'B'},
50       {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'E'},
51       {name: 'b', args: {}, pid: 52, ts: 629, cat: 'foo', tid: 53, ph: 'B'},
52       {name: 'b', args: {}, pid: 52, ts: 631, cat: 'foo', tid: 53, ph: 'E'}
53     ];
54     var model = new tracing.TraceModel(events);
55     var timeline = new tracing.TimelineTrackView();
56     timeline.model = model;
57     timeline.focusElement = timeline;
58     timeline.tabIndex = 0;
59     this.addHTMLOutput(timeline);
60   });
61
62   test('addAllObjectsMatchingFilterToSelection', function() {
63     var model = new tracing.TraceModel();
64     var p1 = model.getOrCreateProcess(1);
65     var t1 = p1.getOrCreateThread(1);
66
67     t1.sliceGroup.pushSlice(
68         new tracing.trace_model.ThreadSlice('', 'a', 0, 1, {}, 3));
69     t1.sliceGroup.pushSlice(
70         new tracing.trace_model.ThreadSlice('', 'b', 0, 1.1, {}, 2.8));
71
72     var t1asg = t1.asyncSliceGroup;
73     t1asg.slices.push(
74         tracing.test_utils.newAsyncSliceNamed('a', 0, 1, t1, t1));
75     t1asg.slices.push(
76         tracing.test_utils.newAsyncSliceNamed('b', 1, 2, t1, t1));
77
78     var timeline = new tracing.TimelineTrackView();
79     timeline.model = model;
80
81     var expected = [t1asg.slices[0].subSlices[0],
82                     t1.sliceGroup.slices[0]];
83     var result = new tracing.Selection();
84     timeline.addAllObjectsMatchingFilterToSelection(
85         new tracing.TitleFilter('a'), result);
86     assertEquals(2, result.length);
87     assertEquals(expected[0], result[0]);
88     assertEquals(expected[1], result[1]);
89
90     var expected = [t1asg.slices[1].subSlices[0],
91                     t1.sliceGroup.slices[1]];
92     var result = new tracing.Selection();
93     timeline.addAllObjectsMatchingFilterToSelection(
94         new tracing.TitleFilter('b'), result);
95     assertEquals(2, result.length);
96     assertEquals(expected[0], result[0]);
97     assertEquals(expected[1], result[1]);
98   });
99
100   test('emptyThreadsDeleted', function() {
101     var model = new tracing.TraceModel();
102     var p1 = model.getOrCreateProcess(1);
103     var t1 = p1.getOrCreateThread(1);
104
105     var timeline = new tracing.TimelineTrackView();
106     timeline.model = model;
107
108     assertFalse(timeline.hasVisibleContent);
109   });
110
111   test('filteredCounters', function() {
112     var model = new tracing.TraceModel();
113     var c1 = model.kernel.getOrCreateCpu(0);
114     c1.getOrCreateCounter('', 'b');
115
116     var p1 = model.getOrCreateProcess(1);
117     var ctr = p1.getOrCreateCounter('', 'a');
118     var series = new tracing.trace_model.CounterSeries('a', 0);
119     series.addSample(0, 1);
120     ctr.addSeries(series);
121
122     var timeline = new tracing.TimelineTrackView();
123     timeline.model = model;
124
125     assertTrue(timeline.hasVisibleContent);
126   });
127
128   test('filteredCpus', function() {
129     var model = new tracing.TraceModel();
130     var c1 = model.kernel.getOrCreateCpu(1);
131     c1.getOrCreateCounter('', 'a');
132
133     var timeline = new tracing.TimelineTrackView();
134     timeline.model = model;
135
136     assertTrue(timeline.hasVisibleContent);
137   });
138
139   test('filteredProcesses', function() {
140     var model = new tracing.TraceModel();
141     var p1 = model.getOrCreateProcess(1);
142     p1.getOrCreateCounter('', 'a');
143
144     var timeline = new tracing.TimelineTrackView();
145     timeline.model = model;
146
147     assertTrue(timeline.hasVisibleContent);
148   });
149
150   test('filteredThreads', function() {
151     var model = new tracing.TraceModel();
152     var p1 = model.getOrCreateProcess(1);
153     var t1 = p1.getOrCreateThread(2);
154     t1.sliceGroup.pushSlice(tracing.test_utils.newSlice(0, 1));
155
156     var timeline = new tracing.TimelineTrackView();
157     timeline.model = model;
158
159     assertTrue(timeline.hasVisibleContent);
160   });
161
162   test('selectionAndHighlight', function() {
163     var events = [
164       {name: 'a', args: {}, pid: 52, ts: 520, cat: 'foo', tid: 53, ph: 'B'},
165       {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'},
166       {name: 'ab', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'},
167       {name: 'b', args: {}, pid: 52, ts: 629, cat: 'foo', tid: 53, ph: 'B'},
168       {name: 'b', args: {}, pid: 52, ts: 631, cat: 'foo', tid: 53, ph: 'B'}
169     ];
170     var model = new tracing.TraceModel(events);
171     var timeline = new tracing.TimelineTrackView();
172     timeline.model = model;
173
174     var selection = new Selection();
175     timeline.addAllObjectsMatchingFilterToSelection(
176         new tracing.TitleFilter('a'), selection);
177
178     var highlight = new Selection();
179     timeline.addAllObjectsMatchingFilterToSelection(
180         new tracing.TitleFilter('b'), highlight);
181
182     // Test for faulty input.
183     assertThrows(function() {
184       timeline.selection = 'selection';
185     });
186
187     assertThrows(function() {
188       timeline.highlight = 1;
189     });
190
191     assertThrows(function() {
192       timeline.setSelectionAndHighlight(0, false);
193     });
194
195     // Check state after reset.
196     timeline.setSelectionAndHighlight(null, null);
197     checkSelectionStates(timeline, null, null);
198
199     // Add selection only.
200     timeline.selection = selection;
201     assertEquals(selection, timeline.selection);
202     checkSelectionStates(timeline, selection, null);
203
204     // Reset selection.
205     timeline.selection = null;
206     assertEquals(0, timeline.selection.length);
207     checkSelectionStates(timeline, null, null);
208
209     // Add highlight only.
210     timeline.highlight = highlight;
211     assertEquals(highlight, timeline.highlight);
212     checkSelectionStates(timeline, null, highlight);
213
214     // Reset highlight
215     timeline.highlight = null;
216     assertEquals(0, timeline.highlight.length);
217     checkSelectionStates(timeline, null, null);
218
219     // Add selection and highlight.
220     timeline.setSelectionAndHighlight(selection, highlight);
221     checkSelectionStates(timeline, selection, highlight);
222
223     // Selection replaces old selection.
224     var subSelection = selection.subSelection(0, 1);
225     timeline.selection = subSelection;
226     checkSelectionStates(timeline, subSelection, highlight);
227
228     // Highlight replaces old highlight.
229     var subHighlight = highlight.subSelection(1, 2);
230     timeline.highlight = subHighlight;
231     checkSelectionStates(timeline, subSelection, subHighlight);
232
233     // Set selection and clear highlight.
234     timeline.setSelectionAndClearHighlight(selection);
235     checkSelectionStates(timeline, selection, null);
236
237     // Set highlight and clear selection.
238     timeline.setHighlightAndClearSelection(highlight);
239     checkSelectionStates(timeline, null, highlight);
240
241     // Reset both.
242     timeline.setSelectionAndHighlight(null, null);
243     checkSelectionStates(timeline, null, null);
244   });
245 });