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/base/range.html"> | 8 <link rel="import" href="/tracing/base/range.html"> |
9 <link rel="import" href="/tracing/metrics/metric_registry.html"> | 9 <link rel="import" href="/tracing/metrics/metric_registry.html"> |
10 <link rel="import" href="/tracing/value/histogram.html"> | 10 <link rel="import" href="/tracing/value/histogram.html"> |
11 <link rel="import" href="/tracing/value/unit.html"> | 11 <link rel="import" href="/tracing/value/unit.html"> |
12 <link rel="import" href="/tracing/value/value.html"> | 12 <link rel="import" href="/tracing/value/value.html"> |
13 | 13 |
14 <script> | 14 <script> |
15 'use strict'; | 15 'use strict'; |
16 | 16 |
17 tr.exportTo('tr.metrics.v8', function() { | 17 tr.exportTo('tr.metrics.v8', function() { |
18 var DURATION_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear( | 18 var CUSTOM_BOUNDARIES = tr.v.HistogramBinBoundaries.createLinear(4, 200, 100); |
19 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, | |
20 tr.b.Range.fromExplicitRange(4, 200), 100); | |
21 | 19 |
22 function computeExecuteMetrics(values, model) { | 20 function computeExecuteMetrics(values, model) { |
23 var cpuTotalExecution = DURATION_NUMERIC_BUILDER.build(); | 21 var cpuTotalExecution = new tr.v.Histogram( |
24 var wallTotalExecution = DURATION_NUMERIC_BUILDER.build(); | 22 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
25 var cpuSelfExecution = DURATION_NUMERIC_BUILDER.build(); | 23 var wallTotalExecution = new tr.v.Histogram( |
26 var wallSelfExecution = DURATION_NUMERIC_BUILDER.build(); | 24 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 25 var cpuSelfExecution = new tr.v.Histogram( |
| 26 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 27 var wallSelfExecution = new tr.v.Histogram( |
| 28 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
27 | 29 |
28 for (var e of model.findTopmostSlicesNamed('V8.Execute')) { | 30 for (var e of model.findTopmostSlicesNamed('V8.Execute')) { |
29 cpuTotalExecution.add(e.cpuDuration); | 31 cpuTotalExecution.add(e.cpuDuration); |
30 wallTotalExecution.add(e.duration); | 32 wallTotalExecution.add(e.duration); |
31 cpuSelfExecution.add(e.cpuSelfTime); | 33 cpuSelfExecution.add(e.cpuSelfTime); |
32 wallSelfExecution.add(e.selfTime); | 34 wallSelfExecution.add(e.selfTime); |
33 } | 35 } |
34 | 36 |
35 values.addValue(new tr.v.NumericValue( | 37 values.addValue(new tr.v.NumericValue( |
36 'v8_execution_cpu_total', cpuTotalExecution, | 38 'v8_execution_cpu_total', cpuTotalExecution, |
37 { description: 'cpu total time spent in script execution' })); | 39 { description: 'cpu total time spent in script execution' })); |
38 values.addValue(new tr.v.NumericValue( | 40 values.addValue(new tr.v.NumericValue( |
39 'v8_execution_wall_total', wallTotalExecution, | 41 'v8_execution_wall_total', wallTotalExecution, |
40 { description: 'wall total time spent in script execution' })); | 42 { description: 'wall total time spent in script execution' })); |
41 values.addValue(new tr.v.NumericValue( | 43 values.addValue(new tr.v.NumericValue( |
42 'v8_execution_cpu_self', cpuSelfExecution, | 44 'v8_execution_cpu_self', cpuSelfExecution, |
43 { description: 'cpu self time spent in script execution' })); | 45 { description: 'cpu self time spent in script execution' })); |
44 values.addValue(new tr.v.NumericValue( | 46 values.addValue(new tr.v.NumericValue( |
45 'v8_execution_wall_self', wallSelfExecution, | 47 'v8_execution_wall_self', wallSelfExecution, |
46 { description: 'wall self time spent in script execution' })); | 48 { description: 'wall self time spent in script execution' })); |
47 } | 49 } |
48 | 50 |
49 function computeParseLazyMetrics(values, model) { | 51 function computeParseLazyMetrics(values, model) { |
50 var cpuSelfParseLazy = DURATION_NUMERIC_BUILDER.build(); | 52 var cpuSelfParseLazy = new tr.v.Histogram( |
51 var wallSelfParseLazy = DURATION_NUMERIC_BUILDER.build(); | 53 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 54 var wallSelfParseLazy = new tr.v.Histogram( |
| 55 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
52 | 56 |
53 for (var e of model.findTopmostSlicesNamed('V8.ParseLazyMicroSeconds')) { | 57 for (var e of model.findTopmostSlicesNamed('V8.ParseLazyMicroSeconds')) { |
54 cpuSelfParseLazy.add(e.cpuSelfTime); | 58 cpuSelfParseLazy.add(e.cpuSelfTime); |
55 wallSelfParseLazy.add(e.selfTime); | 59 wallSelfParseLazy.add(e.selfTime); |
56 } | 60 } |
57 for (var e of model.findTopmostSlicesNamed('V8.ParseLazy')) { | 61 for (var e of model.findTopmostSlicesNamed('V8.ParseLazy')) { |
58 cpuSelfParseLazy.add(e.cpuSelfTime); | 62 cpuSelfParseLazy.add(e.cpuSelfTime); |
59 wallSelfParseLazy.add(e.selfTime); | 63 wallSelfParseLazy.add(e.selfTime); |
60 } | 64 } |
61 | 65 |
62 values.addValue(new tr.v.NumericValue( | 66 values.addValue(new tr.v.NumericValue( |
63 'v8_parse_lazy_cpu_self', cpuSelfParseLazy, | 67 'v8_parse_lazy_cpu_self', cpuSelfParseLazy, |
64 { description: 'cpu self time spent performing lazy parsing' })); | 68 { description: 'cpu self time spent performing lazy parsing' })); |
65 values.addValue(new tr.v.NumericValue( | 69 values.addValue(new tr.v.NumericValue( |
66 'v8_parse_lazy_wall_self', wallSelfParseLazy, | 70 'v8_parse_lazy_wall_self', wallSelfParseLazy, |
67 { description: 'wall self time spent performing lazy parsing' })); | 71 { description: 'wall self time spent performing lazy parsing' })); |
68 } | 72 } |
69 | 73 |
70 function computeCompileFullCodeMetrics(values, model) { | 74 function computeCompileFullCodeMetrics(values, model) { |
71 var cpuSelfCompileFullCode = DURATION_NUMERIC_BUILDER.build(); | 75 var cpuSelfCompileFullCode = new tr.v.Histogram( |
72 var wallSelfCompileFullCode = DURATION_NUMERIC_BUILDER.build(); | 76 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 77 var wallSelfCompileFullCode = new tr.v.Histogram( |
| 78 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
73 | 79 |
74 for (var e of model.findTopmostSlicesNamed('V8.CompileFullCode')) { | 80 for (var e of model.findTopmostSlicesNamed('V8.CompileFullCode')) { |
75 cpuSelfCompileFullCode.add(e.cpuSelfTime); | 81 cpuSelfCompileFullCode.add(e.cpuSelfTime); |
76 wallSelfCompileFullCode.add(e.selfTime); | 82 wallSelfCompileFullCode.add(e.selfTime); |
77 } | 83 } |
78 | 84 |
79 values.addValue(new tr.v.NumericValue( | 85 values.addValue(new tr.v.NumericValue( |
80 'v8_compile_full_code_cpu_self', | 86 'v8_compile_full_code_cpu_self', |
81 cpuSelfCompileFullCode, | 87 cpuSelfCompileFullCode, |
82 { description: 'cpu self time spent performing compiling full code' })); | 88 { description: 'cpu self time spent performing compiling full code' })); |
83 values.addValue(new tr.v.NumericValue( | 89 values.addValue(new tr.v.NumericValue( |
84 'v8_compile_full_code_wall_self', | 90 'v8_compile_full_code_wall_self', |
85 wallSelfCompileFullCode, { | 91 wallSelfCompileFullCode, { |
86 description: 'wall self time spent performing compiling full code' | 92 description: 'wall self time spent performing compiling full code' |
87 })); | 93 })); |
88 } | 94 } |
89 | 95 |
90 function computeCompileIgnitionMetrics(values, model) { | 96 function computeCompileIgnitionMetrics(values, model) { |
91 var cpuSelfCompileIgnition = DURATION_NUMERIC_BUILDER.build(); | 97 var cpuSelfCompileIgnition = new tr.v.Histogram( |
92 var wallSelfCompileIgnition = DURATION_NUMERIC_BUILDER.build(); | 98 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 99 var wallSelfCompileIgnition = new tr.v.Histogram( |
| 100 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
93 | 101 |
94 for (var e of model.findTopmostSlicesNamed('V8.CompileIgnition')) { | 102 for (var e of model.findTopmostSlicesNamed('V8.CompileIgnition')) { |
95 cpuSelfCompileIgnition.add(e.cpuSelfTime); | 103 cpuSelfCompileIgnition.add(e.cpuSelfTime); |
96 wallSelfCompileIgnition.add(e.selfTime); | 104 wallSelfCompileIgnition.add(e.selfTime); |
97 } | 105 } |
98 | 106 |
99 values.addValue(new tr.v.NumericValue( | 107 values.addValue(new tr.v.NumericValue( |
100 'v8_compile_ignition_cpu_self', | 108 'v8_compile_ignition_cpu_self', |
101 cpuSelfCompileIgnition, | 109 cpuSelfCompileIgnition, |
102 { description: 'cpu self time spent in compile ignition' })); | 110 { description: 'cpu self time spent in compile ignition' })); |
103 values.addValue(new tr.v.NumericValue( | 111 values.addValue(new tr.v.NumericValue( |
104 'v8_compile_ignition_wall_self', | 112 'v8_compile_ignition_wall_self', |
105 wallSelfCompileIgnition, { | 113 wallSelfCompileIgnition, { |
106 description: 'wall self time spent in compile ignition' | 114 description: 'wall self time spent in compile ignition' |
107 })); | 115 })); |
108 } | 116 } |
109 | 117 |
110 function computeRecompileMetrics(values, model) { | 118 function computeRecompileMetrics(values, model) { |
111 var cpuTotalRecompileSynchronous = DURATION_NUMERIC_BUILDER.build(); | 119 var cpuTotalRecompileSynchronous = new tr.v.Histogram( |
112 var wallTotalRecompileSynchronous = DURATION_NUMERIC_BUILDER.build(); | 120 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
113 var cpuTotalRecompileConcurrent = DURATION_NUMERIC_BUILDER.build(); | 121 var wallTotalRecompileSynchronous = new tr.v.Histogram( |
114 var wallTotalRecompileConcurrent = DURATION_NUMERIC_BUILDER.build(); | 122 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 123 var cpuTotalRecompileConcurrent = new tr.v.Histogram( |
| 124 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 125 var wallTotalRecompileConcurrent = new tr.v.Histogram( |
| 126 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
115 // TODO(eakuefner): Stop computing overall values once dash v2 is ready. | 127 // TODO(eakuefner): Stop computing overall values once dash v2 is ready. |
116 // https://github.com/catapult-project/catapult/issues/2180 | 128 // https://github.com/catapult-project/catapult/issues/2180 |
117 var cpuTotalRecompileOverall = DURATION_NUMERIC_BUILDER.build(); | 129 var cpuTotalRecompileOverall = new tr.v.Histogram( |
118 var wallTotalRecompileOverall = DURATION_NUMERIC_BUILDER.build(); | 130 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 131 var wallTotalRecompileOverall = new tr.v.Histogram( |
| 132 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
119 | 133 |
120 for (var e of model.findTopmostSlicesNamed('V8.RecompileSynchronous')) { | 134 for (var e of model.findTopmostSlicesNamed('V8.RecompileSynchronous')) { |
121 cpuTotalRecompileSynchronous.add(e.cpuDuration); | 135 cpuTotalRecompileSynchronous.add(e.cpuDuration); |
122 wallTotalRecompileSynchronous.add(e.duration); | 136 wallTotalRecompileSynchronous.add(e.duration); |
123 cpuTotalRecompileOverall.add(e.cpuDuration); | 137 cpuTotalRecompileOverall.add(e.cpuDuration); |
124 wallTotalRecompileOverall.add(e.duration); | 138 wallTotalRecompileOverall.add(e.duration); |
125 } | 139 } |
126 | 140 |
127 values.addValue(new tr.v.NumericValue( | 141 values.addValue(new tr.v.NumericValue( |
128 'v8_recompile_synchronous_cpu_total', | 142 'v8_recompile_synchronous_cpu_total', |
(...skipping 28 matching lines...) Expand all Loading... |
157 })); | 171 })); |
158 values.addValue(new tr.v.NumericValue( | 172 values.addValue(new tr.v.NumericValue( |
159 'v8_recompile_overall_wall_total', | 173 'v8_recompile_overall_wall_total', |
160 wallTotalRecompileOverall, { | 174 wallTotalRecompileOverall, { |
161 description: | 175 description: |
162 'wall total time spent in synchronous or concurrent recompilation' | 176 'wall total time spent in synchronous or concurrent recompilation' |
163 })); | 177 })); |
164 } | 178 } |
165 | 179 |
166 function computeOptimizeCodeMetrics(values, model) { | 180 function computeOptimizeCodeMetrics(values, model) { |
167 var cpuTotalOptimizeCode = DURATION_NUMERIC_BUILDER.build(); | 181 var cpuTotalOptimizeCode = new tr.v.Histogram( |
168 var wallTotalOptimizeCode = DURATION_NUMERIC_BUILDER.build(); | 182 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 183 var wallTotalOptimizeCode = new tr.v.Histogram( |
| 184 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
169 | 185 |
170 for (var e of model.findTopmostSlicesNamed('V8.OptimizeCode')) { | 186 for (var e of model.findTopmostSlicesNamed('V8.OptimizeCode')) { |
171 cpuTotalOptimizeCode.add(e.cpuDuration); | 187 cpuTotalOptimizeCode.add(e.cpuDuration); |
172 wallTotalOptimizeCode.add(e.duration); | 188 wallTotalOptimizeCode.add(e.duration); |
173 } | 189 } |
174 | 190 |
175 values.addValue(new tr.v.NumericValue( | 191 values.addValue(new tr.v.NumericValue( |
176 'v8_optimize_code_cpu_total', | 192 'v8_optimize_code_cpu_total', |
177 cpuTotalOptimizeCode, | 193 cpuTotalOptimizeCode, |
178 { description: 'cpu total time spent in code optimization' })); | 194 { description: 'cpu total time spent in code optimization' })); |
179 values.addValue(new tr.v.NumericValue( | 195 values.addValue(new tr.v.NumericValue( |
180 'v8_optimize_code_wall_total', | 196 'v8_optimize_code_wall_total', |
181 wallTotalOptimizeCode, | 197 wallTotalOptimizeCode, |
182 { description: 'wall total time spent in code optimization' })); | 198 { description: 'wall total time spent in code optimization' })); |
183 } | 199 } |
184 | 200 |
185 function computeDeoptimizeCodeMetrics(values, model) { | 201 function computeDeoptimizeCodeMetrics(values, model) { |
186 var cpuTotalDeoptimizeCode = DURATION_NUMERIC_BUILDER.build(); | 202 var cpuTotalDeoptimizeCode = new tr.v.Histogram( |
187 var wallTotalDeoptimizeCode = DURATION_NUMERIC_BUILDER.build(); | 203 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
| 204 var wallTotalDeoptimizeCode = new tr.v.Histogram( |
| 205 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES); |
188 | 206 |
189 for (var e of model.findTopmostSlicesNamed('V8.DeoptimizeCode')) { | 207 for (var e of model.findTopmostSlicesNamed('V8.DeoptimizeCode')) { |
190 cpuTotalDeoptimizeCode.add(e.cpuDuration); | 208 cpuTotalDeoptimizeCode.add(e.cpuDuration); |
191 wallTotalDeoptimizeCode.add(e.duration); | 209 wallTotalDeoptimizeCode.add(e.duration); |
192 } | 210 } |
193 | 211 |
194 values.addValue(new tr.v.NumericValue( | 212 values.addValue(new tr.v.NumericValue( |
195 'v8_deoptimize_code_cpu_total', | 213 'v8_deoptimize_code_cpu_total', |
196 cpuTotalDeoptimizeCode, | 214 cpuTotalDeoptimizeCode, |
197 { description: 'cpu total time spent in code deoptimization' })); | 215 { description: 'cpu total time spent in code deoptimization' })); |
(...skipping 13 matching lines...) Expand all Loading... |
211 computeDeoptimizeCodeMetrics(values, model); | 229 computeDeoptimizeCodeMetrics(values, model); |
212 } | 230 } |
213 | 231 |
214 tr.metrics.MetricRegistry.register(executionMetric); | 232 tr.metrics.MetricRegistry.register(executionMetric); |
215 | 233 |
216 return { | 234 return { |
217 executionMetric: executionMetric | 235 executionMetric: executionMetric |
218 }; | 236 }; |
219 }); | 237 }); |
220 </script> | 238 </script> |
OLD | NEW |