blob: 82666fe9c1e3918f676c19e997ea895ff4eb4e18 [file] [log] [blame]
// 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.
(async function() {
TestRunner.addResult(`Test performance.mark/measure records on Timeline\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.showPanel('timeline');
await TestRunner.evaluateInPagePromise(`
function simplePerformanceMeasure()
{
performance.mark("a-start");
performance.mark("a-end");
performance.measure("a", "a-start", "a-end");
}
function doWork()
{
for(var i = 0; i < 10000; i++) {}
}
function nestedPerformanceMeasure()
{
performance.mark("a-start");
{
performance.mark("b-start");
doWork();
performance.mark("b-end");
{
performance.mark("c-start");
{
performance.mark("d-start");
doWork();
performance.mark("d-end");
}
performance.mark("c-end");
}
}
performance.mark("a-end");
performance.measure("a", "a-start", "a-end");
performance.measure("b", "b-start", "b-end");
performance.measure("c", "c-start", "c-end");
performance.measure("d", "d-start", "d-end");
}
function unbalancedPerformanceMeasure()
{
performance.mark("a-start");
performance.mark("b-start");
performance.mark("a-end");
performance.mark("b-end");
performance.measure("a", "a-start", "a-end");
performance.measure("b", "b-start", "b-end");
}
function unnestedPerformanceMeasure()
{
performance.mark("ab-start");
performance.mark("a-end");
doWork();
performance.mark("b-end");
performance.measure("a", "ab-start", "a-end");
performance.measure("b", "ab-start", "b-end");
}
function parentMeasureIsOnTop()
{
performance.mark("startTime1");
doWork();
performance.mark("endTime1");
performance.mark("startTime2");
doWork();
performance.mark("endTime2");
performance.measure("durationTimeTotal", "startTime1", "endTime2");
performance.measure("durationTime1", "startTime1", "endTime1");
performance.measure("durationTime2", "startTime2", "endTime2");
}
`);
TestRunner.runTestSuite([
function testSimplePerformanceMeasure(next) {
performActions('simplePerformanceMeasure()', next);
},
function testNestedPerformanceMeasure(next) {
performActions('nestedPerformanceMeasure()', next);
},
function testUnbalancedPerformanceMeasure(next) {
performActions('unbalancedPerformanceMeasure()', next);
},
function testUnnestedPerformanceMeasure(next) {
performActions('unnestedPerformanceMeasure()', next);
},
function testParentMeasureIsOnTop(next) {
performActions('parentMeasureIsOnTop()', next);
}
]);
function dumpUserTimings() {
var model = PerformanceTestRunner.timelineModel();
for (const track of model.tracks()) {
if (track.type !== TimelineModel.TimelineModel.TrackType.Timings) continue;
for (const event of track.asyncEvents) {
if (event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming))
TestRunner.addResult(event.name);
}
}
}
async function performActions(actions, next) {
await PerformanceTestRunner.evaluateWithTimeline(actions);
dumpUserTimings();
next();
}
})();