blob: ecfeabd2a5a6b5debd40189877d44ec93d8a163d [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/core/test_utils.html">
<link rel="import" href="/tracing/extras/chrome/chrome_user_friendly_category_driver.html">
<link rel="import" href="/tracing/metrics/system_health/long_tasks_metric.html">
<link rel="import" href="/tracing/value/histogram_set.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
test('longTasksMetric', function() {
const model = tr.c.TestUtils.newModel(function(model) {
const proc = model.getOrCreateProcess(1);
const thread = proc.getOrCreateThread(2);
thread.name = 'CrRendererMain';
const longTask = tr.c.TestUtils.newSliceEx({
title: 'foo',
start: 0,
duration: 50,
});
thread.sliceGroup.pushSlice(longTask);
thread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
title: 'UpdateLayerTree',
start: 0,
duration: 1,
cpuStart: 0,
cpuDuration: 1,
}));
thread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
title: 'minorGC',
start: 1,
duration: 1,
cpuStart: 1,
cpuDuration: 1,
}));
thread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
title: 'Decode Image',
start: 2,
duration: 1,
cpuStart: 2,
cpuDuration: 1,
}));
thread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
title: 'Layout',
start: 3,
duration: 1,
cpuStart: 3,
cpuDuration: 1,
}));
model.addUserFriendlyCategoryDriver(
tr.e.chrome.ChromeUserFriendlyCategoryDriver);
});
const histograms = new tr.v.HistogramSet();
tr.metrics.sh.longTasksMetric(histograms, model);
const longTaskHist = histograms.getHistogramNamed('longTasks');
assert.strictEqual(1, longTaskHist.numValues);
const relatedNames = longTaskHist.diagnostics.get('categories');
assert.instanceOf(relatedNames, tr.v.d.RelatedNameMap);
assert.strictEqual(relatedNames.get('layout'), 'longTasks:layout');
assert.strictEqual(relatedNames.get('gc'), 'longTasks:gc');
assert.strictEqual(relatedNames.get('composite'), 'longTasks:composite');
assert.strictEqual(relatedNames.get('imageDecode'),
'longTasks:imageDecode');
const bin = longTaskHist.getBinForValue(longTaskHist.average);
const diagnostics = tr.b.getOnlyElement(bin.diagnosticMaps);
const breakdown = diagnostics.get('categories');
assert.instanceOf(breakdown, tr.v.d.Breakdown);
assert.strictEqual(breakdown.size, 4);
const taskEventSet = diagnostics.get('events');
assert.instanceOf(taskEventSet, tr.v.d.RelatedEventSet);
assert.lengthOf(taskEventSet, 1);
const layoutHist = histograms.getHistogramNamed('longTasks:layout');
assert.strictEqual(1, layoutHist.numValues);
assert.lengthOf(tr.b.getOnlyElement(layoutHist.getBinForValue(
layoutHist.average).diagnosticMaps).get('events'), 1);
const gcHist = histograms.getHistogramNamed('longTasks:gc');
assert.strictEqual(1, gcHist.numValues);
assert.lengthOf(tr.b.getOnlyElement(gcHist.getBinForValue(
gcHist.average).diagnosticMaps).get('events'), 1);
const compositeHist = histograms.getHistogramNamed('longTasks:composite');
assert.strictEqual(1, compositeHist.numValues);
assert.lengthOf(tr.b.getOnlyElement(compositeHist.getBinForValue(
compositeHist.average).diagnosticMaps).get('events'), 1);
const imageDecodeHist = histograms.getHistogramNamed(
'longTasks:imageDecode');
assert.strictEqual(1, imageDecodeHist.numValues);
assert.lengthOf(tr.b.getOnlyElement(imageDecodeHist.getBinForValue(
imageDecodeHist.average).diagnosticMaps).get('events'), 1);
});
});
</script>