Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelineController.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineController.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineController.js |
| index f075760e19d973c338122f44eb4ce567ed5c3ce4..27ea99ad9e1f4e66c9ca162904c2d977d9b920bc 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineController.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineController.js |
| @@ -18,6 +18,9 @@ WebInspector.TimelineController = class { |
| this._tracingModel = tracingModel; |
| this._targets = []; |
| WebInspector.targetManager.observeTargets(this); |
| + |
| + if (Runtime.experiments.isEnabled('timelineRuleUsageRecording')) |
| + this._markUnusedCSS = WebInspector.settings.createSetting('timelineMarkUnusedCSS', false); |
| } |
| /** |
| @@ -74,7 +77,12 @@ WebInspector.TimelineController = class { |
| tracingStoppedPromises.push(new Promise(resolve => this._tracingCompleteCallback = resolve)); |
| tracingStoppedPromises.push(this._stopProfilingOnAllTargets()); |
| this._target.tracingManager.stop(); |
| - tracingStoppedPromises.push(WebInspector.targetManager.resumeAllTargets()); |
| + |
| + if (!Runtime.experiments.isEnabled('timelineRuleUsageRecording') || !this._markUnusedCSS.get()) |
| + tracingStoppedPromises.push(WebInspector.targetManager.resumeAllTargets()); |
| + else |
| + this._addUnusedRulesToCoverage(); |
| + |
| Promise.all(tracingStoppedPromises).then(() => this._allSourcesFinished()); |
| this._delegate.loadingStarted(); |
| @@ -103,6 +111,28 @@ WebInspector.TimelineController = class { |
| // but it's too late. Backend connection is closed. |
| } |
| + _addUnusedRulesToCoverage() { |
| + var mainTarget = WebInspector.targetManager.mainTarget(); |
| + if (!mainTarget) |
| + return; |
| + var cssModel = WebInspector.CSSModel.fromTarget(mainTarget); |
| + |
| + function ruleListReceived(ruleUsageList) { |
|
caseq
2016/11/09 18:25:30
please annotate ruleUsageList
|
| + |
| + for (var rule of ruleUsageList) { |
| + if (rule.wasUsed) |
| + continue; |
| + |
| + var styleSheetHeader = cssModel.styleSheetHeaderForId(rule.styleSheetId); |
| + var url = styleSheetHeader.sourceURL; |
| + |
| + WebInspector.CoverageProfile.instance().appendUnusedRule(url, rule.range); |
| + } |
| + } |
| + |
| + cssModel.ruleListPromise().then(ruleListReceived); |
| + } |
| + |
| /** |
| * @param {!WebInspector.Target} target |
| * @return {!Promise} |
| @@ -160,7 +190,10 @@ WebInspector.TimelineController = class { |
| * @param {function(?string)=} callback |
| */ |
| _startRecordingWithCategories(categories, enableJSSampling, callback) { |
| - WebInspector.targetManager.suspendAllTargets(); |
| + |
| + if (!Runtime.experiments.isEnabled('timelineRuleUsageRecording') || !this._markUnusedCSS.get()) |
| + WebInspector.targetManager.suspendAllTargets(); |
| + |
| var profilingStartedPromise = enableJSSampling && !Runtime.experiments.isEnabled('timelineTracingJSProfile') ? |
| this._startProfilingOnAllTargets() : |
| Promise.resolve(); |