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/test_utils.html">
9 <link rel="import" href="/tracing/trace_model.html">
14 tvcm.unittest.testSuite(function() {
15 var Cpu = tracing.trace_model.Cpu;
17 test('cpuBounds_Empty', function() {
18 var cpu = new Cpu({}, 1);
20 assertEquals(undefined, cpu.bounds.min);
21 assertEquals(undefined, cpu.bounds.max);
24 test('cpuBounds_OneSlice', function() {
25 var cpu = new Cpu({}, 1);
26 cpu.slices.push(tracing.test_utils.newSlice(1, 3));
28 assertEquals(1, cpu.bounds.min);
29 assertEquals(4, cpu.bounds.max);
32 test('getOrCreateCounter', function() {
33 var cpu = new Cpu({}, 1);
34 var ctrBar = cpu.getOrCreateCounter('foo', 'bar');
35 var ctrBar2 = cpu.getOrCreateCounter('foo', 'bar');
36 assertEquals(ctrBar2, ctrBar);
39 test('shiftTimestampsForward', function() {
40 var cpu = new Cpu({}, 1);
41 var ctr = cpu.getOrCreateCounter('foo', 'bar');
42 cpu.slices.push(tracing.test_utils.newSlice(1, 3));
44 ctr.shiftTimestampsForward = function(ts) {
48 cpu.slices.push(tracing.test_utils.newSlice(1, 3));
49 cpu.shiftTimestampsForward(0.32);
50 assertEquals(shiftCount, 1);
51 assertEquals(1.32, cpu.slices[0].start);
55 function newCpuSliceNamed(cpu, name, start, duration, opt_thread) {
56 var s = new tracing.trace_model.CpuSlice(
57 'cat', name, 0, start, {}, duration);
60 s.threadThatWasRunning = opt_thread;
64 function newTimeSliceNamed(thread, name, start, duration, opt_cpu) {
65 var s = new tracing.trace_model.ThreadTimeSlice(
66 thread, 'cat', name, 0, start, {}, duration);
68 s.cpuOnWhichThreadWasRunning = opt_cpu;
72 test('getTimesliceForCpuSlice', function() {
73 var m = new tracing.TraceModel();
74 var cpu = m.kernel.getOrCreateCpu(1);
75 var t2 = m.getOrCreateProcess(1).getOrCreateThread(2);
76 t2.timeSlices = [newTimeSliceNamed(t2, 'Running', 0, 10, cpu),
77 newTimeSliceNamed(t2, 'Sleeping', 10, 10),
78 newTimeSliceNamed(t2, 'Running', 20, 10, cpu)];
79 cpu.slices = [newCpuSliceNamed(cpu, 'x', 0, 10, t2),
80 newCpuSliceNamed(cpu, 'x', 20, 10, t2)];
81 assertEquals(t2.timeSlices[0], cpu.slices[0].getAssociatedTimeslice());
82 assertEquals(t2.timeSlices[2], cpu.slices[1].getAssociatedTimeslice());
84 assertEquals(cpu.slices[0], t2.timeSlices[0].getAssociatedCpuSlice());
85 assertEquals(undefined, t2.timeSlices[1].getAssociatedCpuSlice());
86 assertEquals(cpu.slices[1], t2.timeSlices[2].getAssociatedCpuSlice());
88 assertEquals(0, cpu.indexOf(cpu.slices[0]));
89 assertEquals(1, cpu.indexOf(cpu.slices[1]));
91 assertEquals(0, t2.indexOfTimeSlice(t2.timeSlices[0]));
92 assertEquals(1, t2.indexOfTimeSlice(t2.timeSlices[1]));
93 assertEquals(2, t2.indexOfTimeSlice(t2.timeSlices[2]));
96 test('putToSleepFor', function() {
97 var m = new tracing.TraceModel();
98 var cpu = m.kernel.getOrCreateCpu(1);
100 var t2 = m.getOrCreateProcess(1).getOrCreateThread(2);
101 var t3 = m.getOrCreateProcess(1).getOrCreateThread(3);
102 t2.timeSlices = [newTimeSliceNamed(t2, 'Running', 0, 10, cpu),
103 newTimeSliceNamed(t2, 'Sleeping', 10, 10),
104 newTimeSliceNamed(t2, 'Running', 20, 10, cpu)];
105 t3.timeSlices = [newTimeSliceNamed(t3, 'Running', 10, 5, cpu)];
106 cpu.slices = [newCpuSliceNamed(cpu, 'x', 0, 10, t2),
107 newCpuSliceNamed(cpu, 'x', 10, 5, t3),
108 newCpuSliceNamed(cpu, 'x', 20, 10, t2)];
110 // At timeslice 0, the thread is running.
112 undefined, t2.timeSlices[0].getCpuSliceThatTookCpu());
114 // t2 lost the cpu to t3 at t=10
117 t2.timeSlices[1].getCpuSliceThatTookCpu());
120 test('putToSleepForNothing', function() {
121 var m = new tracing.TraceModel();
122 var cpu = m.kernel.getOrCreateCpu(1);
124 var t2 = m.getOrCreateProcess(1).getOrCreateThread(2);
125 var t3 = m.getOrCreateProcess(1).getOrCreateThread(3);
126 t2.timeSlices = [newTimeSliceNamed(t2, 'Running', 0, 10, cpu),
127 newTimeSliceNamed(t2, 'Sleeping', 10, 10),
128 newTimeSliceNamed(t2, 'Running', 20, 10, cpu)];
129 t3.timeSlices = [newTimeSliceNamed(t3, 'Running', 15, 5, cpu)];
130 cpu.slices = [newCpuSliceNamed(cpu, 'x', 0, 10, t2),
131 newCpuSliceNamed(cpu, 'x', 15, 5, t3),
132 newCpuSliceNamed(cpu, 'x', 20, 10, t2)];
135 t2.timeSlices[1].getCpuSliceThatTookCpu());
138 test('switchActiveThread', function() {
139 var m = new tracing.TraceModel();
140 var cpu = m.kernel.getOrCreateCpu(1);
142 cpu.switchActiveThread(5, {}, 0, 'idle thread', {});
143 cpu.switchActiveThread(10, {}, 1, 'thread one', {a: 1});
144 cpu.switchActiveThread(15, {b: 2}, 2, 'thread two', {c: 3});
145 cpu.switchActiveThread(30, {c: 4, d: 5}, 3, 'thread three', {e: 6});
146 cpu.closeActiveThread(40, {f: 7});
147 cpu.switchActiveThread(50, {}, 4, 'thread four', {g: 8});
148 cpu.switchActiveThread(60, {}, 1, 'thread one', {});
149 cpu.closeActiveThread(70, {});
151 self.assertEquals(5, cpu.slices.length);
153 self.assertEquals('thread one', cpu.slices[0].title);
154 self.assertEquals(10, cpu.slices[0].start);
155 self.assertEquals(5, cpu.slices[0].duration);
156 self.assertEquals(2, Object.keys(cpu.slices[0].args).length);
157 self.assertEquals(1, cpu.slices[0].args.a);
158 self.assertEquals(2, cpu.slices[0].args.b);
160 self.assertEquals('thread two', cpu.slices[1].title);
161 self.assertEquals(15, cpu.slices[1].start);
162 self.assertEquals(15, cpu.slices[1].duration);
163 self.assertEquals(2, Object.keys(cpu.slices[1].args).length);
164 self.assertEquals(4, cpu.slices[1].args.c);
165 self.assertEquals(5, cpu.slices[1].args.d);
167 self.assertEquals('thread three', cpu.slices[2].title);
168 self.assertEquals(30, cpu.slices[2].start);
169 self.assertEquals(10, cpu.slices[2].duration);
170 self.assertEquals(2, Object.keys(cpu.slices[2].args).length);
171 self.assertEquals(6, cpu.slices[2].args.e);
172 self.assertEquals(7, cpu.slices[2].args.f);
174 self.assertEquals('thread four', cpu.slices[3].title);
175 self.assertEquals(50, cpu.slices[3].start);
176 self.assertEquals(10, cpu.slices[3].duration);
177 self.assertEquals(1, Object.keys(cpu.slices[3].args).length);
178 self.assertEquals(8, cpu.slices[3].args.g);
180 self.assertEquals('thread one', cpu.slices[4].title);
181 self.assertEquals(60, cpu.slices[4].start);
182 self.assertEquals(10, cpu.slices[4].duration);
183 self.assertEquals(0, Object.keys(cpu.slices[4].args).length);