Index: third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js b/third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js |
index 27fba039c99e2173483ca04bdb9b00b125f71ccb..1e0cf10ec8589c2e39f414bf55150598636bb4a6 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js |
+++ b/third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js |
@@ -39,6 +39,7 @@ Coverage.CoverageView = class extends UI.VBox { |
this._toggleRecordAction = |
/** @type {!UI.Action }*/ (UI.actionRegistry.action('coverage.toggle-recording')); |
topToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleRecordAction)); |
+ topToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('coverage.take-snapshot')); |
var clearButton = new UI.ToolbarButton(Common.UIString('Clear all'), 'largeicon-clear'); |
clearButton.addEventListener(UI.ToolbarButton.Events.Click, this._reset.bind(this)); |
@@ -88,6 +89,26 @@ Coverage.CoverageView = class extends UI.VBox { |
this._progressElement.textContent = Common.UIString('Recording...'); |
} |
+ async _takeSnapshot() { |
+ this._reset(); |
+ var mainTarget = SDK.targetManager.mainTarget(); |
+ var profilerAgent = mainTarget && mainTarget.profilerAgent(); |
+ if (!profilerAgent) |
+ return []; |
+ var debuggerModel = /** @type !SDK.DebuggerModel */ (SDK.DebuggerModel.fromTarget(mainTarget)); |
+ var cssModel = mainTarget.model(SDK.CSSModel); |
+ if (!cssModel) |
+ return; |
+ |
+ cssModel.startRuleUsageTracking(); |
+ this._progressElement.textContent = Common.UIString('Taking a snapshot...'); |
+ var cssCoverageInfoPromise = this._stopCSSCoverage(); |
+ var jsCoverageRawData = await profilerAgent.getBestEffortCoverage((error, result) => error ? [] : result); |
+ var jsCoverageInfo = await Coverage.CoverageView._processJSCoverage(debuggerModel, jsCoverageRawData); |
+ var cssCoverageInfo = await cssCoverageInfoPromise; |
+ this._updateViews(cssCoverageInfo.concat(jsCoverageInfo)); |
+ } |
+ |
async _stopRecording() { |
this._toggleRecordAction.setToggled(false); |
this._progressElement.textContent = Common.UIString('Fetching results...'); |
@@ -349,7 +370,7 @@ Coverage.CoverageView.LineDecorator.type = 'coverage'; |
/** |
* @implements {UI.ActionDelegate} |
*/ |
-Coverage.CoverageView.RecordActionDelegate = class { |
+Coverage.CoverageView.ActionDelegate = class { |
/** |
* @override |
* @param {!UI.Context} context |
@@ -358,10 +379,22 @@ Coverage.CoverageView.RecordActionDelegate = class { |
*/ |
handleAction(context, actionId) { |
var coverageViewId = 'coverage'; |
+ |
UI.viewManager.showView(coverageViewId) |
.then(() => UI.viewManager.view(coverageViewId).widget()) |
- .then(widget => /** @type !Coverage.CoverageView} */ (widget)._toggleRecording()); |
+ .then(widget => this._handleActionOnWidget(/** @type !Coverage.CoverageView} */ (widget), actionId)); |
return true; |
} |
+ |
+ /** |
+ * @param {!Coverage.CoverageView} widget |
+ * @param {string} actionId |
+ */ |
+ _handleActionOnWidget(widget, actionId) { |
+ if (actionId === 'coverage.toggle-recording') |
+ widget._toggleRecording(); |
+ else if (actionId === 'coverage.take-snapshot') |
+ widget._takeSnapshot(); |
+ } |
}; |