blob: 51034b7e9b3dab0acf9033c5e31593b2afa37623 [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/metrics/system_health/event_finder_utils.html">
<link rel="import" href="/tracing/model/helpers/chrome_model_helper.html">
<script>
'use strict';
const EventFinderUtils = tr.metrics.sh.EventFinderUtils;
tr.b.unittest.testSuite(function() {
test('getSortedMainThreadEventsByFrame', () => {
const model = tr.c.TestUtils.newModel(model => {
const rendererProcess = model.getOrCreateProcess(1);
const mainThread = rendererProcess.getOrCreateThread(2);
mainThread.name = 'CrRendererMain';
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing',
title: 'navigationStart',
start: 200,
duration: 0.0,
args: {frame: '0x0'}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing',
title: 'navigationStart',
start: 300,
duration: 0.0,
args: {frame: '0x1'}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing',
title: 'navigationStart',
start: 400,
duration: 0.0,
args: {frame: '0x0'}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'devtools.timeline',
title: 'navigationStart',
start: 500,
duration: 0.0,
args: {frame: '0x0'}
}));
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing',
title: 'firstPaint',
start: 600,
duration: 0.0,
args: {frame: '0x0'}
}));
});
const chromeHelper = model.getOrCreateHelper(
tr.model.helpers.ChromeModelHelper);
const rendererHelper = chromeHelper.rendererHelpers[1];
const frameToSlices = EventFinderUtils.getSortedMainThreadEventsByFrame(
rendererHelper, 'navigationStart', 'blink.user_timing');
assert.strictEqual(frameToSlices.size, 2);
assert.strictEqual(frameToSlices.get('0x0').length, 2);
assert.strictEqual(frameToSlices.get('0x0')[0].start, 200);
assert.strictEqual(frameToSlices.get('0x0')[1].start, 400);
assert.strictEqual(frameToSlices.get('0x1').length, 1);
assert.strictEqual(frameToSlices.get('0x1')[0].start, 300);
});
test('multipleCategoriesOnAnEvent', () => {
const model = tr.c.TestUtils.newModel(model => {
const rendererProcess = model.getOrCreateProcess(1);
const mainThread = rendererProcess.getOrCreateThread(2);
mainThread.name = 'CrRendererMain';
mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing,rail',
title: 'navigationStart',
start: 200,
duration: 0.0,
args: {frame: '0x0'}
}));
});
const chromeHelper = model.getOrCreateHelper(
tr.model.helpers.ChromeModelHelper);
const rendererHelper = chromeHelper.rendererHelpers[1];
const frameToSlices = EventFinderUtils.getSortedMainThreadEventsByFrame(
rendererHelper, 'navigationStart', 'blink.user_timing');
assert.strictEqual(frameToSlices.get('0x0')[0].start, 200);
});
test('findLastEventStartingOnOrBeforeTimestamp', () => {
const sortedEvents = [50, 100, 150, 200].map(ts =>
tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing',
title: 'navigationStart',
start: ts,
duration: 40.0}));
assert.strictEqual(
EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(
sortedEvents, 100).start,
100);
assert.strictEqual(
EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(
sortedEvents, 99).start,
50);
assert.isUndefined(
EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(
sortedEvents, 49));
});
test('findNextEventStartingOnOrAfterTimestamp', () => {
const sortedEvents = [50, 100, 150, 200].map(ts =>
tr.c.TestUtils.newSliceEx({
cat: 'blink.user_timing',
title: 'navigationStart',
start: ts,
duration: 40.0}));
assert.strictEqual(
EventFinderUtils.findNextEventStartingOnOrAfterTimestamp(
sortedEvents, 100).start,
100);
assert.strictEqual(
EventFinderUtils.findNextEventStartingOnOrAfterTimestamp(
sortedEvents, 101).start,
150);
assert.isUndefined(
EventFinderUtils.findNextEventStartingOnOrAfterTimestamp(
sortedEvents, 201));
});
});
</script>