Commit 68d14c04 authored by caseq's avatar caseq Committed by Commit bot

Timeline: do not start timeline on regular page reloads

This disables automatic timeline recording on page reload.
To record a reload users now should either use reload button on Timelin
panel or use a dedicated shortcut (Ctrl+Shift+E).

BUG=708099

Review-Url: https://codereview.chromium.org/2883143003
Cr-Commit-Position: refs/heads/master@{#472193}
parent 1f92cfbd
......@@ -19041,7 +19041,6 @@ crbug.com/591099 inspector/tracing/timeline-layout/timeline-layout-reason.html [
crbug.com/591099 inspector/tracing/timeline-layout/timeline-layout-with-invalidations.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-aggregated-details.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-animation-frame.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-auto-record.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-auto-zoom.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-bound-function.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-event-causes.html [ Crash ]
......@@ -19056,6 +19055,7 @@ crbug.com/591099 inspector/tracing/timeline-misc/timeline-model.html [ Failure ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-node-reference.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-parse-html.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-range-stats.html [ Failure ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-record-reload.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-tree-search.html [ Failure ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-trivial.html [ Crash ]
crbug.com/591099 inspector/tracing/timeline-misc/timeline-window-filter.html [ Crash ]
......@@ -24996,7 +24996,6 @@ crbug.com/591099 virtual/threaded/inspector/tracing/timeline-layout/timeline-lay
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-layout/timeline-layout-with-invalidations.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-aggregated-details.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-animation-frame.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-auto-record.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-auto-zoom.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-bound-function.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-event-causes.html [ Crash ]
......@@ -25011,6 +25010,7 @@ crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-model
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-node-reference.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-parse-html.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-range-stats.html [ Failure ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-record-reload.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-tree-search.html [ Failure ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-trivial.html [ Crash ]
crbug.com/591099 virtual/threaded/inspector/tracing/timeline-misc/timeline-window-filter.html [ Crash ]
Test auto-recording of Timeline.
Reloading page on console panel
Page reloaded.
Reloading page on timeline panel
Recording started
Initiated by user: false
Page reloaded.
Recording stopped
Test recording page reload works in Timeline.
Page reloaded.
Recording stopped
......@@ -9,30 +9,10 @@ function test()
{
var panel = UI.panels.timeline;
var callbackBarrier = new CallbackBarrier();
InspectorTest.addSniffer(panel, "_recordingStarted", recordingStarted);
InspectorTest.runWhenTimelineIsReady(callbackBarrier.createCallback());
InspectorTest.runWhenTimelineIsReady(recordingStopped);
UI.viewManager.showView("console");
InspectorTest.runWhenPageLoads(step1);
InspectorTest.addResult("Reloading page on console panel");
panel._millisecondsToRecordAfterLoadEvent = 1;
InspectorTest.resourceTreeModel.reloadPage();
function step1()
{
UI.viewManager.showView("timeline");
InspectorTest.runWhenPageLoads(callbackBarrier.createCallback());
callbackBarrier.callWhenDone(recordingStopped);
InspectorTest.addResult("Reloading page on timeline panel");
InspectorTest.resourceTreeModel.reloadPage();
}
function recordingStarted()
{
InspectorTest.addResult("Recording started");
InspectorTest.addResult("Initiated by user: " + !panel._autoRecordGeneration);
}
panel._recordReload();
function recordingStopped()
{
......@@ -45,7 +25,7 @@ function test()
</head>
<body onload="runTest()">
<p>Test auto-recording of Timeline.</p>
<p>Test recording page reload works in Timeline.</p>
</body>
</html>
......@@ -39,7 +39,7 @@
"iconClass": "largeicon-refresh",
"className": "Coverage.CoverageView.ActionDelegate",
"category": "Performance",
"title": "Start recording and reload page"
"title": "Start instrumenting coverage and reload page"
}
],
"dependencies": [
......
......@@ -28,6 +28,13 @@ Timeline.TimelineController = class {
SDK.targetManager.observeModels(SDK.CPUProfilerModel, this);
}
/**
* @return {!SDK.Target}
*/
mainTarget() {
return this._tracingManager.target();
}
/**
* @param {!Timeline.TimelineController.RecordingOptions} options
* @param {!Array<!Extensions.ExtensionTraceProvider>} providers
......
......@@ -46,6 +46,7 @@ Timeline.TimelinePanel = class extends UI.Panel {
/** @type {!Array<!UI.ToolbarItem>} */
this._recordingOptionUIControls = [];
this._state = Timeline.TimelinePanel.State.Idle;
this._recordingPageReload = false;
this._windowStartTime = 0;
this._windowEndTime = Infinity;
this._millisecondsToRecordAfterLoadEvent = 3000;
......@@ -104,8 +105,6 @@ Timeline.TimelinePanel = class extends UI.Panel {
this._createFileSelector();
SDK.targetManager.addModelListener(
SDK.ResourceTreeModel, SDK.ResourceTreeModel.Events.PageReloadRequested, this._pageReloadRequested, this);
SDK.targetManager.addModelListener(
SDK.ResourceTreeModel, SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this);
......@@ -217,7 +216,7 @@ Timeline.TimelinePanel = class extends UI.Panel {
_populateToolbar() {
// Record
this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleRecordAction));
this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('main.reload'));
this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('timeline.record-reload'));
this._clearButton = new UI.ToolbarButton(Common.UIString('Clear'), 'largeicon-clear');
this._clearButton.addEventListener(UI.ToolbarButton.Events.Click, () => this._clear());
this._panelToolbar.appendToolbarItem(this._clearButton);
......@@ -505,16 +504,17 @@ Timeline.TimelinePanel = class extends UI.Panel {
}
/**
* @param {!SDK.TracingManager} tracingManager
* @param {boolean} userInitiated
* @return {!Promise}
*/
_startRecording(tracingManager, userInitiated) {
_startRecording() {
var tracingManagers = SDK.targetManager.models(SDK.TracingManager);
if (!tracingManagers.length)
return Promise.resolve();
console.assert(!this._statusPane, 'Status pane is already opened.');
this._setState(Timeline.TimelinePanel.State.StartPending);
this._showRecordingStarted();
this._autoRecordGeneration = userInitiated ? null : {tracingManager: tracingManager};
var enabledTraceProviders = Extensions.extensionServer.traceProviders().filter(
provider => Timeline.TimelinePanel._settingForTraceProvider(provider).get());
......@@ -525,9 +525,8 @@ Timeline.TimelinePanel = class extends UI.Panel {
};
this._pendingPerformanceModel = new Timeline.PerformanceModel();
this._controller = new Timeline.TimelineController(tracingManager, this._pendingPerformanceModel, this);
Host.userMetrics.actionTaken(
userInitiated ? Host.UserMetrics.Action.TimelineStarted : Host.UserMetrics.Action.TimelinePageReloadStarted);
this._controller = new Timeline.TimelineController(tracingManagers[0], this._pendingPerformanceModel, this);
Host.userMetrics.actionTaken(Host.UserMetrics.Action.TimelineStarted);
this._setUIControlsEnabled(false);
this._hideLandingPage();
return this._controller.startRecording(recordingOptions, enabledTraceProviders)
......@@ -541,7 +540,6 @@ Timeline.TimelinePanel = class extends UI.Panel {
this._statusPane.updateProgressBar(Common.UIString('Received'), 0);
}
this._setState(Timeline.TimelinePanel.State.StopPending);
this._autoRecordGeneration = null;
this._controller.stopRecording();
this._controller = null;
this._setUIControlsEnabled(true);
......@@ -562,14 +560,20 @@ Timeline.TimelinePanel = class extends UI.Panel {
_toggleRecording() {
if (this._state === Timeline.TimelinePanel.State.Idle) {
var tracingManagers = SDK.targetManager.models(SDK.TracingManager);
if (tracingManagers.length)
this._startRecording(tracingManagers[0], true);
this._recordingPageReload = false;
this._startRecording();
} else if (this._state === Timeline.TimelinePanel.State.Recording) {
this._stopRecording();
}
}
_recordReload() {
if (this._state !== Timeline.TimelinePanel.State.Idle)
return;
this._recordingPageReload = true;
this._startRecording();
}
_clear() {
this._showLandingPage();
this._reset();
......@@ -615,6 +619,12 @@ Timeline.TimelinePanel = class extends UI.Panel {
}
_recordingStarted() {
if (this._recordingPageReload) {
var target = this._controller.mainTarget();
var resourceModel = target.model(SDK.ResourceTreeModel);
if (resourceModel)
resourceModel.reloadPage();
}
this._reset();
this._setState(Timeline.TimelinePanel.State.Recording);
this._showRecordingStarted();
......@@ -665,7 +675,7 @@ Timeline.TimelinePanel = class extends UI.Panel {
var centered = this._landingPage.contentElement.createChild('div');
var recordButton = UI.createInlineButton(UI.Toolbar.createActionButton(this._toggleRecordAction));
var reloadButton = UI.createInlineButton(UI.Toolbar.createActionButtonForId('main.reload'));
var reloadButton = UI.createInlineButton(UI.Toolbar.createActionButtonForId('timeline.record-reload'));
centered.createChild('p').appendChild(UI.formatLocalized(
'Click the record button %s or hit %s to capture a new recording.\n' +
......@@ -788,38 +798,24 @@ Timeline.TimelinePanel = class extends UI.Panel {
this._overviewPane.setMarkers(markers);
}
/**
* @param {!Common.Event} event
*/
_pageReloadRequested(event) {
if (this._state !== Timeline.TimelinePanel.State.Idle || !this.isShowing())
return;
var resourceTreeModel = /** @type {!SDK.ResourceTreeModel} */ (event.data);
var tracingManager = resourceTreeModel.target().model(SDK.TracingManager);
if (resourceTreeModel.target() !== SDK.targetManager.mainTarget() || !tracingManager)
return;
resourceTreeModel.suspendReload();
this._startRecording(tracingManager, false).then(() => resourceTreeModel.resumeReload());
}
/**
* @param {!Common.Event} event
*/
_loadEventFired(event) {
if (this._state !== Timeline.TimelinePanel.State.Recording || !this._autoRecordGeneration ||
this._autoRecordGeneration.tracingManager.target() !== event.data.resourceTreeModel.target())
if (this._state !== Timeline.TimelinePanel.State.Recording || !this._recordingPageReload ||
this._controller.mainTarget() !== event.data.resourceTreeModel.target())
return;
setTimeout(stopRecordingOnReload.bind(this, this._autoRecordGeneration), this._millisecondsToRecordAfterLoadEvent);
setTimeout(stopRecordingOnReload.bind(this, this._controller), this._millisecondsToRecordAfterLoadEvent);
/**
* @param {!Timeline.TimelineController} controller
* @this {Timeline.TimelinePanel}
* @param {!Object} recordGeneration
*/
function stopRecordingOnReload(recordGeneration) {
function stopRecordingOnReload(controller) {
// Check if we're still in the same recording session.
if (this._state !== Timeline.TimelinePanel.State.Recording || this._autoRecordGeneration !== recordGeneration)
if (controller !== this._controller)
return;
this._recordingPageReload = false;
this._stopRecording();
}
}
......@@ -1292,6 +1288,9 @@ Timeline.TimelinePanel.ActionDelegate = class {
case 'timeline.toggle-recording':
panel._toggleRecording();
return true;
case 'timeline.record-reload':
panel._recordReload();
return true;
case 'timeline.save-to-file':
panel._saveToFile();
return true;
......
......@@ -62,6 +62,27 @@
}
]
},
{
"type": "@UI.ActionDelegate",
"actionId": "timeline.record-reload",
"iconClass": "largeicon-refresh",
"contextTypes": [
"Timeline.TimelinePanel"
],
"category": "Performance",
"title": "Start profiling and reload page",
"className": "Timeline.TimelinePanel.ActionDelegate",
"bindings": [
{
"platform": "windows,linux",
"shortcut": "Ctrl+Shift+E"
},
{
"platform": "mac",
"shortcut": "Meta+Shift+E"
}
]
},
{
"type": "@UI.ActionDelegate",
"category": "Timeline",
......
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