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