Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / trace_model / cpu_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/test_utils.html">
9 <link rel="import" href="/tracing/trace_model.html">
10
11 <script>
12 'use strict';
13
14 tvcm.unittest.testSuite(function() {
15   var Cpu = tracing.trace_model.Cpu;
16
17   test('cpuBounds_Empty', function() {
18     var cpu = new Cpu({}, 1);
19     cpu.updateBounds();
20     assertEquals(undefined, cpu.bounds.min);
21     assertEquals(undefined, cpu.bounds.max);
22   });
23
24   test('cpuBounds_OneSlice', function() {
25     var cpu = new Cpu({}, 1);
26     cpu.slices.push(tracing.test_utils.newSlice(1, 3));
27     cpu.updateBounds();
28     assertEquals(1, cpu.bounds.min);
29     assertEquals(4, cpu.bounds.max);
30   });
31
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);
37   });
38
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));
43     var shiftCount = 0;
44     ctr.shiftTimestampsForward = function(ts) {
45       if (ts == 0.32)
46         shiftCount++;
47     };
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);
52   });
53
54
55   function newCpuSliceNamed(cpu, name, start, duration, opt_thread) {
56     var s = new tracing.trace_model.CpuSlice(
57         'cat', name, 0, start, {}, duration);
58     s.cpu = cpu;
59     if (opt_thread)
60       s.threadThatWasRunning = opt_thread;
61     return s;
62   }
63
64   function newTimeSliceNamed(thread, name, start, duration, opt_cpu) {
65     var s = new tracing.trace_model.ThreadTimeSlice(
66         thread, 'cat', name, 0, start, {}, duration);
67     if (opt_cpu)
68       s.cpuOnWhichThreadWasRunning = opt_cpu;
69     return s;
70   }
71
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());
83
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());
87
88     assertEquals(0, cpu.indexOf(cpu.slices[0]));
89     assertEquals(1, cpu.indexOf(cpu.slices[1]));
90
91     assertEquals(0, t2.indexOfTimeSlice(t2.timeSlices[0]));
92     assertEquals(1, t2.indexOfTimeSlice(t2.timeSlices[1]));
93     assertEquals(2, t2.indexOfTimeSlice(t2.timeSlices[2]));
94   });
95
96   test('putToSleepFor', function() {
97     var m = new tracing.TraceModel();
98     var cpu = m.kernel.getOrCreateCpu(1);
99
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)];
109
110     // At timeslice 0, the thread is running.
111     assertEquals(
112         undefined, t2.timeSlices[0].getCpuSliceThatTookCpu());
113
114     // t2 lost the cpu to t3 at t=10
115     assertEquals(
116         cpu.slices[1],
117         t2.timeSlices[1].getCpuSliceThatTookCpu());
118   });
119
120   test('putToSleepForNothing', function() {
121     var m = new tracing.TraceModel();
122     var cpu = m.kernel.getOrCreateCpu(1);
123
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)];
133     assertEquals(
134         undefined,
135         t2.timeSlices[1].getCpuSliceThatTookCpu());
136   });
137
138   test('switchActiveThread', function() {
139     var m = new tracing.TraceModel();
140     var cpu = m.kernel.getOrCreateCpu(1);
141
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, {});
150
151     self.assertEquals(5, cpu.slices.length);
152
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);
159
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);
166
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);
173
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);
179
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);
184   });
185 });
186 </script>
187