blob: 37a0f2f8f990e35ba38ed71f6e6c2080e97978da [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2016 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/tracing/base/range.html">
<link rel="import" href="/tracing/base/unit.html">
<link rel="import" href="/tracing/metrics/metric_registry.html">
<link rel="import" href="/tracing/value/histogram.html">
<script>
'use strict';
tr.exportTo('tr.metrics.v8', function() {
var CUSTOM_BOUNDARIES = tr.v.HistogramBinBoundaries.createLinear(4, 200, 100);
function computeExecuteMetrics(values, model) {
var cpuTotalExecution = new tr.v.Histogram('v8_execution_cpu_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuTotalExecution.description = 'cpu total time spent in script execution';
var wallTotalExecution = new tr.v.Histogram('v8_execution_wall_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallTotalExecution.description =
'wall total time spent in script execution';
var cpuSelfExecution = new tr.v.Histogram('v8_execution_cpu_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuSelfExecution.description = 'cpu self time spent in script execution';
var wallSelfExecution = new tr.v.Histogram('v8_execution_wall_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallSelfExecution.description = 'wall self time spent in script execution';
for (var e of model.findTopmostSlicesNamed('V8.Execute')) {
cpuTotalExecution.addSample(e.cpuDuration);
wallTotalExecution.addSample(e.duration);
cpuSelfExecution.addSample(e.cpuSelfTime);
wallSelfExecution.addSample(e.selfTime);
}
values.addHistogram(cpuTotalExecution);
values.addHistogram(wallTotalExecution);
values.addHistogram(cpuSelfExecution);
values.addHistogram(wallSelfExecution);
}
function computeParseLazyMetrics(values, model) {
var cpuSelfParseLazy = new tr.v.Histogram('v8_parse_lazy_cpu_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuSelfParseLazy.description =
'cpu self time spent performing lazy parsing';
var wallSelfParseLazy = new tr.v.Histogram('v8_parse_lazy_wall_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallSelfParseLazy.description =
'wall self time spent performing lazy parsing';
for (var e of model.findTopmostSlicesNamed('V8.ParseLazyMicroSeconds')) {
cpuSelfParseLazy.addSample(e.cpuSelfTime);
wallSelfParseLazy.addSample(e.selfTime);
}
for (var e of model.findTopmostSlicesNamed('V8.ParseLazy')) {
cpuSelfParseLazy.addSample(e.cpuSelfTime);
wallSelfParseLazy.addSample(e.selfTime);
}
values.addHistogram(cpuSelfParseLazy);
values.addHistogram(wallSelfParseLazy);
}
function computeCompileFullCodeMetrics(values, model) {
var cpuSelfCompileFullCode = new tr.v.Histogram(
'v8_compile_full_code_cpu_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuSelfCompileFullCode.description =
'cpu self time spent performing compiling full code';
var wallSelfCompileFullCode = new tr.v.Histogram(
'v8_compile_full_code_wall_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallSelfCompileFullCode.description =
'wall self time spent performing compiling full code';
for (var e of model.findTopmostSlicesNamed('V8.CompileFullCode')) {
cpuSelfCompileFullCode.addSample(e.cpuSelfTime);
wallSelfCompileFullCode.addSample(e.selfTime);
}
values.addHistogram(cpuSelfCompileFullCode);
values.addHistogram(wallSelfCompileFullCode);
}
function computeCompileIgnitionMetrics(values, model) {
var cpuSelfCompileIgnition = new tr.v.Histogram(
'v8_compile_ignition_cpu_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuSelfCompileIgnition.description =
'cpu self time spent in compile ignition';
var wallSelfCompileIgnition = new tr.v.Histogram(
'v8_compile_ignition_wall_self',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallSelfCompileIgnition.description =
'wall self time spent in compile ignition';
for (var e of model.findTopmostSlicesNamed('V8.CompileIgnition')) {
cpuSelfCompileIgnition.addSample(e.cpuSelfTime);
wallSelfCompileIgnition.addSample(e.selfTime);
}
values.addHistogram(cpuSelfCompileIgnition);
values.addHistogram(wallSelfCompileIgnition);
}
function computeRecompileMetrics(values, model) {
var cpuTotalRecompileSynchronous = new tr.v.Histogram(
'v8_recompile_synchronous_cpu_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuTotalRecompileSynchronous.description =
'cpu total time spent in synchronous recompilation';
var wallTotalRecompileSynchronous = new tr.v.Histogram(
'v8_recompile_synchronous_wall_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallTotalRecompileSynchronous.description =
'wall total time spent in synchronous recompilation';
var cpuTotalRecompileConcurrent = new tr.v.Histogram(
'v8_recompile_concurrent_cpu_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuTotalRecompileConcurrent.description =
'cpu total time spent in concurrent recompilation';
var wallTotalRecompileConcurrent = new tr.v.Histogram(
'v8_recompile_concurrent_wall_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallTotalRecompileConcurrent.description =
'wall total time spent in concurrent recompilation';
// TODO(eakuefner): Stop computing overall values once dash v2 is ready.
// https://github.com/catapult-project/catapult/issues/2180
var cpuTotalRecompileOverall = new tr.v.Histogram(
'v8_recompile_overall_cpu_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuTotalRecompileOverall.description =
'cpu total time spent in synchronous or concurrent recompilation';
var wallTotalRecompileOverall = new tr.v.Histogram(
'v8_recompile_overall_wall_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallTotalRecompileOverall.description =
'wall total time spent in synchronous or concurrent recompilation';
for (var e of model.findTopmostSlicesNamed('V8.RecompileSynchronous')) {
cpuTotalRecompileSynchronous.addSample(e.cpuDuration);
wallTotalRecompileSynchronous.addSample(e.duration);
cpuTotalRecompileOverall.addSample(e.cpuDuration);
wallTotalRecompileOverall.addSample(e.duration);
}
values.addHistogram(cpuTotalRecompileSynchronous);
values.addHistogram(wallTotalRecompileSynchronous);
for (var e of model.findTopmostSlicesNamed('V8.RecompileConcurrent')) {
cpuTotalRecompileConcurrent.addSample(e.cpuDuration);
wallTotalRecompileConcurrent.addSample(e.duration);
cpuTotalRecompileOverall.addSample(e.cpuDuration);
wallTotalRecompileOverall.addSample(e.duration);
}
values.addHistogram(cpuTotalRecompileConcurrent);
values.addHistogram(wallTotalRecompileConcurrent);
values.addHistogram(cpuTotalRecompileOverall);
values.addHistogram(wallTotalRecompileOverall);
}
function computeOptimizeCodeMetrics(values, model) {
var cpuTotalOptimizeCode = new tr.v.Histogram('v8_optimize_code_cpu_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuTotalOptimizeCode.description =
'cpu total time spent in code optimization';
var wallTotalOptimizeCode = new tr.v.Histogram(
'v8_optimize_code_wall_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallTotalOptimizeCode.description =
'wall total time spent in code optimization';
for (var e of model.findTopmostSlicesNamed('V8.OptimizeCode')) {
cpuTotalOptimizeCode.addSample(e.cpuDuration);
wallTotalOptimizeCode.addSample(e.duration);
}
values.addHistogram(cpuTotalOptimizeCode);
values.addHistogram(wallTotalOptimizeCode);
}
function computeDeoptimizeCodeMetrics(values, model) {
var cpuTotalDeoptimizeCode = new tr.v.Histogram(
'v8_deoptimize_code_cpu_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
cpuTotalDeoptimizeCode.description =
'cpu total time spent in code deoptimization';
var wallTotalDeoptimizeCode = new tr.v.Histogram(
'v8_deoptimize_code_wall_total',
tr.b.Unit.byName.timeDurationInMs_smallerIsBetter, CUSTOM_BOUNDARIES);
wallTotalDeoptimizeCode.description =
'wall total time spent in code deoptimization';
for (var e of model.findTopmostSlicesNamed('V8.DeoptimizeCode')) {
cpuTotalDeoptimizeCode.addSample(e.cpuDuration);
wallTotalDeoptimizeCode.addSample(e.duration);
}
values.addHistogram(cpuTotalDeoptimizeCode);
values.addHistogram(wallTotalDeoptimizeCode);
}
function executionMetric(values, model) {
computeExecuteMetrics(values, model);
computeParseLazyMetrics(values, model);
computeCompileIgnitionMetrics(values, model);
computeCompileFullCodeMetrics(values, model);
computeRecompileMetrics(values, model);
computeOptimizeCodeMetrics(values, model);
computeDeoptimizeCodeMetrics(values, model);
}
tr.metrics.MetricRegistry.register(executionMetric);
return {
executionMetric: executionMetric
};
});
</script>