Index: Source/devtools/front_end/sdk/OverridesSupport.js |
diff --git a/Source/devtools/front_end/sdk/OverridesSupport.js b/Source/devtools/front_end/sdk/OverridesSupport.js |
index 8d46a0cde1002f1fbfdd9dbd296d0cb6e27801e9..e4829152af4c55006e45c897c018be02e4a5fcaa 100644 |
--- a/Source/devtools/front_end/sdk/OverridesSupport.js |
+++ b/Source/devtools/front_end/sdk/OverridesSupport.js |
@@ -42,6 +42,7 @@ WebInspector.OverridesSupport = function(responsiveDesignAvailable) |
this._userAgent = ""; |
this._pageResizer = null; |
this._initialized = false; |
+ this._deviceMetricsThrottler = new WebInspector.Throttler(0); |
WebInspector.targetManager.observeTargets(this); |
this._responsiveDesignAvailable = responsiveDesignAvailable; |
} |
@@ -623,10 +624,9 @@ WebInspector.OverridesSupport.prototype = { |
var overrideDeviceResolution = this.settings.overrideDeviceResolution.get(); |
var emulationEnabled = overrideDeviceResolution || this.settings.emulateViewport.get(); |
if (responsiveDesignAvailableAndDisabled || !emulationEnabled) { |
- PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this)); |
+ this._deviceMetricsThrottler.schedule(clearDeviceMetricsOverride.bind(this)); |
if (this._pageResizer && !emulationEnabled) |
this._pageResizer.update(0, 0, 0); |
- this.maybeHasActiveOverridesChanged(); |
return; |
} |
@@ -651,47 +651,41 @@ WebInspector.OverridesSupport.prototype = { |
} |
} |
- // Do not emulate resolution more often than 10Hz. |
- this._setDeviceMetricsTimers = (this._setDeviceMetricsTimers || 0) + 1; |
- if (overrideWidth || overrideHeight) |
- setTimeout(setDeviceMetricsOverride.bind(this), 100); |
- else |
- setDeviceMetricsOverride.call(this); |
+ this._deviceMetricsThrottler.schedule(setDeviceMetricsOverride.bind(this)); |
/** |
+ * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
* @this {WebInspector.OverridesSupport} |
*/ |
- function setDeviceMetricsOverride() |
+ function setDeviceMetricsOverride(finishCallback) |
{ |
- // Drop heavy intermediate commands. |
- this._setDeviceMetricsTimers--; |
- var isExpensive = overrideWidth || overrideHeight; |
- if (isExpensive && this._setDeviceMetricsTimers) { |
- var commandThreshold = 100; |
- var time = window.performance.now(); |
- if (time - this._lastExpensivePageAgentCommandTime < commandThreshold) |
- return; |
- this._lastExpensivePageAgentCommandTime = time; |
- } |
- |
PageAgent.setDeviceMetricsOverride( |
overrideWidth, overrideHeight, this.settings.deviceScaleFactor.get(), |
this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(), |
this.settings.deviceTextAutosizing.get(), this._fontScaleFactor(overrideWidth || dipWidth, overrideHeight || dipHeight), |
- apiCallback.bind(this)); |
+ apiCallback.bind(this, finishCallback)); |
} |
- this.maybeHasActiveOverridesChanged(); |
+ /** |
+ * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
+ * @this {WebInspector.OverridesSupport} |
+ */ |
+ function clearDeviceMetricsOverride(finishCallback) |
+ { |
+ PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this, finishCallback)); |
+ } |
/** |
+ * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
* @param {?Protocol.Error} error |
* @this {WebInspector.OverridesSupport} |
*/ |
- function apiCallback(error) |
+ function apiCallback(finishCallback, error) |
{ |
if (error) { |
this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Screen emulation is not available on this page.")); |
this._deviceMetricsOverrideAppliedForTest(); |
+ finishCallback(); |
return; |
} |
@@ -702,6 +696,8 @@ WebInspector.OverridesSupport.prototype = { |
this._overrideDeviceResolution = overrideDeviceResolution; |
this._emulateViewportEnabled = viewportEnabled; |
this._deviceMetricsOverrideAppliedForTest(); |
+ this.maybeHasActiveOverridesChanged(); |
+ finishCallback(); |
} |
}, |