Title: [155409] trunk/Source
Revision
155409
Author
[email protected]
Date
2013-09-09 18:27:23 -0700 (Mon, 09 Sep 2013)

Log Message

[WebGL] Allow multithreaded OpenGL contexts
https://bugs.webkit.org/show_bug.cgi?id=121062

Reviewed by Simon Fraser.

Expose a new preference "multithreadedWebGLEnabled".

Source/WebCore:

Also examine the value of that preference and, on Mac,
tell the CGLContext that it should go to multithreaded mode.

* html/canvas/WebGLRenderingContext.cpp:
(WebCore::WebGLRenderingContext::create): Look at the value of the new setting, and
toggle a flag on the context attributes.
* page/Settings.in: New Setting "multithreadedWebGLEnabled".
* platform/graphics/GraphicsContext3D.h:
(WebCore::GraphicsContext3D::Attributes::Attributes): Add a "multithreaded" flag.
* platform/graphics/mac/GraphicsContext3DMac.mm:
(WebCore::GraphicsContext3D::GraphicsContext3D): If the context attributes
suggest we should, tell the OpenGL context to go into multithreaded mode.

Source/WebKit/mac:

* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences multithreadedWebGLEnabled]):
(-[WebPreferences setMultithreadedWebGLEnabled:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Source/WebKit2:

* Shared/WebPreferencesStore.h:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetMultithreadedWebGLEnabled):
(WKPreferencesGetMultithreadedWebGLEnabled):
* UIProcess/API/C/WKPreferencesPrivate.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences):
* mac/WebKit2.order:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (155408 => 155409)


--- trunk/Source/WebCore/ChangeLog	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebCore/ChangeLog	2013-09-10 01:27:23 UTC (rev 155409)
@@ -1,3 +1,25 @@
+2013-09-09  Dean Jackson  <[email protected]>
+
+        [WebGL] Allow multithreaded OpenGL contexts
+        https://bugs.webkit.org/show_bug.cgi?id=121062
+
+        Reviewed by Simon Fraser.
+
+        Expose a new preference "multithreadedWebGLEnabled".
+
+        Also examine the value of that preference and, on Mac,
+        tell the CGLContext that it should go to multithreaded mode.
+
+        * html/canvas/WebGLRenderingContext.cpp:
+        (WebCore::WebGLRenderingContext::create): Look at the value of the new setting, and
+        toggle a flag on the context attributes.
+        * page/Settings.in: New Setting "multithreadedWebGLEnabled".
+        * platform/graphics/GraphicsContext3D.h:
+        (WebCore::GraphicsContext3D::Attributes::Attributes): Add a "multithreaded" flag.
+        * platform/graphics/mac/GraphicsContext3DMac.mm:
+        (WebCore::GraphicsContext3D::GraphicsContext3D): If the context attributes
+        suggest we should, tell the OpenGL context to go into multithreaded mode.
+
 2013-09-09  Ryosuke Niwa  <[email protected]>
 
         Remove HTMLTextFormControl::fixPlaceholderRenderer

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp (155408 => 155409)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2013-09-10 01:27:23 UTC (rev 155409)
@@ -430,6 +430,9 @@
     attributes.shareResources = false;
     attributes.preferDiscreteGPU = true;
 
