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

Side by Side Diff: Source/devtools/front_end/sdk/OverridesSupport.js

Issue 319143002: DevTools: introduce WebInspector.Throttler (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: jsdoc for Throttler.FinishCallback Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 24 matching lines...) Expand all
35 * @param {boolean} responsiveDesignAvailable 35 * @param {boolean} responsiveDesignAvailable
36 */ 36 */
37 WebInspector.OverridesSupport = function(responsiveDesignAvailable) 37 WebInspector.OverridesSupport = function(responsiveDesignAvailable)
38 { 38 {
39 WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeMod el.EventTypes.MainFrameNavigated, this._onMainFrameNavigated.bind(this), this); 39 WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeMod el.EventTypes.MainFrameNavigated, this._onMainFrameNavigated.bind(this), this);
40 this._overrideDeviceResolution = false; 40 this._overrideDeviceResolution = false;
41 this._emulateViewportEnabled = false; 41 this._emulateViewportEnabled = false;
42 this._userAgent = ""; 42 this._userAgent = "";
43 this._pageResizer = null; 43 this._pageResizer = null;
44 this._initialized = false; 44 this._initialized = false;
45 this._deviceMetricsThrottler = new WebInspector.Throttler(0);
vsevik 2014/06/09 12:32:58 why not 100?
lushnikov 2014/06/09 13:07:26 Throttler is used here as a message serializer tha
45 WebInspector.targetManager.observeTargets(this); 46 WebInspector.targetManager.observeTargets(this);
46 this._responsiveDesignAvailable = responsiveDesignAvailable; 47 this._responsiveDesignAvailable = responsiveDesignAvailable;
47 } 48 }
48 49
49 WebInspector.OverridesSupport.Events = { 50 WebInspector.OverridesSupport.Events = {
50 OverridesWarningUpdated: "OverridesWarningUpdated", 51 OverridesWarningUpdated: "OverridesWarningUpdated",
51 HasActiveOverridesChanged: "HasActiveOverridesChanged", 52 HasActiveOverridesChanged: "HasActiveOverridesChanged",
52 } 53 }
53 54
54 /** 55 /**
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 _deviceMetricsChanged: function() 617 _deviceMetricsChanged: function()
617 { 618 {
618 this._showRulersChanged(); 619 this._showRulersChanged();
619 620
620 if (this._deviceMetricsChangedListenerMuted) 621 if (this._deviceMetricsChangedListenerMuted)
621 return; 622 return;
622 var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailab le && (!WebInspector.settings.responsiveDesign.enabled.get() || !this._pageResiz er); 623 var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailab le && (!WebInspector.settings.responsiveDesign.enabled.get() || !this._pageResiz er);
623 var overrideDeviceResolution = this.settings.overrideDeviceResolution.ge t(); 624 var overrideDeviceResolution = this.settings.overrideDeviceResolution.ge t();
624 var emulationEnabled = overrideDeviceResolution || this.settings.emulate Viewport.get(); 625 var emulationEnabled = overrideDeviceResolution || this.settings.emulate Viewport.get();
625 if (responsiveDesignAvailableAndDisabled || !emulationEnabled) { 626 if (responsiveDesignAvailableAndDisabled || !emulationEnabled) {
626 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this)); 627 this._deviceMetricsThrottler.schedule(clearDeviceMetricsOverride.bin d(this), true);
627 if (this._pageResizer && !emulationEnabled) 628 if (this._pageResizer && !emulationEnabled)
628 this._pageResizer.update(0, 0, 0); 629 this._pageResizer.update(0, 0, 0);
629 this.maybeHasActiveOverridesChanged();
630 return; 630 return;
631 } 631 }
632 632
633 var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get( ) : 0; 633 var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get( ) : 0;
634 var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.ge t() : 0; 634 var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.ge t() : 0;
635 635
636 // Disable override without checks. 636 // Disable override without checks.
637 if (this.isInspectingDevice()) 637 if (this.isInspectingDevice())
638 return; 638 return;
639 639
640 var overrideWidth = dipWidth; 640 var overrideWidth = dipWidth;
641 var overrideHeight = dipHeight; 641 var overrideHeight = dipHeight;
642 if (this._pageResizer) { 642 if (this._pageResizer) {
643 var available = this._pageResizer.availableDipSize(); 643 var available = this._pageResizer.availableDipSize();
644 if (available.width >= dipWidth && available.height >= dipHeight) { 644 if (available.width >= dipWidth && available.height >= dipHeight) {
645 this._pageResizer.update(dipWidth, dipHeight, 0); 645 this._pageResizer.update(dipWidth, dipHeight, 0);
646 // When we have enough space, no page size override is required. This will speed things up and remove lag. 646 // When we have enough space, no page size override is required. This will speed things up and remove lag.
647 overrideWidth = 0; 647 overrideWidth = 0;
648 overrideHeight = 0; 648 overrideHeight = 0;
649 } else { 649 } else {
650 this._pageResizer.update(Math.min(dipWidth, available.width), Ma th.min(dipHeight, available.height), 0); 650 this._pageResizer.update(Math.min(dipWidth, available.width), Ma th.min(dipHeight, available.height), 0);
651 } 651 }
652 } 652 }
653 653
654 // Do not emulate resolution more often than 10Hz. 654 var immediately = !overrideWidth && !overrideHeight;
655 this._setDeviceMetricsTimers = (this._setDeviceMetricsTimers || 0) + 1; 655 this._deviceMetricsThrottler.schedule(setDeviceMetricsOverride.bind(this ), immediately);
656 if (overrideWidth || overrideHeight)
657 setTimeout(setDeviceMetricsOverride.bind(this), 100);
658 else
659 setDeviceMetricsOverride.call(this);
vsevik 2014/06/09 12:32:57 This one is not called synchronously anymore, coul
lushnikov 2014/06/09 13:07:26 That's intentional, should be fine here.
660 656
661 /** 657 /**
658 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
662 * @this {WebInspector.OverridesSupport} 659 * @this {WebInspector.OverridesSupport}
663 */ 660 */
664 function setDeviceMetricsOverride() 661 function setDeviceMetricsOverride(finishCallback)
665 { 662 {
666 // Drop heavy intermediate commands.
667 this._setDeviceMetricsTimers--;
668 var isExpensive = overrideWidth || overrideHeight;
669 if (isExpensive && this._setDeviceMetricsTimers) {
670 var commandThreshold = 100;
671 var time = window.performance.now();
672 if (time - this._lastExpensivePageAgentCommandTime < commandThre shold)
673 return;
674 this._lastExpensivePageAgentCommandTime = time;
675 }
676
677 PageAgent.setDeviceMetricsOverride( 663 PageAgent.setDeviceMetricsOverride(
678 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g et(), 664 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g et(),
679 this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(), 665 this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(),
680 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor( overrideWidth || dipWidth, overrideHeight || dipHeight), 666 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor( overrideWidth || dipWidth, overrideHeight || dipHeight),
681 apiCallback.bind(this)); 667 apiCallback.bind(this, finishCallback));
682 } 668 }
683 669
684 this.maybeHasActiveOverridesChanged(); 670 /**
671 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
672 * @this {WebInspector.OverridesSupport}
673 */
674 function clearDeviceMetricsOverride(finishCallback)
675 {
676 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this, finishCa llback));
677 }
685 678
686 /** 679 /**
680 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
687 * @param {?Protocol.Error} error 681 * @param {?Protocol.Error} error
688 * @this {WebInspector.OverridesSupport} 682 * @this {WebInspector.OverridesSupport}
689 */ 683 */
690 function apiCallback(error) 684 function apiCallback(finishCallback, error)
691 { 685 {
692 if (error) { 686 if (error) {
693 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S creen emulation is not available on this page.")); 687 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S creen emulation is not available on this page."));
694 this._deviceMetricsOverrideAppliedForTest(); 688 this._deviceMetricsOverrideAppliedForTest();
689 finishCallback();
695 return; 690 return;
696 } 691 }
697 692
698 var overrideDeviceResolution = this.settings.overrideDeviceResolutio n.get(); 693 var overrideDeviceResolution = this.settings.overrideDeviceResolutio n.get();
699 var viewportEnabled = this.settings.emulateViewport.get(); 694 var viewportEnabled = this.settings.emulateViewport.get();
700 if (this._overrideDeviceResolution !== overrideDeviceResolution || t his._emulateViewportEnabled !== viewportEnabled) 695 if (this._overrideDeviceResolution !== overrideDeviceResolution || t his._emulateViewportEnabled !== viewportEnabled)
701 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Y ou might need to reload the page for proper user agent spoofing and viewport ren dering.")); 696 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Y ou might need to reload the page for proper user agent spoofing and viewport ren dering."));
702 this._overrideDeviceResolution = overrideDeviceResolution; 697 this._overrideDeviceResolution = overrideDeviceResolution;
703 this._emulateViewportEnabled = viewportEnabled; 698 this._emulateViewportEnabled = viewportEnabled;
704 this._deviceMetricsOverrideAppliedForTest(); 699 this._deviceMetricsOverrideAppliedForTest();
700 this.maybeHasActiveOverridesChanged();
701 finishCallback();
705 } 702 }
706 }, 703 },
707 704
708 _deviceMetricsOverrideAppliedForTest: function() 705 _deviceMetricsOverrideAppliedForTest: function()
709 { 706 {
710 // Used for sniffing in tests. 707 // Used for sniffing in tests.
711 }, 708 },
712 709
713 _geolocationPositionChanged: function() 710 _geolocationPositionChanged: function()
714 { 711 {
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 }, 1086 },
1090 1087
1091 __proto__: WebInspector.Object.prototype 1088 __proto__: WebInspector.Object.prototype
1092 } 1089 }
1093 1090
1094 1091
1095 /** 1092 /**
1096 * @type {!WebInspector.OverridesSupport} 1093 * @type {!WebInspector.OverridesSupport}
1097 */ 1094 */
1098 WebInspector.overridesSupport; 1095 WebInspector.overridesSupport;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698