blob: cb1f2238e178be1b3afc3e682fbba1d98b8e63c6 [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(`Tests the Timeline API instrumentation of a paint event\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.showPanel('timeline');
await TestRunner.loadHTML(`
<iframe src="../resources/timeline-iframe-paint.html" style="position: absolute; left: 40px; top: 40px; width: 100px; height: 100px; border: none"></iframe>
`);
await TestRunner.evaluateInPagePromise(`
function display()
{
document.body.style.backgroundColor = "blue";
return waitForFrame();
}
function updateSubframeAndDisplay()
{
frames[0].document.body.children[0].style.backgroundColor = "green";
return waitForFrame();
}
`);
await PerformanceTestRunner.invokeAsyncWithTimeline('display');
var event = PerformanceTestRunner.findTimelineEvent(TimelineModel.TimelineModel.RecordType.Paint);
if (event)
PerformanceTestRunner.printTraceEventProperties(event);
else
TestRunner.addResult('FAIL: no paint record found');
await PerformanceTestRunner.invokeAsyncWithTimeline('updateSubframeAndDisplay');
var events = PerformanceTestRunner.mainTrackEvents().filter(
e => e.name === TimelineModel.TimelineModel.RecordType.Paint);
TestRunner.assertGreaterOrEqual(events.length, 2, 'Paint record with subframe paint not found');
var topQuad = events[0].args['data'].clip;
var subframePaint = events[1];
TestRunner.assertGreaterOrEqual(
events[0].endTime, subframePaint.endTime, 'Subframe paint is not a child of frame paint');
var subframeQuad = subframePaint.args['data'].clip;
TestRunner.assertEquals(8, topQuad.length);
TestRunner.assertEquals(8, subframeQuad.length);
TestRunner.assertGreaterOrEqual(subframeQuad[0], topQuad[0]);
TestRunner.assertGreaterOrEqual(subframeQuad[1], topQuad[1]);
TestRunner.assertGreaterOrEqual(topQuad[2], subframeQuad[2]);
TestRunner.assertGreaterOrEqual(subframeQuad[3], topQuad[3]);
TestRunner.assertGreaterOrEqual(topQuad[4], subframeQuad[4]);
TestRunner.assertGreaterOrEqual(topQuad[5], subframeQuad[5]);
TestRunner.assertGreaterOrEqual(subframeQuad[6], topQuad[6]);
TestRunner.assertGreaterOrEqual(topQuad[7], subframeQuad[7]);
TestRunner.completeTest();
})();