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.
7 tvcm.require('tracing.test_utils');
8 tvcm.require('tracing.trace_model');
10 tvcm.unittest.testSuite('tracing.trace_model.cpu_test', function() {
11 var Cpu = tracing.trace_model.Cpu;
13 test('cpuBounds_Empty', function() {
14 var cpu = new Cpu({}, 1);
16 assertEquals(undefined, cpu.bounds.min);
17 assertEquals(undefined, cpu.bounds.max);
20 test('cpuBounds_OneSlice', function() {
21 var cpu = new Cpu({}, 1);
22 cpu.slices.push(tracing.test_utils.newSlice(1, 3));
24 assertEquals(1, cpu.bounds.min);
25 assertEquals(4, cpu.bounds.max);
28 test('getOrCreateCounter', function() {
29 var cpu = new Cpu({}, 1);
30 var ctrBar = cpu.getOrCreateCounter('foo', 'bar');
31 var ctrBar2 = cpu.getOrCreateCounter('foo', 'bar');
32 assertEquals(ctrBar2, ctrBar);
35 test('shiftTimestampsForward', function() {
36 var cpu = new Cpu({}, 1);
37 var ctr = cpu.getOrCreateCounter('foo', 'bar');
38 cpu.slices.push(tracing.test_utils.newSlice(1, 3));
40 ctr.shiftTimestampsForward = function(ts) {
44 cpu.slices.push(tracing.test_utils.newSlice(1, 3));
45 cpu.shiftTimestampsForward(0.32);
46 assertEquals(shiftCount, 1);
47 assertEquals(1.32, cpu.slices[0].start);
51 function newCpuSliceNamed(cpu, name, start, duration, opt_thread) {
52 var s = new tracing.trace_model.CpuSlice(
53 'cat', name, 0, start, {}, duration);
56 s.threadThatWasRunning = opt_thread;
60 function newTimeSliceNamed(thread, name, start, duration, opt_cpu) {
61 var s = new tracing.trace_model.ThreadTimeSlice(
62 thread, 'cat', name, 0, start, {}, duration);
64 s.cpuOnWhichThreadWasRunning = opt_cpu;
68 test('getTimesliceForCpuSlice', function() {
69 var m = new tracing.TraceModel();
70 var cpu = m.kernel.getOrCreateCpu(1);
71 var t2 = m.getOrCreateProcess(1).getOrCreateThread(2);
72 t2.timeSlices = [newTimeSliceNamed(t2, 'Running', 0, 10, cpu),
73 newTimeSliceNamed(t2, 'Sleeping', 10, 10),
74 newTimeSliceNamed(t2, 'Running', 20, 10, cpu)];
75 cpu.slices = [newCpuSliceNamed(cpu, 'x', 0, 10, t2),
76 newCpuSliceNamed(cpu, 'x', 20, 10, t2)];
77 assertEquals(t2.timeSlices[0], cpu.slices[0].getAssociatedTimeslice());
78 assertEquals(t2.timeSlices[2], cpu.slices[1].getAssociatedTimeslice());
80 assertEquals(cpu.slices[0], t2.timeSlices[0].getAssociatedCpuSlice());
81 assertEquals(undefined, t2.timeSlices[1].getAssociatedCpuSlice());
82 assertEquals(cpu.slices[1], t2.timeSlices[2].getAssociatedCpuSlice());
84 assertEquals(0, cpu.indexOf(cpu.slices[0]));
85 assertEquals(1, cpu.indexOf(cpu.slices[1]));
87 assertEquals(0, t2.indexOfTimeSlice(t2.timeSlices[0]));
88 assertEquals(1, t2.indexOfTimeSlice(t2.timeSlices[1]));
89 assertEquals(2, t2.indexOfTimeSlice(t2.timeSlices[2]));
92 test('putToSleepFor', function() {
93 var m = new tracing.TraceModel();
94 var cpu = m.kernel.getOrCreateCpu(1);
96 var t2 = m.getOrCreateProcess(1).getOrCreateThread(2);
97 var t3 = m.getOrCreateProcess(1).getOrCreateThread(3);
98 t2.timeSlices = [newTimeSliceNamed(t2, 'Running', 0, 10, cpu),
99 newTimeSliceNamed(t2, 'Sleeping', 10, 10),
100 newTimeSliceNamed(t2, 'Running', 20, 10, cpu)];
101 t3.timeSlices = [newTimeSliceNamed(t3, 'Running', 10, 5, cpu)];
102 cpu.slices = [newCpuSliceNamed(cpu, 'x', 0, 10, t2),
103 newCpuSliceNamed(cpu, 'x', 10, 5, t3),
104 newCpuSliceNamed(cpu, 'x', 20, 10, t2)];
106 // At timeslice 0, the thread is running.
108 undefined, t2.timeSlices[0].getCpuSliceThatTookCpu());
110 // t2 lost the cpu to t3 at t=10
113 t2.timeSlices[1].getCpuSliceThatTookCpu());
116 test('putToSleepForNothing', function() {
117 var m = new tracing.TraceModel();
118 var cpu = m.kernel.getOrCreateCpu(1);
120 var t2 = m.getOrCreateProcess(1).getOrCreateThread(2);
121 var t3 = m.getOrCreateProcess(1).getOrCreateThread(3);
122 t2.timeSlices = [newTimeSliceNamed(t2, 'Running', 0, 10, cpu),
123 newTimeSliceNamed(t2, 'Sleeping', 10, 10),
124 newTimeSliceNamed(t2, 'Running', 20, 10, cpu)];
125 t3.timeSlices = [newTimeSliceNamed(t3, 'Running', 15, 5, cpu)];
126 cpu.slices = [newCpuSliceNamed(cpu, 'x', 0, 10, t2),
127 newCpuSliceNamed(cpu, 'x', 15, 5, t3),
128 newCpuSliceNamed(cpu, 'x', 20, 10, t2)];
131 t2.timeSlices[1].getCpuSliceThatTookCpu());