OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <!-- | 2 <!-- |
3 Copyright 2016 The Chromium Authors. All rights reserved. | 3 Copyright 2016 The Chromium Authors. All rights reserved. |
4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
5 found in the LICENSE file. | 5 found in the LICENSE file. |
6 --> | 6 --> |
7 | 7 |
8 <link rel="import" href="/tracing/core/test_utils.html"> | 8 <link rel="import" href="/tracing/core/test_utils.html"> |
9 <link rel="import" href="/tracing/extras/importer/trace_event_importer.html"> | 9 <link rel="import" href="/tracing/extras/importer/trace_event_importer.html"> |
10 <link rel="import" href="/tracing/metrics/v8/gc_metric.html"> | 10 <link rel="import" href="/tracing/metrics/blink/gc_metric.html"> |
11 <link rel="import" href="/tracing/model/slice_group.html"> | 11 <link rel="import" href="/tracing/model/slice_group.html"> |
12 <link rel="import" href="/tracing/value/value_set.html"> | 12 <link rel="import" href="/tracing/value/value_set.html"> |
13 | 13 |
14 <script> | 14 <script> |
15 'use strict'; | 15 'use strict'; |
16 | 16 |
17 tr.b.unittest.testSuite(function() { | 17 tr.b.unittest.testSuite(function() { |
18 | 18 |
19 function createModel(start, end, slices) { | 19 function createModel(start, end, slices) { |
20 var opts = { | 20 var opts = { |
21 customizeModelCallback: function(model) { | 21 customizeModelCallback: function(model) { |
22 var group = new tr.model.SliceGroup(tr.c.TestUtils.newFakeThread()); | 22 var process = model.getOrCreateProcess(1); |
23 var ue = new tr.model.um.AnimationExpectation( | 23 var thread = process.getOrCreateThread(2); |
24 model, 'test', start, end); | 24 var group = thread.sliceGroup; |
25 slices.forEach(function(slice) { | 25 slices.forEach(function(slice) { |
26 group.pushSlice(tr.c.TestUtils.newSliceEx(slice)); | 26 group.pushSlice(tr.c.TestUtils.newSliceEx(slice)); |
27 }); | 27 }); |
28 group.createSubSlices(); | 28 group.createSubSlices(); |
29 group.slices.forEach(function(slice) { | |
30 ue.associatedEvents.push(slice); | |
31 }); | |
32 model.userModel.expectations.push(ue); | |
33 } | 29 } |
34 }; | 30 }; |
35 var model = tr.c.TestUtils.newModelWithEvents([], opts); | 31 var model = tr.c.TestUtils.newModelWithEvents([], opts); |
36 return model; | 32 return model; |
37 } | 33 } |
38 | 34 |
39 function constructName(name, suffix) { | 35 function constructName(name, suffix) { |
40 return 'Animation-' + name + '_' + suffix; | 36 return name + '_' + suffix; |
41 } | 37 } |
42 | 38 |
43 function run(slices) { | 39 function run(slices) { |
44 var values = new tr.v.ValueSet(); | 40 var values = new tr.v.ValueSet(); |
45 var startTime = slices.reduce((acc, slice) => (Math.min(acc, slice.start))); | 41 var startTime = slices.reduce((acc, slice) => (Math.min(acc, slice.start))); |
46 var endTime = slices.reduce((acc, slice) => (Math.max(acc, slice.end))); | 42 var endTime = slices.reduce((acc, slice) => (Math.max(acc, slice.end))); |
47 var model = createModel(startTime - 1, endTime + 1, slices); | 43 var model = createModel(startTime - 1, endTime + 1, slices); |
48 tr.metrics.v8.gcMetric(values, model); | 44 tr.metrics.blink.blinkGcMetric(values, model); |
49 var result = {}; | 45 var result = {}; |
50 values.valueDicts.forEach(function(value) { | 46 values.valueDicts.forEach(function(value) { |
51 result[value.name] = value.numeric.value; | 47 result[value.name] = value.numeric.value; |
52 }); | 48 }); |
53 return result; | 49 return result; |
54 } | 50 } |
55 | 51 |
56 test('topEvents', function() { | 52 test('topEvents', function() { |
57 var events = { | 53 var events = { |
58 'V8.GCCompactor': 'v8-gc-full-mark-compactor', | 54 'BlinkGCMarking': 'blink-gc-marking', |
59 'V8.GCFinalizeMC': 'v8-gc-latency-mark-compactor', | 55 'ThreadState::completeSweep': 'blink-gc-complete-sweep', |
60 'V8.GCFinalizeMCReduceMemory': 'v8-gc-memory-mark-compactor', | 56 'ThreadState::performIdleLazySweep': 'blink-gc-idle-lazy-sweep' |
61 'V8.GCIncrementalMarking': 'v8-gc-incremental-step', | |
62 'V8.GCIncrementalMarkingFinalize': 'v8-gc-incremental-finalize', | |
63 'V8.GCIncrementalMarkingStart': 'v8-gc-incremental-start', | |
64 'V8.GCPhantomHandleProcessingCallback' : 'v8-gc-phantom-handle-callback', | |
65 'V8.GCScavenger': 'v8-gc-scavenger' | |
66 }; | 57 }; |
67 tr.b.iterItems(events, function(timelineName, telemetryName) { | 58 tr.b.iterItems(events, function(timelineName, telemetryName) { |
68 var slices = [ | 59 var slices = [ |
69 { | 60 { |
70 title: timelineName, args: {}, start: 100, end: 200, | 61 title: timelineName, args: {}, start: 100, end: 200, |
71 cpuStart: 100, cpuEnd: 200 | 62 cpuStart: 100, cpuEnd: 200 |
72 } | 63 } |
73 ]; | 64 ]; |
74 var actual = run(slices); | 65 var actual = run(slices); |
75 var expected = { | 66 var expected = { |
(...skipping 19 matching lines...) Expand all Loading... |
95 | 86 |
96 test('idleTimes', function() { | 87 test('idleTimes', function() { |
97 var values = new tr.v.ValueSet(); | 88 var values = new tr.v.ValueSet(); |
98 var slices = [ | 89 var slices = [ |
99 { | 90 { |
100 title: 'SingleThreadIdleTaskRunner::RunTask', | 91 title: 'SingleThreadIdleTaskRunner::RunTask', |
101 args: {'allotted_time_ms' : 100}, start: 100, end: 200, | 92 args: {'allotted_time_ms' : 100}, start: 100, end: 200, |
102 cpuStart: 100, cpuEnd: 200 | 93 cpuStart: 100, cpuEnd: 200 |
103 }, | 94 }, |
104 { | 95 { |
105 title: 'V8.GCFinalizeMC', args: {}, start: 110, end: 190, | 96 title: 'BlinkGCMarking', args: {}, start: 110, end: 190, |
106 cpuStart: 110, cpuEnd: 190 | 97 cpuStart: 110, cpuEnd: 190 |
107 } | 98 } |
108 ]; | 99 ]; |
109 var actual = run(slices); | 100 var actual = run(slices); |
110 var expected = { | 101 var expected = { |
111 sum: 80, | 102 sum: 80, |
112 count: 1, | 103 count: 1, |
113 avg: 80, | 104 avg: 80, |
114 max: 80, | 105 max: 80, |
115 idle_deadline_overrun_sum: 0, | 106 idle_deadline_overrun_sum: 0, |
116 idle_deadline_overrun_avg: 0, | 107 idle_deadline_overrun_avg: 0, |
117 idle_deadline_overrun_max: 0, | 108 idle_deadline_overrun_max: 0, |
118 outside_idle_sum: 0, | 109 outside_idle_sum: 0, |
119 outside_idle_avg: 0, | 110 outside_idle_avg: 0, |
120 outside_idle_max: 0, | 111 outside_idle_max: 0, |
121 percentage_idle: 100 | 112 percentage_idle: 100 |
122 }; | 113 }; |
123 tr.b.iterItems(expected, function(key, value) { | 114 tr.b.iterItems(expected, function(key, value) { |
124 var name = constructName('v8-gc-latency-mark-compactor', key); | 115 var name = constructName('blink-gc-marking', key); |
125 assert.equal(name + ':' + actual[name], name + ':' + value); | 116 assert.equal(name + ':' + actual[name], name + ':' + value); |
126 }); | 117 }); |
127 }); | 118 }); |
128 | 119 |
129 test('idleTimeOverrun', function() { | 120 test('idleTimeOverrun', function() { |
130 var values = new tr.v.ValueSet(); | 121 var values = new tr.v.ValueSet(); |
131 var slices = [ | 122 var slices = [ |
132 { | 123 { |
133 title: 'SingleThreadIdleTaskRunner::RunTask', | 124 title: 'SingleThreadIdleTaskRunner::RunTask', |
134 args: {'allotted_time_ms' : 10}, start: 100, end: 200, | 125 args: {'allotted_time_ms' : 10}, start: 100, end: 200, |
135 cpuStart: 100, cpuEnd: 200 | 126 cpuStart: 100, cpuEnd: 200 |
136 }, | 127 }, |
137 { | 128 { |
138 title: 'V8.GCFinalizeMC', args: {}, start: 110, end: 190, | 129 title: 'BlinkGCMarking', args: {}, start: 110, end: 190, |
139 cpuStart: 110, cpuEnd: 190 | 130 cpuStart: 110, cpuEnd: 190 |
140 } | 131 } |
141 ]; | 132 ]; |
142 var actual = run(slices); | 133 var actual = run(slices); |
143 var expected = { | 134 var expected = { |
144 sum: 80, | 135 sum: 80, |
145 count: 1, | 136 count: 1, |
146 avg: 80, | 137 avg: 80, |
147 max: 80, | 138 max: 80, |
148 idle_deadline_overrun_sum: 70, | 139 idle_deadline_overrun_sum: 70, |
149 idle_deadline_overrun_avg: 70, | 140 idle_deadline_overrun_avg: 70, |
150 idle_deadline_overrun_max: 70, | 141 idle_deadline_overrun_max: 70, |
151 outside_idle_sum: 70, | 142 outside_idle_sum: 70, |
152 outside_idle_avg: 70, | 143 outside_idle_avg: 70, |
153 outside_idle_max: 70, | 144 outside_idle_max: 70, |
154 percentage_idle: 100 / 8 | 145 percentage_idle: 100 / 8 |
155 }; | 146 }; |
156 tr.b.iterItems(expected, function(key, value) { | 147 tr.b.iterItems(expected, function(key, value) { |
157 var name = constructName('v8-gc-latency-mark-compactor', key); | 148 var name = constructName('blink-gc-marking', key); |
158 assert.equal(name + ':' + actual[name], name + ':' + value); | 149 assert.equal(name + ':' + actual[name], name + ':' + value); |
159 }); | 150 }); |
160 }); | 151 }); |
161 | 152 |
162 test('subEvents', function() { | |
163 var values = new tr.v.ValueSet(); | |
164 var slices = [ | |
165 { | |
166 title: 'V8.GCFinalizeMC', args: {}, start: 100, end: 200, | |
167 cpuStart: 100, cpuEnd: 200 | |
168 }, | |
169 { | |
170 title: 'V8.GC_MC_MARK', args: {}, start: 110, end: 190, | |
171 cpuStart: 110, cpuEnd: 190 | |
172 }, | |
173 ]; | |
174 var actual = run(slices); | |
175 var expected = { | |
176 avg: 80, | |
177 max: 80, | |
178 }; | |
179 var telemetryName = 'v8-gc-latency-mark-compactor-mark'; | |
180 tr.b.iterItems(expected, function(key, value) { | |
181 var name = constructName(telemetryName, key); | |
182 assert.equal(name + ':' + actual[name], name + ':' + value); | |
183 }); | |
184 assert.closeTo(actual[constructName(telemetryName, 'pct_090')], 80, 1); | |
185 }); | |
186 | |
187 test('total', function() { | 153 test('total', function() { |
188 var values = new tr.v.ValueSet(); | 154 var values = new tr.v.ValueSet(); |
189 var slices = [ | 155 var slices = [ |
190 { | 156 { |
191 title: 'V8.GCFinalizeMC', args: {}, start: 100, end: 200, | 157 title: 'BlinkGCMarking', args: {}, start: 100, end: 200, |
192 cpuStart: 100, cpuEnd: 200 | 158 cpuStart: 100, cpuEnd: 200 |
193 }, | 159 }, |
194 { | 160 { |
195 title: 'V8.GCIncrementalMarking', args: {}, start: 210, end: 290, | 161 title: 'ThreadState::performIdleLazySweep', args: {}, start: 210, |
196 cpuStart: 210, cpuEnd: 290 | 162 end: 290, cpuStart: 210, cpuEnd: 290 |
197 } | 163 } |
198 ]; | 164 ]; |
199 var actual = run(slices); | 165 var actual = run(slices); |
200 var expected = { | 166 var expected = { |
201 sum: 180, | 167 sum: 180, |
202 count: 2, | 168 count: 2, |
203 avg: 90, | 169 avg: 90, |
204 max: 100, | 170 max: 100, |
205 idle_deadline_overrun_sum: 0, | 171 idle_deadline_overrun_sum: 0, |
206 idle_deadline_overrun_avg: 0, | 172 idle_deadline_overrun_avg: 0, |
207 idle_deadline_overrun_max: 0, | 173 idle_deadline_overrun_max: 0, |
208 outside_idle_sum: 180, | 174 outside_idle_sum: 180, |
209 outside_idle_avg: 90, | 175 outside_idle_avg: 90, |
210 outside_idle_max: 100, | 176 outside_idle_max: 100, |
211 percentage_idle: 0 | 177 percentage_idle: 0 |
212 }; | 178 }; |
213 tr.b.iterItems(expected, function(key, value) { | 179 tr.b.iterItems(expected, function(key, value) { |
214 var name = constructName('v8-gc-total', key); | 180 var name = constructName('blink-gc-total', key); |
215 assert.equal(name + ':' + actual[name], name + ':' + value); | 181 assert.equal(name + ':' + actual[name], name + ':' + value); |
216 }); | 182 }); |
217 }); | 183 }); |
218 | 184 |
219 test('mutatorUtilization', function() { | |
220 var values = new tr.v.ValueSet(); | |
221 var slices = [ | |
222 { | |
223 title: 'V8.Execute', args: {}, start: 100, end: 200, | |
224 cpuStart: 100, cpuEnd: 200 | |
225 }, | |
226 { | |
227 title: 'V8.GCFinalizeMC', args: {}, start: 150, end: 160, | |
228 cpuStart: 150, cpuEnd: 160 | |
229 }, | |
230 { | |
231 title: 'V8.Execute', args: {}, start: 1000, end: 1200, | |
232 cpuStart: 1000, cpuEnd: 1200 | |
233 }, | |
234 { | |
235 title: 'V8.GCIncrementalMarking', args: {}, start: 1010, end: 1020, | |
236 cpuStart: 1010, cpuEnd: 1020 | |
237 } | |
238 ]; | |
239 var mutatorUtilization = tr.metrics.v8.utils.mutatorUtilization( | |
240 0, 300, tr.metrics.v8.WINDOW_SIZE_MS, | |
241 [{start: 50, end: 60}, {start: 110, end: 120}]); | |
242 var actual = run(slices); | |
243 assert.strictEqual( | |
244 actual['Animation-v8-execute-mutator-utilization_pct_095'], | |
245 mutatorUtilization.percentile(1 - 0.95) * 100); | |
246 assert.strictEqual( | |
247 actual['Animation-v8-execute-mutator-utilization_pct_099'], | |
248 mutatorUtilization.percentile(1 - 0.99) * 100); | |
249 }); | |
250 | |
251 }); | 185 }); |
252 </script> | 186 </script> |
OLD | NEW |