+    if (frame->settings().multithreadedWebGLEnabled())
+        attributes.multithreaded = true;
+
     RefPtr<GraphicsContext3D> context(GraphicsContext3D::create(attributes, hostWindow));
 
     if (!context || !context->makeContextCurrent()) {

Modified: trunk/Source/WebCore/page/Settings.in (155408 => 155409)


--- trunk/Source/WebCore/page/Settings.in	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebCore/page/Settings.in	2013-09-10 01:27:23 UTC (rev 155409)
@@ -105,6 +105,7 @@
 webGLEnabled initial=false
 webGLErrorsToConsoleEnabled initial=true
 openGLMultisamplingEnabled initial=true
+multithreadedWebGLEnabled initial=false
 privilegedWebGLExtensionsEnabled initial=false
 accelerated2dCanvasEnabled initial=false
 antialiased2dCanvasEnabled initial=true

Modified: trunk/Source/WebCore/platform/graphics/GraphicsContext3D.h (155408 => 155409)


--- trunk/Source/WebCore/platform/graphics/GraphicsContext3D.h	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebCore/platform/graphics/GraphicsContext3D.h	2013-09-10 01:27:23 UTC (rev 155409)
@@ -444,6 +444,7 @@
             , noExtensions(false)
             , shareResources(true)
             , preferDiscreteGPU(false)
+            , multithreaded(false)
         {
         }
 
@@ -456,6 +457,7 @@
         bool noExtensions;
         bool shareResources;
         bool preferDiscreteGPU;
+        bool multithreaded;
     };
 
     enum RenderStyle {

Modified: trunk/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm (155408 => 155409)


--- trunk/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm	2013-09-10 01:27:23 UTC (rev 155409)
@@ -160,6 +160,15 @@
 
     // Set the current context to the one given to us.
     CGLSetCurrentContext(m_contextObj);
+
+    if (attrs.multithreaded) {
+        err = CGLEnable(m_contextObj, kCGLCEMPEngine);
+        if (err != kCGLNoError) {
+            // We could not create a multi-threaded context.
+            m_contextObj = 0;
+            return;
+        }
+    }
     
     validateAttributes();
 

Modified: trunk/Source/WebKit/mac/ChangeLog (155408 => 155409)


--- trunk/Source/WebKit/mac/ChangeLog	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit/mac/ChangeLog	2013-09-10 01:27:23 UTC (rev 155409)
@@ -1,5 +1,23 @@
 2013-09-09  Dean Jackson  <[email protected]>
 
+        [WebGL] Allow multithreaded OpenGL contexts
+        https://bugs.webkit.org/show_bug.cgi?id=121062
+
+        Reviewed by Simon Fraser.
+
+        Expose a new preference "multithreadedWebGLEnabled".
+
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]):
+        (-[WebPreferences multithreadedWebGLEnabled]):
+        (-[WebPreferences setMultithreadedWebGLEnabled:]):
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+
+2013-09-09  Dean Jackson  <[email protected]>
+
         Enable WebGL for OS X nightlies
         https://bugs.webkit.org/show_bug.cgi?id=121040
 

Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (155408 => 155409)


--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h	2013-09-10 01:27:23 UTC (rev 155409)
@@ -102,6 +102,7 @@
 #define WebKitShowRepaintCounterPreferenceKey @"WebKitShowRepaintCounter"
 #define WebKitWebAudioEnabledPreferenceKey @"WebKitWebAudioEnabled"
 #define WebKitWebGLEnabledPreferenceKey @"WebKitWebGLEnabled"
+#define WebKitMultithreadedWebGLEnabledPreferenceKey @"WebKitMultithreadedWebGLEnabled"
 #define WebKitAccelerated2dCanvasEnabledPreferenceKey @"WebKitAccelerated2dCanvasEnabled"
 #define WebKitFrameFlatteningEnabledPreferenceKey @"WebKitFrameFlatteningEnabled"
 #define WebKitSpatialNavigationEnabledPreferenceKey @"WebKitSpatialNavigationEnabled"

Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (155408 => 155409)


--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm	2013-09-10 01:27:23 UTC (rev 155409)
@@ -381,6 +381,7 @@
         [NSNumber numberWithBool:NO],   WebKitShowDebugBordersPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitShowRepaintCounterPreferenceKey,
         [NSNumber numberWithBool:YES],  WebKitWebGLEnabledPreferenceKey,
+        [NSNumber numberWithBool:NO],   WebKitMultithreadedWebGLEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitAccelerated2dCanvasEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitFrameFlatteningEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitSpatialNavigationEnabledPreferenceKey,
@@ -1452,6 +1453,16 @@
     [self _setBoolValue:enabled forKey:WebKitWebGLEnabledPreferenceKey];
 }
 
