Commit 5efc3d9e authored by Alexei Filippov's avatar Alexei Filippov Committed by Commit Bot

DevTools: Instrument Compile & Evaluate Module events for timeline.

BUG=721888

Change-Id: I42ac9339a8091c683c6dce60a857f71e0a9be7b8
Reviewed-on: https://chromium-review.googlesource.com/773626Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Commit-Queue: Alexei Filippov <alph@chromium.org>
Cr-Commit-Position: refs/heads/master@{#517126}
parent ab9d5f30
Tests the Timeline events for module compile & evaluate.
v8.compileModule Properties:
{
data : {
fileName : .../devtools/tracing/
}
endTime : <number>
startTime : <number>
type : "v8.compileModule"
}
Text details for v8.compileModule: (index)
v8.evaluateModule Properties:
{
data : {
}
endTime : <number>
startTime : <number>
type : "v8.evaluateModule"
}
Text details for v8.evaluateModule: null
// 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 events for module compile & evaluate.\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.showPanel('timeline');
await TestRunner.evaluateInPagePromise(`
function performActions()
{
var script = document.createElement('script');
script.type = 'module';
script.text = 'window.finishTest()';
document.body.appendChild(script);
return new Promise(resolve => window.finishTest = resolve);
}
`);
await new Promise(resolve => PerformanceTestRunner.invokeAsyncWithTimeline('performActions', resolve));
const events = new Set([TimelineModel.TimelineModel.RecordType.CompileModule, TimelineModel.TimelineModel.RecordType.EvaluateModule]);
const tracingModel = PerformanceTestRunner.tracingModel();
tracingModel.sortedProcesses().forEach(p => p.sortedThreads().forEach(t =>
t.events().filter(event => events.has(event.name)).forEach(PerformanceTestRunner.printTraceEventPropertiesWithDetails)));
TestRunner.completeTest();
})();
......@@ -501,7 +501,8 @@ v8::MaybeLocal<v8::Module> V8ScriptRunner::CompileModule(
AccessControlStatus access_control_status,
const TextPosition& start_position,
const ReferrerScriptInfo& referrer_info) {
TRACE_EVENT1("v8", "v8.compileModule", "fileName", file_name.Utf8());
TRACE_EVENT1("v8,devtools.timeline", "v8.compileModule", "fileName",
file_name.Utf8());
v8::ScriptOrigin origin(
V8String(isolate, file_name),
......@@ -695,7 +696,7 @@ v8::MaybeLocal<v8::Value> V8ScriptRunner::EvaluateModule(
v8::Local<v8::Module> module,
v8::Local<v8::Context> context,
v8::Isolate* isolate) {
TRACE_EVENT0("v8", "v8.evaluateModule");
TRACE_EVENT0("v8,devtools.timeline", "v8.evaluateModule");
RUNTIME_CALL_TIMER_SCOPE(isolate, RuntimeCallStats::CounterId::kV8);
v8::MicrotasksScope microtasks_scope(isolate,
v8::MicrotasksScope::kRunMicrotasks);
......
......@@ -14,6 +14,7 @@ PerformanceTestRunner.timelinePropertyFormatters = {
startTime: 'formatAsTypeName',
stackTrace: 'formatAsTypeName',
url: 'formatAsURL',
fileName: 'formatAsURL',
scriptName: 'formatAsTypeName',
scriptId: 'formatAsTypeName',
usedHeapSizeDelta: 'skip',
......
......@@ -103,6 +103,10 @@ Timeline.TimelineUIUtils = class {
new Timeline.TimelineRecordStyle(Common.UIString('Compile Script'), categories['scripting']);
eventStyles[recordTypes.EvaluateScript] =
new Timeline.TimelineRecordStyle(Common.UIString('Evaluate Script'), categories['scripting']);
eventStyles[recordTypes.CompileModule] =
new Timeline.TimelineRecordStyle(Common.UIString('Compile Module'), categories['scripting']);
eventStyles[recordTypes.EvaluateModule] =
new Timeline.TimelineRecordStyle(Common.UIString('Evaluate Module'), categories['scripting']);
eventStyles[recordTypes.ParseScriptOnBackground] =
new Timeline.TimelineRecordStyle(Common.UIString('Parse Script'), categories['scripting']);
eventStyles[recordTypes.MarkLoad] =
......@@ -524,7 +528,9 @@ Timeline.TimelineUIUtils = class {
detailsText = Common.UIString(
'%s [%s\u2026%s]', url, event.args['beginData']['startLine'] + 1, endLine >= 0 ? endLine + 1 : '');
break;
case recordType.CompileModule:
detailsText = Bindings.displayNameForURL(event.args['fileName']);
break;
case recordType.CompileScript:
case recordType.EvaluateScript:
var url = eventData && eventData['url'];
......@@ -681,6 +687,9 @@ Timeline.TimelineUIUtils = class {
details.appendChild(location);
}
break;
case recordType.CompileModule:
details = linkifyLocation('', event.args['fileName'], 0, 0);
break;
case recordType.CompileScript:
case recordType.EvaluateScript:
var url = eventData['url'];
......@@ -838,6 +847,9 @@ Timeline.TimelineUIUtils = class {
Common.UIString('Decoded Body'), Common.UIString('%d Bytes', eventData['decodedBodyLength']));
}
break;
case recordTypes.CompileModule:
contentHelper.appendLocationRow(Common.UIString('Module'), event.args['fileName'], 0);
break;
case recordTypes.CompileScript:
url = eventData && eventData['url'];
if (url) {
......
......@@ -67,6 +67,7 @@ TimelineModel.TimelineJSProfileProcessor = class {
case TimelineModel.TimelineModel.RecordType.RunMicrotasks:
case TimelineModel.TimelineModel.RecordType.FunctionCall:
case TimelineModel.TimelineModel.RecordType.EvaluateScript:
case TimelineModel.TimelineModel.RecordType.EvaluateModule:
case TimelineModel.TimelineModel.RecordType.EventDispatch:
return true;
}
......
......@@ -1095,6 +1095,8 @@ TimelineModel.TimelineModel.RecordType = {
XHRLoad: 'XHRLoad',
CompileScript: 'v8.compile',
EvaluateScript: 'EvaluateScript',
CompileModule: 'v8.compileModule',
EvaluateModule: 'v8.evaluateModule',
CommitLoad: 'CommitLoad',
MarkLoad: 'MarkLoad',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment