Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(572)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js

Issue 2715423004: DevTools: add coverage snapshots
Patch Set: review comments addressed Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** @typedef {{range: !Common.TextRange, wasUsed: boolean}} */ 5 /** @typedef {{range: !Common.TextRange, wasUsed: boolean}} */
6 Coverage.RangeUsage; 6 Coverage.RangeUsage;
7 7
8 /** @typedef {{styleSheetHeader: !SDK.CSSStyleSheetHeader, ranges: !Array<!Cover age.RangeUsage>}} */ 8 /** @typedef {{styleSheetHeader: !SDK.CSSStyleSheetHeader, ranges: !Array<!Cover age.RangeUsage>}} */
9 Coverage.StyleSheetUsage; 9 Coverage.StyleSheetUsage;
10 10
(...skipping 21 matching lines...) Expand all
32 super(true); 32 super(true);
33 33
34 this.registerRequiredCSS('coverage/coverageView.css'); 34 this.registerRequiredCSS('coverage/coverageView.css');
35 35
36 var toolbarContainer = this.contentElement.createChild('div', 'coverage-tool bar-container'); 36 var toolbarContainer = this.contentElement.createChild('div', 'coverage-tool bar-container');
37 var topToolbar = new UI.Toolbar('coverage-toolbar', toolbarContainer); 37 var topToolbar = new UI.Toolbar('coverage-toolbar', toolbarContainer);
38 38
39 this._toggleRecordAction = 39 this._toggleRecordAction =
40 /** @type {!UI.Action }*/ (UI.actionRegistry.action('coverage.toggle-rec ording')); 40 /** @type {!UI.Action }*/ (UI.actionRegistry.action('coverage.toggle-rec ording'));
41 topToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleRecor dAction)); 41 topToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleRecor dAction));
42 topToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('coverage.ta ke-snapshot'));
42 43
43 var clearButton = new UI.ToolbarButton(Common.UIString('Clear all'), 'largei con-clear'); 44 var clearButton = new UI.ToolbarButton(Common.UIString('Clear all'), 'largei con-clear');
44 clearButton.addEventListener(UI.ToolbarButton.Events.Click, this._reset.bind (this)); 45 clearButton.addEventListener(UI.ToolbarButton.Events.Click, this._reset.bind (this));
45 topToolbar.appendToolbarItem(clearButton); 46 topToolbar.appendToolbarItem(clearButton);
46 47
47 this._coverageResultsElement = this.contentElement.createChild('div', 'cover age-results'); 48 this._coverageResultsElement = this.contentElement.createChild('div', 'cover age-results');
48 this._progressElement = this._coverageResultsElement.createChild('div', 'pro gress-view'); 49 this._progressElement = this._coverageResultsElement.createChild('div', 'pro gress-view');
49 this._listView = new Coverage.CoverageListView(); 50 this._listView = new Coverage.CoverageListView();
50 51
51 this._statusToolbarElement = this.contentElement.createChild('div', 'coverag e-toolbar-summary'); 52 this._statusToolbarElement = this.contentElement.createChild('div', 'coverag e-toolbar-summary');
(...skipping 29 matching lines...) Expand all
81 var cssModel = mainTarget.model(SDK.CSSModel); 82 var cssModel = mainTarget.model(SDK.CSSModel);
82 if (!cssModel) 83 if (!cssModel)
83 return; 84 return;
84 this._toggleRecordAction.setToggled(true); 85 this._toggleRecordAction.setToggled(true);
85 cssModel.startRuleUsageTracking(); 86 cssModel.startRuleUsageTracking();
86 mainTarget.profilerAgent().startPreciseCoverage(); 87 mainTarget.profilerAgent().startPreciseCoverage();
87 88
88 this._progressElement.textContent = Common.UIString('Recording...'); 89 this._progressElement.textContent = Common.UIString('Recording...');
89 } 90 }
90 91
92 async _takeSnapshot() {
93 this._reset();
94 var mainTarget = SDK.targetManager.mainTarget();
95 var profilerAgent = mainTarget && mainTarget.profilerAgent();
96 if (!profilerAgent)
97 return [];
98 var debuggerModel = /** @type !SDK.DebuggerModel */ (SDK.DebuggerModel.fromT arget(mainTarget));
99 var cssModel = mainTarget.model(SDK.CSSModel);
100 if (!cssModel)
101 return;
102
103 cssModel.startRuleUsageTracking();
104 this._progressElement.textContent = Common.UIString('Taking a snapshot...');
105 var cssCoverageInfoPromise = this._stopCSSCoverage();
106 var jsCoverageRawData = await profilerAgent.getBestEffortCoverage((error, re sult) => error ? [] : result);
107 var jsCoverageInfo = await Coverage.CoverageView._processJSCoverage(debugger Model, jsCoverageRawData);
108 var cssCoverageInfo = await cssCoverageInfoPromise;
109 this._updateViews(cssCoverageInfo.concat(jsCoverageInfo));
110 }
111
91 async _stopRecording() { 112 async _stopRecording() {
92 this._toggleRecordAction.setToggled(false); 113 this._toggleRecordAction.setToggled(false);
93 this._progressElement.textContent = Common.UIString('Fetching results...'); 114 this._progressElement.textContent = Common.UIString('Fetching results...');
94 115
95 var cssCoverageInfoPromise = this._stopCSSCoverage(); 116 var cssCoverageInfoPromise = this._stopCSSCoverage();
96 var jsCoverageInfoPromise = this._stopJSCoverage(); 117 var jsCoverageInfoPromise = this._stopJSCoverage();
97 var cssCoverageInfo = await cssCoverageInfoPromise; 118 var cssCoverageInfo = await cssCoverageInfoPromise;
98 var jsCoverageInfo = await jsCoverageInfoPromise; 119 var jsCoverageInfo = await jsCoverageInfoPromise;
99 this._updateViews(cssCoverageInfo.concat(jsCoverageInfo)); 120 this._updateViews(cssCoverageInfo.concat(jsCoverageInfo));
100 } 121 }
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 } 363 }
343 } 364 }
344 } 365 }
345 }; 366 };
346 367
347 Coverage.CoverageView.LineDecorator.type = 'coverage'; 368 Coverage.CoverageView.LineDecorator.type = 'coverage';
348 369
349 /** 370 /**
350 * @implements {UI.ActionDelegate} 371 * @implements {UI.ActionDelegate}
351 */ 372 */
352 Coverage.CoverageView.RecordActionDelegate = class { 373 Coverage.CoverageView.ActionDelegate = class {
353 /** 374 /**
354 * @override 375 * @override
355 * @param {!UI.Context} context 376 * @param {!UI.Context} context
356 * @param {string} actionId 377 * @param {string} actionId
357 * @return {boolean} 378 * @return {boolean}
358 */ 379 */
359 handleAction(context, actionId) { 380 handleAction(context, actionId) {
360 var coverageViewId = 'coverage'; 381 var coverageViewId = 'coverage';
382
361 UI.viewManager.showView(coverageViewId) 383 UI.viewManager.showView(coverageViewId)
362 .then(() => UI.viewManager.view(coverageViewId).widget()) 384 .then(() => UI.viewManager.view(coverageViewId).widget())
363 .then(widget => /** @type !Coverage.CoverageView} */ (widget)._toggleRec ording()); 385 .then(widget => this._handleActionOnWidget(/** @type !Coverage.CoverageV iew} */ (widget), actionId));
364 386
365 return true; 387 return true;
366 } 388 }
389
390 /**
391 * @param {!Coverage.CoverageView} widget
392 * @param {string} actionId
393 */
394 _handleActionOnWidget(widget, actionId) {
395 if (actionId === 'coverage.toggle-recording')
396 widget._toggleRecording();
397 else if (actionId === 'coverage.take-snapshot')
398 widget._takeSnapshot();
399 }
367 }; 400 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698