• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<html>
3<!--
4Copyright (c) 2012 The Chromium Authors. All rights reserved.
5Use of this source code is governed by a BSD-style license that can be
6found in the LICENSE file.
7-->
8<head>
9<title>TimelineModel tests</title>
10<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
11<script src="../shared/js/cr.js"></script>
12<script src="../shared/js/cr/event_target.js"></script>
13<script src="test_utils.js"></script>
14<script src="timeline_model.js"></script>
15<script>
16  goog.require('goog.testing.jsunit');
17</script>
18
19</head>
20<body>
21<script>
22'use strict';
23var TimelineCpu = tracing.TimelineCpu;
24var TimelineSlice = tracing.TimelineSlice;
25var TimelineThreadSlice = tracing.TimelineThreadSlice;
26var TimelineProcess = tracing.TimelineProcess;
27var TimelineThread = tracing.TimelineThread;
28var TimelineModel = tracing.TimelineModel;
29var TimelineFilter = tracing.TimelineFilter;
30var TimelineAsyncSlice = tracing.TimelineAsyncSlice;
31var TimelineAsyncSliceGroup = tracing.TimelineAsyncSliceGroup;
32var newAsyncSlice = test_utils.newAsyncSlice;
33
34function testThreadBounds_Empty() {
35  var t = new TimelineThread(new TimelineProcess(7), 1);
36  t.updateBounds();
37  assertEquals(undefined, t.minTimestamp);
38  assertEquals(undefined, t.maxTimestamp);
39}
40
41function testThreadBounds_SubRow() {
42  var t = new TimelineThread(new TimelineProcess(7), 1);
43  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
44  t.updateBounds();
45  assertEquals(1, t.minTimestamp);
46  assertEquals(4, t.maxTimestamp);
47}
48
49function testThreadBounds_AsyncSliceGroup() {
50  var t = new TimelineThread(new TimelineProcess(7), 1);
51  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
52  t.asyncSlices.push(newAsyncSlice(0.1, 5, t, t));
53  t.updateBounds();
54  assertEquals(0.1, t.minTimestamp);
55  assertEquals(5.1, t.maxTimestamp);
56}
57
58function testModelBounds_EmptyModel() {
59  var m = new TimelineModel();
60  m.updateBounds();
61  assertEquals(undefined, m.minTimestamp);
62  assertEquals(undefined, m.maxTimestamp);
63}
64
65function testModelBounds_OneEmptyThread() {
66  var m = new TimelineModel();
67  var t = m.getOrCreateProcess(1).getOrCreateThread(1);
68  m.updateBounds();
69  assertEquals(undefined, m.minTimestamp);
70  assertEquals(undefined, m.maxTimestamp);
71}
72
73function testModelBounds_OneThread() {
74  var m = new TimelineModel();
75  var t = m.getOrCreateProcess(1).getOrCreateThread(1);
76  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
77  m.updateBounds();
78  assertEquals(1, m.minTimestamp);
79  assertEquals(4, m.maxTimestamp);
80}
81
82function testModelBounds_OneThreadAndOneEmptyThread() {
83  var m = new TimelineModel();
84  var t1 = m.getOrCreateProcess(1).getOrCreateThread(1);
85  t1.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 3));
86  var t2 = m.getOrCreateProcess(1).getOrCreateThread(1);
87  m.updateBounds();
88  assertEquals(1, m.minTimestamp);
89  assertEquals(4, m.maxTimestamp);
90}
91
92function testCpuBounds_Empty() {
93  var cpu = new TimelineCpu(undefined, 1);
94  cpu.updateBounds();
95  assertEquals(undefined, cpu.minTimestamp);
96  assertEquals(undefined, cpu.maxTimestamp);
97}
98
99function testCpuBounds_OneSlice() {
100  var cpu = new TimelineCpu(undefined, 1);
101  cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
102  cpu.updateBounds();
103  assertEquals(1, cpu.minTimestamp);
104  assertEquals(4, cpu.maxTimestamp);
105}
106
107function testModelBounds_OneCpu() {
108  var m = new TimelineModel();
109  var cpu = m.getOrCreateCpu(1);
110  cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
111  m.updateBounds();
112  assertEquals(1, m.minTimestamp);
113  assertEquals(4, m.maxTimestamp);
114}
115
116
117function testModelBounds_OneCpuOneThread() {
118  var m = new TimelineModel();
119  var cpu = m.getOrCreateCpu(1);
120  cpu.slices.push(new TimelineSlice('a', 0, 1, {}, 3));
121
122  var t = m.getOrCreateProcess(1).getOrCreateThread(1);
123  t.subRows[0].push(new TimelineThreadSlice('a', 0, 1, {}, 4));
124
125  m.updateBounds();
126  assertEquals(1, m.minTimestamp);
127  assertEquals(5, m.maxTimestamp);
128}
129
130function testPTIDFromPidAndTid() {
131  assertEquals('1:2', TimelineThread.getPTIDFromPidAndTid(1, 2));
132}
133
134function testAsyncSliceGroupBounds_Empty() {
135  var g = new TimelineAsyncSliceGroup(name);
136  g.updateBounds();
137  assertEquals(undefined, g.minTimestamp);
138  assertEquals(undefined, g.maxTimestamp);
139}
140
141function testAsyncSliceGroupBounds_Basic() {
142  var p1 = new TimelineProcess(1);
143  var t1 = new TimelineThread(p1, 1);
144  var g = new TimelineAsyncSliceGroup('a');
145  g.push(newAsyncSlice(0, 1, t1, t1));
146  g.push(newAsyncSlice(1, 1.5, t1, t1));
147  assertEquals(2, g.length);
148  g.updateBounds();
149  assertEquals(0, g.minTimestamp);
150  assertEquals(2.5, g.maxTimestamp);
151}
152
153function testAsyncSliceGroup_rebuildSubRows_twoNonOverlappingSlices() {
154  var p1 = new TimelineProcess(1);
155  var t1 = new TimelineThread(p1, 1);
156  var g = new TimelineAsyncSliceGroup('a');
157  g.slices.push(newAsyncSlice(0, 1, t1, t1));
158  g.slices.push(newAsyncSlice(1, 1, t1, t1));
159
160  assertEquals(1, g.subRows.length);
161  assertEquals(2, g.subRows[0].length);
162  assertEquals(g.slices[0].subSlices[0], g.subRows[0][0]);
163  assertEquals(g.slices[1].subSlices[0], g.subRows[0][1]);
164}
165
166function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
167  var p1 = new TimelineProcess(1);
168  var t1 = new TimelineThread(p1, 1);
169  var g = new TimelineAsyncSliceGroup('a');
170  g.slices.push(newAsyncSlice(0, 1, t1, t1));
171  g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
172  g.updateBounds();
173
174  assertEquals(2, g.subRows.length);
175  assertEquals(1, g.subRows[0].length);
176  assertEquals(g.slices[0], g.subRows[0][0]);
177  assertEquals(1, g.subRows[1].length);
178  assertEquals(g.slices[1], g.subRows[1][0]);
179}
180
181function testAsyncSliceGroup_rebuildSubRows_threePartlyOverlappingSlices() {
182  var p1 = new TimelineProcess(1);
183  var t1 = new TimelineThread(p1, 1);
184  var g = new TimelineAsyncSliceGroup('a');
185  g.slices.push(newAsyncSlice(0, 1, t1, t1));
186  g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
187  g.slices.push(newAsyncSlice(1, 1.5, t1, t1));
188  g.updateBounds();
189
190  assertEquals(2, g.subRows.length);
191  assertEquals(2, g.subRows[0].length);
192  assertEquals(g.slices[0].subSlices[0], g.subRows[0][0]);
193  assertEquals(g.slices[2].subSlices[0], g.subRows[0][1]);
194  assertEquals(1, g.subRows[1].length);
195  assertEquals(g.slices[1].subSlices[0], g.subRows[1][0]);
196}
197
198function testAsyncSliceGroup_rebuildSubRows_twoOverlappingSlices() {
199  var p1 = new TimelineProcess(1);
200  var t1 = new TimelineThread(p1, 1);
201  var g = new TimelineAsyncSliceGroup('a');
202  g.slices.push(newAsyncSlice(0, 1, t1, t1));
203  g.slices.push(newAsyncSlice(0, 1.5, t1, t1));
204  g.slices.push(newAsyncSlice(2, 1, t1, t1));
205  g.updateBounds();
206
207  assertEquals(2, g.subRows.length);
208  assertEquals(2, g.subRows[0].length);
209  assertEquals(g.slices[0].subSlices[0], g.subRows[0][0]);
210  assertEquals(g.slices[2].subSlices[0], g.subRows[0][1]);
211  assertEquals(1, g.subRows[1].length);
212  assertEquals(g.slices[1].subSlices[0], g.subRows[1][0]);
213}
214
215function testAsyncSliceGroup_computeSubGroups_twoThreadSpecificSlices() {
216  var p1 = new TimelineProcess(1);
217  var t1 = new TimelineThread(p1, 1);
218  var t2 = new TimelineThread(p1, 2);
219  var g = new TimelineAsyncSliceGroup('a');
220  g.slices.push(newAsyncSlice(0, 1, t1, t1));
221  g.slices.push(newAsyncSlice(0, 1, t2, t2));
222
223  var subGroups = g.computeSubGroups();
224  assertEquals(2, subGroups.length);
225
226  assertEquals(g.name, subGroups[0].name);
227  assertEquals(1, subGroups[0].slices.length);
228  assertEquals(g.slices[0], subGroups[0].slices[0]);
229
230  assertEquals(g.name, subGroups[1].name);
231  assertEquals(1, subGroups[1].slices.length);
232  assertEquals(g.slices[1], subGroups[1].slices[0]);
233}
234
235function testModelCanImportEmpty() {
236  var m;
237  m = new TimelineModel([]);
238  m = new TimelineModel('');
239}
240
241function testTimelineFilter() {
242  var s0 = new TimelineSlice('a', 0, 1, {}, 3);
243  assertFalse(new TimelineFilter('').matchSlice(s0));
244
245  assertTrue(new TimelineFilter('a').matchSlice(s0));
246  assertFalse(new TimelineFilter('x').matchSlice(s0));
247
248  var s1 = new TimelineSlice('ba', 0, 1, {}, 3);
249  assertTrue(new TimelineFilter('a').matchSlice(s1));
250  assertTrue(new TimelineFilter('ba').matchSlice(s1));
251  assertFalse(new TimelineFilter('x').matchSlice(s1));
252}
253
254</script>
255</body>
256</html>
257