Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js |
| index cdba648ce0c9c98d246f6a7fc0c2f69f8c83593c..3a766bb7a4a08e365b4288bb85fb6da7cea6327f 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js |
| @@ -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; |
| @@ -105,8 +106,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); |
| if (Runtime.experiments.isEnabled('timelineMultipleMainViews')) { |
| @@ -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); |
| @@ -507,16 +506,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()); |
| @@ -527,9 +527,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) |
| @@ -543,7 +542,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); |
| @@ -564,14 +562,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(); |
| @@ -617,6 +621,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(); |
| @@ -667,7 +677,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' + |
| @@ -793,35 +803,21 @@ Timeline.TimelinePanel = class extends UI.Panel { |
| /** |
| * @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); |
|
alph
2017/05/15 23:56:45
await sleep(...)
|
| /** |
| + * @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(); |
| } |
| } |
| @@ -1294,6 +1290,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; |