+- (BOOL)multithreadedWebGLEnabled
+{
+    return [self _boolValueForKey:WebKitMultithreadedWebGLEnabledPreferenceKey];
+}
+
+- (void)setMultithreadedWebGLEnabled:(BOOL)enabled
+{
+    [self _setBoolValue:enabled forKey:WebKitMultithreadedWebGLEnabledPreferenceKey];
+}
+
 - (BOOL)accelerated2dCanvasEnabled
 {
     return [self _boolValueForKey:WebKitAccelerated2dCanvasEnabledPreferenceKey];

Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (155408 => 155409)


--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h	2013-09-10 01:27:23 UTC (rev 155409)
@@ -211,6 +211,9 @@
 - (BOOL)webGLEnabled;
 - (void)setWebGLEnabled:(BOOL)enabled;
 
+- (BOOL)multithreadedWebGLEnabled;
+- (void)setMultithreadedWebGLEnabled:(BOOL)enabled;
+
 - (BOOL)accelerated2dCanvasEnabled;
 - (void)setAccelerated2dCanvasEnabled:(BOOL)enabled;
 

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (155408 => 155409)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2013-09-10 01:27:23 UTC (rev 155409)
@@ -1508,6 +1508,7 @@
     settings.setShowDebugBorders([preferences showDebugBorders]);
     settings.setShowRepaintCounter([preferences showRepaintCounter]);
     settings.setWebGLEnabled([preferences webGLEnabled]);
+    settings.setMultithreadedWebGLEnabled([preferences multithreadedWebGLEnabled]);
     settings.setAccelerated2dCanvasEnabled([preferences accelerated2dCanvasEnabled]);
     settings.setLoadDeferringEnabled(shouldEnableLoadDeferring());
     settings.setWindowFocusRestricted(shouldRestrictWindowFocus());

Modified: trunk/Source/WebKit2/ChangeLog (155408 => 155409)


--- trunk/Source/WebKit2/ChangeLog	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit2/ChangeLog	2013-09-10 01:27:23 UTC (rev 155409)
@@ -1,5 +1,23 @@
 2013-09-09  Dean Jackson  <[email protected]>
 
+        [WebGL] Allow multithreaded OpenGL contexts
+        https://bugs.webkit.org/show_bug.cgi?id=121062
+
+        Reviewed by Simon Fraser.
+
+        Expose a new preference "multithreadedWebGLEnabled".
+
+        * Shared/WebPreferencesStore.h:
+        * UIProcess/API/C/WKPreferences.cpp:
+        (WKPreferencesSetMultithreadedWebGLEnabled):
+        (WKPreferencesGetMultithreadedWebGLEnabled):
+        * UIProcess/API/C/WKPreferencesPrivate.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences):
+        * mac/WebKit2.order:
+
+2013-09-09  Dean Jackson  <[email protected]>
+
         Enable WebGL for OS X nightlies
         https://bugs.webkit.org/show_bug.cgi?id=121040
 

Modified: trunk/Source/WebKit2/Shared/WebPreferencesStore.h (155408 => 155409)


--- trunk/Source/WebKit2/Shared/WebPreferencesStore.h	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit2/Shared/WebPreferencesStore.h	2013-09-10 01:27:23 UTC (rev 155409)
@@ -93,6 +93,7 @@
     macro(TiledScrollingIndicatorVisible, tiledScrollingIndicatorVisible, Bool, bool, false) \
     macro(CSSCustomFilterEnabled, cssCustomFilterEnabled, Bool, bool, true) \
     macro(WebGLEnabled, webGLEnabled, Bool, bool, true) \
+    macro(MultithreadedWebGLEnabled, multithreadedWebGLEnabled, Bool, bool, false) \
     macro(Accelerated2dCanvasEnabled, accelerated2dCanvasEnabled, Bool, bool, false) \
     macro(CSSRegionsEnabled, cssRegionsEnabled, Bool, bool, true) \
     macro(CSSCompositingEnabled, cssCompositingEnabled, Bool, bool, true) \

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (155408 => 155409)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp	2013-09-10 01:27:23 UTC (rev 155409)
@@ -479,6 +479,16 @@
     return toImpl(preferencesRef)->webGLEnabled();
 }
 
