blob: cedb7ad9f0401a63418b93f21cbd4576c24c4a77 [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 tracing\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.loadHTML(`
<style>
div#test {
display: none;
background-color: blue;
width: 100px;
height: 100px;
}
</style>
<div id="test">
</div>
`);
await TestRunner.evaluateInPagePromise(`
function doWork()
{
var element = document.getElementById("test");
element.style.display = "block";
var unused = element.clientWidth;
}
`);
var TracingManagerClient = function(callback) {
this._completionCallback = callback;
this._tracingModel = new SDK.TracingModel(new Bindings.TempFileBackingStorage("tracing"));
}
TracingManagerClient.prototype = {
traceEventsCollected: function(events)
{
this._tracingModel.addEvents(events);
},
tracingComplete: function()
{
TestRunner.addResult("Tracing complete");
this._tracingModel.tracingComplete();
this._completionCallback(this._tracingModel);
},
tracingBufferUsage: function(usage) { },
eventsRetrievalProgress: function(progress) { }
};
var tracingClient = new TracingManagerClient(runEventsSanityCheck);
var tracingManager = TestRunner.tracingManager;
tracingManager.start(tracingClient, '', '').then(() => {
TestRunner.addResult('Tracing started');
TestRunner.evaluateInPage('doWork()', tracingManager.stop.bind(tracingManager));
});
function runEventsSanityCheck(tracingModel) {
var events = [];
var phaseComplete = 0;
var knownEvents = {};
var processes = 0;
var threads = 0;
tracingModel.sortedProcesses().forEach(function(process) {
processes++;
process.sortedThreads().forEach(function(thread) {
threads++;
events = events.concat(thread.events());
});
});
knownEvents['MessageLoop::PostTask'] = 0;
knownEvents['v8.callFunction'] = 0;
knownEvents['UpdateLayoutTree'] = 0;
knownEvents['LocalFrameView::layout'] = 0;
for (var i = 0; i < events.length; ++i) {
var event = events[i];
if (event.phase === SDK.TracingModel.Phase.Complete)
++phaseComplete;
if (event.name in knownEvents)
++knownEvents[event.name];
}
TestRunner.assertGreaterOrEqual(events.length, 100, 'Too few trace events recorded');
TestRunner.assertGreaterOrEqual(knownEvents['UpdateLayoutTree'], 1, 'Too few UpdateLayoutTree');
TestRunner.assertGreaterOrEqual(knownEvents['LocalFrameView::layout'], 1, 'Too few LocalFrameView::layout');
TestRunner.assertGreaterOrEqual(phaseComplete, 50, 'Too few begin events');
TestRunner.assertGreaterOrEqual(processes, 2, 'Too few processes');
TestRunner.assertGreaterOrEqual(threads, 4, 'Too few threads');
TestRunner.addResult('Event sanity test done');
TestRunner.completeTest();
}
})();