blob: af41d9a789186417a045e037774101f3dc4dd8e7 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2017 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/core/test_utils.html">
<link rel="import" href="/tracing/extras/chrome/chrome_test_utils.html">
<link rel="import"
href="/tracing/extras/chrome/chrome_user_friendly_category_driver.html">
<link rel="import" href="/tracing/metrics/system_health/expected_queueing_time_metric.html">
<link rel="import" href="/tracing/value/histogram_set.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
test('expectedQueueingTime', function() {
const model = tr.e.chrome.ChromeTestUtils.newChromeModel(function(model) {
const rendererProcess = model.rendererProcess;
const mainThread = model.rendererMain;
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 0,
duration: 100,
cpuStart: 0,
cpuDuration: 50,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 3000,
duration: 10,
cpuStart: 3000,
cpuDuration: 5,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 9000,
duration: 10,
cpuStart: 9000,
cpuDuration: 5,
}));
});
const histograms = new tr.v.HistogramSet();
tr.metrics.sh.expectedQueueingTimeMetric(histograms, model);
const totalEqt = histograms.getHistogramNamed(
'total:500ms_window:renderer_eqt');
assert.strictEqual(10, totalEqt.average);
});
test('expectedQueueingTime_multipleRenderersAggregates', function() {
const model = tr.e.chrome.ChromeTestUtils.newChromeModel(function(model) {
const rendererProcess = model.rendererProcess;
const mainThread = model.rendererMain;
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 3000,
duration: 10,
cpuStart: 3000,
cpuDuration: 10,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 9000,
duration: 10,
cpuStart: 9000,
cpuDuration: 10,
}));
const rendererProcess2 = model.getOrCreateProcess(1985);
const mainThread2 = rendererProcess2.getOrCreateThread(2);
mainThread2.name = 'CrRendererMain';
mainThread2.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 3000,
duration: 0,
cpuStart: 3000,
cpuDuration: 0,
}));
mainThread2.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 9000,
duration: 0,
cpuStart: 9000,
cpuDuration: 0,
}));
});
const histograms = new tr.v.HistogramSet();
tr.metrics.sh.expectedQueueingTimeMetric(histograms, model);
const eqt = histograms.getHistogramNamed(
'total:500ms_window:renderer_eqt');
assert.strictEqual(0.05, eqt.average);
});
test('expectedQueueingTime_relatedV8Histograms', function() {
const model = tr.e.chrome.ChromeTestUtils.newChromeModel(function(model) {
const rendererProcess = model.rendererProcess;
const mainThread = model.rendererMain;
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 3000,
duration: 10,
cpuStart: 3000,
cpuDuration: 10,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'disabled-by-default-v8.compile',
title: 'V8.RecompileSynchronous',
start: 3000,
duration: 5,
cpuStart: 3000,
cpuDuration: 5,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 9000,
duration: 10,
cpuStart: 9000,
cpuDuration: 10,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'v8',
title: 'V8.GCFinalizeMC',
start: 9000,
duration: 5,
cpuStart: 9000,
cpuDuration: 5,
}));
mainThread.sliceGroup.createSubSlices();
});
const histograms = new tr.v.HistogramSet();
tr.metrics.sh.expectedQueueingTimeMetric(histograms, model);
const eqt = histograms.getHistogramNamed(
'total:500ms_window:renderer_eqt');
assert.strictEqual('total:500ms_window:renderer_eqt:v8',
eqt.diagnostics.get('v8').get('v8'));
assert.strictEqual(0.025,
eqt.getBinForValue(0.1).diagnosticMaps[0].get('v8').get('v8'));
});
test('expectedQueueingTimeRCS', function() {
const model = tr.e.chrome.ChromeTestUtils.newChromeModel(function(model) {
const rendererProcess = model.rendererProcess;
const mainThread = model.rendererMain;
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'v8',
title: 'V8.newInstance',
type: tr.e.v8.V8ThreadSlice,
start: 12555,
duration: 990,
args: {
'runtime-call-stats': {
JS_Execution: [1, 11],
ParseLazy: [5, 3],
}
}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 3000,
duration: 100,
cpuStart: 3000,
cpuDuration: 100,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'v8',
title: 'V8.Execute',
type: tr.e.v8.V8ThreadSlice,
start: 3000,
duration: 100,
cpuStart: 3000,
cpuDuration: 100,
args: {
'runtime-call-stats': {
CompileIgnition: [3, 5000],
OptimizeCode: [6, 40000],
JS_Execution: [1, 11000],
}
}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 4000,
duration: 100,
cpuStart: 4000,
cpuDuration: 100,
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'v8',
title: 'V8.Execute',
type: tr.e.v8.V8ThreadSlice,
start: 4000,
duration: 100,
cpuStart: 4000,
cpuDuration: 100,
args: {
'runtime-call-stats': {
CompileIgnition: [20, 20000],
ParseLazy: [5, 10000],
CompileBackgroundIgnition: [3, 30000]
}
}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'toplevel',
title: tr.e.chrome.SCHEDULER_TOP_LEVEL_TASK_TITLE,
start: 9000,
duration: 10,
cpuStart: 9000,
cpuDuration: 10,
}));
mainThread.sliceGroup.createSubSlices();
});
const histograms = new tr.v.HistogramSet();
tr.metrics.sh.expectedQueueingTimeMetric(histograms, model);
const eqt = histograms.getHistogramNamed(
'total:500ms_window:renderer_eqt');
assert.strictEqual(
'total:500ms_window:renderer_eqt:v8:compile:optimize_rcs',
eqt.diagnostics.get('v8').get('v8:compile:optimize_rcs'));
assert.strictEqual(1.6, eqt.getBinForValue(10).diagnosticMaps[0].get(
'v8').get('v8:compile:optimize_rcs'));
});
});
</script>