+void WKPreferencesSetMultithreadedWebGLEnabled(WKPreferencesRef preferencesRef, bool flag)
+{
+    toImpl(preferencesRef)->setMultithreadedWebGLEnabled(flag);
+}
+
+bool WKPreferencesGetMultithreadedWebGLEnabled(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)->multithreadedWebGLEnabled();
+}
+
 void WKPreferencesSetAccelerated2DCanvasEnabled(WKPreferencesRef preferencesRef, bool flag)
 {
     toImpl(preferencesRef)->setAccelerated2dCanvasEnabled(flag);

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h (155408 => 155409)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h	2013-09-10 01:27:23 UTC (rev 155409)
@@ -95,11 +95,15 @@
 WK_EXPORT void WKPreferencesSetCSSCustomFilterEnabled(WKPreferencesRef, bool flag);
 WK_EXPORT bool WKPreferencesGetCSSCustomFilterEnabled(WKPreferencesRef);
 
-// Defaults to false.
+// Defaults to true.
 WK_EXPORT void WKPreferencesSetWebGLEnabled(WKPreferencesRef, bool);
 WK_EXPORT bool WKPreferencesGetWebGLEnabled(WKPreferencesRef);
 
 // Defaults to false.
+WK_EXPORT void WKPreferencesSetMultithreadedWebGLEnabled(WKPreferencesRef, bool);
+WK_EXPORT bool WKPreferencesGetMultithreadedWebGLEnabled(WKPreferencesRef);
+
+// Defaults to false.
 WK_EXPORT void WKPreferencesSetAccelerated2DCanvasEnabled(WKPreferencesRef, bool);
 WK_EXPORT bool WKPreferencesGetAccelerated2DCanvasEnabled(WKPreferencesRef);
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (155408 => 155409)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-09-10 01:27:23 UTC (rev 155409)
@@ -2496,6 +2496,7 @@
     settings.setCSSGridLayoutEnabled(store.getBoolValueForKey(WebPreferencesKey::cssGridLayoutEnabledKey()));
     settings.setRegionBasedColumnsEnabled(store.getBoolValueForKey(WebPreferencesKey::regionBasedColumnsEnabledKey()));
     settings.setWebGLEnabled(store.getBoolValueForKey(WebPreferencesKey::webGLEnabledKey()));
+    settings.setMultithreadedWebGLEnabled(store.getBoolValueForKey(WebPreferencesKey::multithreadedWebGLEnabledKey()));
     settings.setAccelerated2dCanvasEnabled(store.getBoolValueForKey(WebPreferencesKey::accelerated2dCanvasEnabledKey()));
     settings.setMediaPlaybackRequiresUserGesture(store.getBoolValueForKey(WebPreferencesKey::mediaPlaybackRequiresUserGestureKey()));
     settings.setMediaPlaybackAllowsInline(store.getBoolValueForKey(WebPreferencesKey::mediaPlaybackAllowsInlineKey()));

Modified: trunk/Source/WebKit2/mac/WebKit2.order (155408 => 155409)


--- trunk/Source/WebKit2/mac/WebKit2.order	2013-09-10 01:08:47 UTC (rev 155408)
+++ trunk/Source/WebKit2/mac/WebKit2.order	2013-09-10 01:27:23 UTC (rev 155409)
@@ -191,6 +191,7 @@
 __ZN6WebKit17WebPreferencesKey33tiledScrollingIndicatorVisibleKeyEv
 __ZN6WebKit17WebPreferencesKey25cssCustomFilterEnabledKeyEv
 __ZN6WebKit17WebPreferencesKey15webGLEnabledKeyEv
+__ZN6WebKit17WebPreferencesKey28multithreadedWebGLEnabledKeyEv
 __ZN6WebKit17WebPreferencesKey29accelerated2dCanvasEnabledKeyEv
 __ZN6WebKit17WebPreferencesKey20cssRegionsEnabledKeyEv
 __ZN6WebKit17WebPreferencesKey24cssCompositingEnabledKeyEv
@@ -468,6 +469,8 @@
 __ZN6WebKit14WebPreferences25setShouldPrintBackgroundsERKb
 _WKPreferencesSetWebGLEnabled
 __ZN6WebKit14WebPreferences15setWebGLEnabledERKb
+_WKPreferencesSetMultithreadedWebGLEnabled
+__ZN6WebKit14WebPreferences28setMultithreadedWebGLEnabledERKb
 _WKMutableArrayCreate
 __ZN6WebKit12MutableArrayC1Ev
 __ZN6WebKit14ImmutableArrayC2Ev
@@ -7801,6 +7804,8 @@
 __ZNK6WebKit14WebPreferences32allowUniversalAccessFromFileURLsEv
 _WKPreferencesGetWebGLEnabled
 __ZNK6WebKit14WebPreferences12webGLEnabledEv
+_WKPreferencesGetMultithreadedWebGLEnabled
+__ZNK6WebKit14WebPreferences25multithreadedWebGLEnabledEv
 _WKPageCopyCustomUserAgent
 _WKPageReload
 __ZN6WebKit12WebPageProxy6reloadEb
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to