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

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: address @vsevik's nit 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);
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));
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 this._deviceMetricsThrottler.schedule(setDeviceMetricsOverride.bind(this ));
655 this._setDeviceMetricsTimers = (this._setDeviceMetricsTimers || 0) + 1;
656 if (overrideWidth || overrideHeight)
657 setTimeout(setDeviceMetricsOverride.bind(this), 100);
658 else
659 setDeviceMetricsOverride.call(this);
660 655
661 /** 656 /**
657 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
662 * @this {WebInspector.OverridesSupport} 658 * @this {WebInspector.OverridesSupport}
663 */ 659 */
664 function setDeviceMetricsOverride() 660 function setDeviceMetricsOverride(finishCallback)
665 { 661 {
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( 662 PageAgent.setDeviceMetricsOverride(
678 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g et(), 663 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g et(),
679 this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(), 664 this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(),
680 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor( overrideWidth || dipWidth, overrideHeight || dipHeight), 665 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor( overrideWidth || dipWidth, overrideHeight || dipHeight),
681 apiCallback.bind(this)); 666 apiCallback.bind(this, finishCallback));
682 } 667 }
683 668
684 this.maybeHasActiveOverridesChanged(); 669 /**
670 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
671 * @this {WebInspector.OverridesSupport}
672 */
673 function clearDeviceMetricsOverride(finishCallback)
674 {
675 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this, finishCa llback));
676 }
685 677
686 /** 678 /**
679 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
687 * @param {?Protocol.Error} error 680 * @param {?Protocol.Error} error
688 * @this {WebInspector.OverridesSupport} 681 * @this {WebInspector.OverridesSupport}
689 */ 682 */
690 function apiCallback(error) 683 function apiCallback(finishCallback, error)
691 { 684 {
692 if (error) { 685 if (error) {
693 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S creen emulation is not available on this page.")); 686 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S creen emulation is not available on this page."));
694 this._deviceMetricsOverrideAppliedForTest(); 687 this._deviceMetricsOverrideAppliedForTest();
688 finishCallback();
695 return; 689 return;
696 } 690 }
697 691
698 var overrideDeviceResolution = this.settings.overrideDeviceResolutio n.get(); 692 var overrideDeviceResolution = this.settings.overrideDeviceResolutio n.get();
699 var viewportEnabled = this.settings.emulateViewport.get(); 693 var viewportEnabled = this.settings.emulateViewport.get();
700 if (this._overrideDeviceResolution !== overrideDeviceResolution || t his._emulateViewportEnabled !== viewportEnabled) 694 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.")); 695 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; 696 this._overrideDeviceResolution = overrideDeviceResolution;
703 this._emulateViewportEnabled = viewportEnabled; 697 this._emulateViewportEnabled = viewportEnabled;
704 this._deviceMetricsOverrideAppliedForTest(); 698 this._deviceMetricsOverrideAppliedForTest();
699 this.maybeHasActiveOverridesChanged();
700 finishCallback();
705 } 701 }
706 }, 702 },
707 703
708 _deviceMetricsOverrideAppliedForTest: function() 704 _deviceMetricsOverrideAppliedForTest: function()
709 { 705 {
710 // Used for sniffing in tests. 706 // Used for sniffing in tests.
711 }, 707 },
712 708
713 _geolocationPositionChanged: function() 709 _geolocationPositionChanged: function()
714 { 710 {
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 }, 1085 },
1090 1086
1091 __proto__: WebInspector.Object.prototype 1087 __proto__: WebInspector.Object.prototype
1092 } 1088 }
1093 1089
1094 1090
1095 /** 1091 /**
1096 * @type {!WebInspector.OverridesSupport} 1092 * @type {!WebInspector.OverridesSupport}
1097 */ 1093 */
1098 WebInspector.overridesSupport; 1094 WebInspector.overridesSupport;
OLDNEW
« no previous file with comments | « Source/devtools/front_end/inspector.html ('k') | Source/devtools/front_end/sdk/StylesSourceMapping.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698