| 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 |