- Revision
- 210273
- Author
- [email protected]
- Date
- 2017-01-04 00:55:38 -0800 (Wed, 04 Jan 2017)
Log Message
Provide a setting for clients to always prefer low-power WebGL
https://bugs.webkit.org/show_bug.cgi?id=166675
<rdar://problem/29834093>
Reviewed by Dan Bernstein.
No new tests; as noted in r204664, we don't know how to reliably test
automatic graphics switching. One could use the manual test introduced
in that commit; after this commit, with the setting switched on, on a
dual-GPU machine that is actively using integrated graphics, that test
should return the same result for both contexts.
* page/Settings.in:
Add a setting to prefer low-power WebGL.
* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::create):
If said setting is enabled, set preferLowPowerToHighPerformance.
* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences preferLowPowerWebGLRendering]):
(-[WebPreferences setPreferLowPowerWebGLRendering:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):
Expose a new private preferLowPowerWebGLRendering WebKit1 preference.
* MiniBrowser/mac/Info.plist:
Have MiniBrowser claim to be a modern app that supports
automatic graphics switching. WebKit needs to support automatic
graphics switching, so our test app might as well. Without this
Info.plist parameter, this change has no effect, and bringing up
a WebGL context still brings up the discrete GPU (also true of the
existing web-exposed preferLowPowerToHighPerformance API).
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (210272 => 210273)
--- trunk/Source/WebCore/ChangeLog 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebCore/ChangeLog 2017-01-04 08:55:38 UTC (rev 210273)
@@ -1,3 +1,24 @@
+2017-01-04 Tim Horton <[email protected]>
+
+ Provide a setting for clients to always prefer low-power WebGL
+ https://bugs.webkit.org/show_bug.cgi?id=166675
+ <rdar://problem/29834093>
+
+ Reviewed by Dan Bernstein.
+
+ No new tests; as noted in r204664, we don't know how to reliably test
+ automatic graphics switching. One could use the manual test introduced
+ in that commit; after this commit, with the setting switched on, on a
+ dual-GPU machine that is actively using integrated graphics, that test
+ should return the same result for both contexts.
+
+ * page/Settings.in:
+ Add a setting to prefer low-power WebGL.
+
+ * html/canvas/WebGLRenderingContextBase.cpp:
+ (WebCore::WebGLRenderingContextBase::create):
+ If said setting is enabled, set preferLowPowerToHighPerformance.
+
2017-01-03 Ryosuke Niwa <[email protected]>
label element with tabindex >= 0 is not focusable
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (210272 => 210273)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp 2017-01-04 08:55:38 UTC (rev 210273)
@@ -399,6 +399,9 @@
if (frame->settings().forceSoftwareWebGLRendering())
attributes.forceSoftwareRenderer = true;
+ if (!attributes.preferLowPowerToHighPerformance && frame->settings().preferLowPowerWebGLRendering())
+ attributes.preferLowPowerToHighPerformance = true;
+
if (page)
attributes.devicePixelRatio = page->deviceScaleFactor();
Modified: trunk/Source/WebCore/page/Settings.in (210272 => 210273)
--- trunk/Source/WebCore/page/Settings.in 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebCore/page/Settings.in 2017-01-04 08:55:38 UTC (rev 210273)
@@ -108,6 +108,7 @@
webGLErrorsToConsoleEnabled initial=true
openGLMultisamplingEnabled initial=true
forceSoftwareWebGLRendering initial=false
+preferLowPowerWebGLRendering initial=false
accelerated2dCanvasEnabled initial=false
antialiased2dCanvasEnabled initial=true
loadDeferringEnabled initial=true
Modified: trunk/Source/WebKit/mac/ChangeLog (210272 => 210273)
--- trunk/Source/WebKit/mac/ChangeLog 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebKit/mac/ChangeLog 2017-01-04 08:55:38 UTC (rev 210273)
@@ -1,3 +1,21 @@
+2017-01-04 Tim Horton <[email protected]>
+
+ Provide a setting for clients to always prefer low-power WebGL
+ https://bugs.webkit.org/show_bug.cgi?id=166675
+ <rdar://problem/29834093>
+
+ Reviewed by Dan Bernstein.
+
+ * WebView/WebPreferenceKeysPrivate.h:
+ * WebView/WebPreferences.mm:
+ (+[WebPreferences initialize]):
+ (-[WebPreferences preferLowPowerWebGLRendering]):
+ (-[WebPreferences setPreferLowPowerWebGLRendering:]):
+ * WebView/WebPreferencesPrivate.h:
+ * WebView/WebView.mm:
+ (-[WebView _preferencesChanged:]):
+ Expose a new private preferLowPowerWebGLRendering WebKit1 preference.
+
2017-01-03 Tim Horton <[email protected]>
NSSpellChecker's recordResponse isn't called for unseen automatic corrections
Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (210272 => 210273)
--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h 2017-01-04 08:55:38 UTC (rev 210273)
@@ -111,6 +111,7 @@
#define WebKitWebGLEnabledPreferenceKey @"WebKitWebGLEnabled"
#define WebKitWebGL2EnabledPreferenceKey @"WebKitWebGL2Enabled"
#define WebKitForceSoftwareWebGLRenderingPreferenceKey @"WebKitForceSoftwareWebGLRendering"
+#define WebKitPreferLowPowerWebGLRenderingPreferenceKey @"WebKitPreferLowPowerWebGLRendering"
#define WebKitAccelerated2dCanvasEnabledPreferenceKey @"WebKitAccelerated2dCanvasEnabled"
#define WebKitFrameFlatteningEnabledPreferenceKey @"WebKitFrameFlatteningEnabled"
#define WebKitSpatialNavigationEnabledPreferenceKey @"WebKitSpatialNavigationEnabled"
Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (210272 => 210273)
--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm 2017-01-04 08:55:38 UTC (rev 210273)
@@ -504,6 +504,7 @@
[NSNumber numberWithBool:NO], WebKitShowRepaintCounterPreferenceKey,
[NSNumber numberWithBool:YES], WebKitWebGLEnabledPreferenceKey,
[NSNumber numberWithBool:NO], WebKitForceSoftwareWebGLRenderingPreferenceKey,
+ [NSNumber numberWithBool:NO], WebKitPreferLowPowerWebGLRenderingPreferenceKey,
[NSNumber numberWithBool:NO], WebKitAccelerated2dCanvasEnabledPreferenceKey,
[NSNumber numberWithBool:NO], WebKitSubpixelCSSOMElementMetricsEnabledPreferenceKey,
[NSNumber numberWithBool:NO], WebKitResourceLoadStatisticsEnabledPreferenceKey,
@@ -2028,6 +2029,16 @@
[self _setBoolValue:forced forKey:WebKitForceSoftwareWebGLRenderingPreferenceKey];
}
+- (BOOL)preferLowPowerWebGLRendering
+{
+ return [self _boolValueForKey:WebKitPreferLowPowerWebGLRenderingPreferenceKey];
+}
+
+- (void)setPreferLowPowerWebGLRendering:(BOOL)preferLowPower
+{
+ [self _setBoolValue:preferLowPower forKey:WebKitPreferLowPowerWebGLRenderingPreferenceKey];
+}
+
- (BOOL)accelerated2dCanvasEnabled
{
return [self _boolValueForKey:WebKitAccelerated2dCanvasEnabledPreferenceKey];
Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (210272 => 210273)
--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h 2017-01-04 08:55:38 UTC (rev 210273)
@@ -248,6 +248,9 @@
- (BOOL)forceSoftwareWebGLRendering;
- (void)setForceSoftwareWebGLRendering:(BOOL)forced;
+- (BOOL)preferLowPowerWebGLRendering;
+- (void)setPreferLowPowerWebGLRendering:(BOOL)preferLowPower;
+
- (BOOL)accelerated2dCanvasEnabled;
- (void)setAccelerated2dCanvasEnabled:(BOOL)enabled;
Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (210272 => 210273)
--- trunk/Source/WebKit/mac/WebView/WebView.mm 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm 2017-01-04 08:55:38 UTC (rev 210273)
@@ -2661,6 +2661,7 @@
settings.setSubpixelCSSOMElementMetricsEnabled([preferences subpixelCSSOMElementMetricsEnabled]);
settings.setForceSoftwareWebGLRendering([preferences forceSoftwareWebGLRendering]);
+ settings.setPreferLowPowerWebGLRendering([preferences preferLowPowerWebGLRendering]);
settings.setAccelerated2dCanvasEnabled([preferences accelerated2dCanvasEnabled]);
settings.setLoadDeferringEnabled(shouldEnableLoadDeferring());
settings.setWindowFocusRestricted(shouldRestrictWindowFocus());
Modified: trunk/Tools/ChangeLog (210272 => 210273)
--- trunk/Tools/ChangeLog 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Tools/ChangeLog 2017-01-04 08:55:38 UTC (rev 210273)
@@ -1,3 +1,19 @@
+2017-01-04 Tim Horton <[email protected]>
+
+ Provide a setting for clients to always prefer low-power WebGL
+ https://bugs.webkit.org/show_bug.cgi?id=166675
+ <rdar://problem/29834093>
+
+ Reviewed by Dan Bernstein.
+
+ * MiniBrowser/mac/Info.plist:
+ Have MiniBrowser claim to be a modern app that supports
+ automatic graphics switching. WebKit needs to support automatic
+ graphics switching, so our test app might as well. Without this
+ Info.plist parameter, this change has no effect, and bringing up
+ a WebGL context still brings up the discrete GPU (also true of the
+ existing web-exposed preferLowPowerToHighPerformance API).
+
2017-01-03 Yusuke Suzuki <[email protected]>
WorkQueueGeneric's platformInvalidate() can deadlock when called on the RunLoop's thread
Modified: trunk/Tools/MiniBrowser/mac/Info.plist (210272 => 210273)
--- trunk/Tools/MiniBrowser/mac/Info.plist 2017-01-04 08:29:52 UTC (rev 210272)
+++ trunk/Tools/MiniBrowser/mac/Info.plist 2017-01-04 08:55:38 UTC (rev 210273)
@@ -33,5 +33,7 @@
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
+ <key>NSSupportsAutomaticGraphicsSwitching</key>
+ <true/>
</dict>
</plist>