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 72fd7373c09767ed623055066dab8eb4fbd4be20..1d34cf2f1392af316d5056a389d5e50ff8203ea9 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelinePanel.js |
@@ -61,6 +61,9 @@ WebInspector.TimelinePanel = function() |
this._model.addEventListener(WebInspector.TimelineModel.Events.BufferUsage, this._onTracingBufferUsage, this); |
this._model.addEventListener(WebInspector.TimelineModel.Events.RetrieveEventsProgress, this._onRetrieveEventsProgress, this); |
+ if (Runtime.experiments.isEnabled("cpuThrottling")) |
+ this._cpuThrottlingManager = new WebInspector.CPUThrottlingManager(); |
+ |
this._waterfallFilters = [new WebInspector.TimelineStaticFilter()]; |
if (!Runtime.experiments.isEnabled("timelineEventsTreeView")) { |
this._filtersControl = new WebInspector.TimelineFilters(); |
@@ -393,6 +396,27 @@ WebInspector.TimelinePanel.prototype = { |
this._captureFilmStripSetting, |
WebInspector.UIString("Capture screenshots while recording. (Has performance overhead)"))); |
+ if (Runtime.experiments.isEnabled("cpuThrottling")) { |
+ this._panelToolbar.appendSeparator(); |
+ this._cpuThrottlingCombobox = new WebInspector.ToolbarComboBox(this._onCPUThrottlingChanged.bind(this)); |
+ /** |
+ * @param {string} name |
+ * @param {number} value |
+ * @this {WebInspector.TimelinePanel} |
+ */ |
+ function addGroupingOption(name, value) |
+ { |
+ var option = this._cpuThrottlingCombobox.createOption(name, "", String(value)); |
+ this._cpuThrottlingCombobox.addOption(option); |
+ if (value === this._cpuThrottlingManager.rate()) |
+ this._cpuThrottlingCombobox.select(option); |
+ } |
+ addGroupingOption.call(this, WebInspector.UIString("No CPU throttling"), 1); |
+ for (var rate of [1.2, 1.5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 50]) |
+ addGroupingOption.call(this, WebInspector.UIString("%fx slowdown", rate), rate); |
+ this._panelToolbar.appendToolbarItem(this._cpuThrottlingCombobox); |
+ } |
+ |
this._progressToolbarItem = new WebInspector.ToolbarItem(createElement("div")); |
this._progressToolbarItem.setVisible(false); |
this._panelToolbar.appendToolbarItem(this._progressToolbarItem); |
@@ -567,6 +591,14 @@ WebInspector.TimelinePanel.prototype = { |
this._flameChart.enableNetworkPane(this._captureNetworkSetting.get(), true); |
}, |
+ _onCPUThrottlingChanged: function() |
+ { |
+ if (!this._cpuThrottlingManager) |
+ return; |
+ var value = Number.parseFloat(this._cpuThrottlingCombobox.selectedOption().value); |
+ this._cpuThrottlingManager.setRate(value); |
+ }, |
+ |
/** |
* @param {boolean} enabled |
*/ |
@@ -2037,3 +2069,55 @@ WebInspector.TimelineFilters.prototype = { |
__proto__: WebInspector.Object.prototype |
}; |
+ |
+/** |
+ * @constructor |
+ * @extends {WebInspector.Object} |
+ * @implements {WebInspector.TargetManager.Observer} |
+ */ |
+WebInspector.CPUThrottlingManager = function() |
+{ |
+ this._targets = []; |
+ this._throttlingRate = 1.; // No throttling |
+ WebInspector.targetManager.observeTargets(this); |
+} |
+ |
+WebInspector.CPUThrottlingManager.prototype = { |
+ /** |
+ * @param {number} value |
+ */ |
+ setRate: function(value) |
+ { |
+ this._throttlingRate = value; |
+ this._targets.forEach(target => target.emulationAgent().setCPUThrottlingRate(value)); |
+ }, |
+ |
+ /** |
+ * @return {number} |
+ */ |
+ rate: function() |
+ { |
+ return this._throttlingRate; |
+ }, |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetAdded: function(target) |
+ { |
+ this._targets.push(target); |
+ target.emulationAgent().setCPUThrottlingRate(this._throttlingRate); |
+ }, |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetRemoved: function(target) |
+ { |
+ this._targets.remove(target, true); |
+ }, |
+ |
+ __proto__: WebInspector.Object.prototype |
+} |