Title: [224078] trunk
Revision
224078
Author
[email protected]
Date
2017-10-26 18:57:42 -0700 (Thu, 26 Oct 2017)

Log Message

When navigating back to a page, compositing layers may not use accelerated drawing
https://bugs.webkit.org/show_bug.cgi?id=178749
rdar://problem/35158946

Reviewed by Dean Jackson.
Source/WebCore:

There were two issues with setting GraphicsLayerCA's "acceleratesDrawing" state which
occurred on back navigation, related to the ordering of style recalcs and layout.

First, at style recalc time, we created a RenderLayerCompositor but hadn't yet called
its cacheAcceleratedCompositingFlags(), so any layers created during style update
didn't get accelerated drawing. Fix by making cacheAcceleratedCompositingFlags() internal
to RenderLayerCompositor and calling it from willRecalcStyle() and updateCompositingLayers().

Secondly, GraphicsLayerCA::commitLayerChangesBeforeSublayers() needs to updateAcceleratesDrawing()
before updating tiles, so that new tiles fetch the right acceleratesDrawing state from
the TileController.

Test: compositing/accelerated-layers-after-back.html

* page/FrameView.cpp:
(WebCore::FrameView::updateCompositingLayersAfterLayout):
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::willRecalcStyle):
(WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
(WebCore::RenderLayerCompositor::updateCompositingLayers):
* rendering/RenderLayerCompositor.h:

Source/WebKit:

Avoid assertions when a test enables accelerated drawing (which we can't support
in the iOS simulator).

* Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
(WebKit::RemoteLayerBackingStore::ensureBackingStore):

Tools:

Fix WTR and DRT to parse "useAcceleratedDrawing" out of "webkit-test-runner" options
and use it to set the state of the web view.

* DumpRenderTree/TestOptions.h:
* DumpRenderTree/TestOptions.mm:
(TestOptions::TestOptions):
* DumpRenderTree/mac/DumpRenderTree.mm:
(setWebPreferencesForTestOptions):
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetPreferencesToConsistentValues):
(WTR::updateTestOptionsFromTestHeader):
* WebKitTestRunner/TestOptions.h:
(WTR::TestOptions::hasSameInitializationOptions const):

LayoutTests:

Moved iframes/resources/page-cache-helper.html up to compositing/resources/go-back.html.

* compositing/accelerated-layers-after-back-expected.txt: Added.
* compositing/accelerated-layers-after-back.html: Added.
* compositing/iframes/page-cache-layer-tree.html:
* compositing/page-cache-back-crash.html:
* compositing/resources/go-back.html: Renamed from LayoutTests/compositing/iframes/resources/page-cache-helper.html.
* platform/ios/compositing/accelerated-layers-after-back-expected.txt: Added.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (224077 => 224078)


--- trunk/LayoutTests/ChangeLog	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/LayoutTests/ChangeLog	2017-10-27 01:57:42 UTC (rev 224078)
@@ -1,3 +1,20 @@
+2017-10-25  Simon Fraser  <[email protected]>
+
+        When navigating back to a page, compositing layers may not use accelerated drawing
+        https://bugs.webkit.org/show_bug.cgi?id=178749
+        rdar://problem/35158946
+
+        Reviewed by Dean Jackson.
+        
+        Moved iframes/resources/page-cache-helper.html up to compositing/resources/go-back.html.
+
+        * compositing/accelerated-layers-after-back-expected.txt: Added.
+        * compositing/accelerated-layers-after-back.html: Added.
+        * compositing/iframes/page-cache-layer-tree.html:
+        * compositing/page-cache-back-crash.html:
+        * compositing/resources/go-back.html: Renamed from LayoutTests/compositing/iframes/resources/page-cache-helper.html.
+        * platform/ios/compositing/accelerated-layers-after-back-expected.txt: Added.
+
 2017-10-26  Myles C. Maxfield  <[email protected]>
 
         [iOS] Update expected results for writing-mode tests

Added: trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt (0 => 224078)


--- trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt	2017-10-27 01:57:42 UTC (rev 224078)
@@ -0,0 +1,45 @@
+This layer should use 'acceleratesDrawing' after going back to this page.
+
+Before:
+
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (acceleratesDrawing 1)
+      (children 1
+        (GraphicsLayer
+          (position 18.00 10.00)
+          (bounds 222.00 222.00)
+          (drawsContent 1)
+          (acceleratesDrawing 1)
+        )
+      )
+    )
+  )
+)
+After:
+
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 785.00 653.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 785.00 653.00)
+      (contentsOpaque 1)
+      (acceleratesDrawing 1)
+      (children 1
+        (GraphicsLayer
+          (position 18.00 10.00)
+          (bounds 222.00 222.00)
+          (drawsContent 1)
+          (acceleratesDrawing 1)
+        )
+      )
+    )
+  )
+)
+

Added: trunk/LayoutTests/compositing/accelerated-layers-after-back.html (0 => 224078)


--- trunk/LayoutTests/compositing/accelerated-layers-after-back.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/accelerated-layers-after-back.html	2017-10-27 01:57:42 UTC (rev 224078)
@@ -0,0 +1,67 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useAcceleratedDrawing=true ] -->
+
+<html>
+<head>
+    <style>
+        .container {
+            position: relative;
+            height: 200px;
+            width: 200px;
+            margin: 10px;
+            padding: 10px;
+            border: 1px solid black;
+            will-change: transform;
+        }
+    </style>
+    <script>
+        var jsTestIsAsync = true;
+
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+            window.testRunner.overridePreference("WebKitUsesPageCachePreferenceKey", 1);
+        }
+        
+        function doOnFirstLoad()
+        {
+            if (window.internals)
+                document.getElementById('layers-before-navigate').innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_ACCELERATES_DRAWING);
+            
+            setTimeout(function() {
+                window.location.href = '';
+            }, 0);
+        }
+
+        function doAfterBack()
+        {
+            if (window.internals)
+                document.getElementById('layers-after-back').innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_ACCELERATES_DRAWING);
+
+            if (window.testRunner)
+                testRunner.notifyDone();
+        }
+
+        window.addEventListener("pageshow", function(event) {
+            if (event.persisted)
+                setTimeout(doAfterBack, 0);
+        }, false);
+
+        function doTest()
+        {
+            doOnFirstLoad();
+        }
+        
+        window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+<div class="container">
+    <p>This layer should use 'acceleratesDrawing' after going back to this page.</p>
+</div>
+<h2>Before:</h2>
+<pre id="layers-before-navigate"></pre>
+<h2>After:</h2>
+<pre id="layers-after-back"></pre>
+
+</body>
+</html>

Modified: trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html (224077 => 224078)


--- trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html	2017-10-27 01:57:42 UTC (rev 224078)
@@ -73,7 +73,7 @@
     // Force a back navigation back to this page.
     window.addEventListener("load", function(event) {
         setTimeout(function() {
-            window.location.href = ""
+            window.location.href = ""
         }, 0);
     }, false);
     </script>

Deleted: trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html (224077 => 224078)


--- trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html	2017-10-27 01:57:42 UTC (rev 224078)
@@ -1,8 +0,0 @@
-This page should go back.
-<script>
-  window.addEventListener("load", function() {
-    setTimeout(function() {
-      history.back();
-    }, 0);
-  }, false);
-</script>

Modified: trunk/LayoutTests/compositing/page-cache-back-crash.html (224077 => 224078)


--- trunk/LayoutTests/compositing/page-cache-back-crash.html	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/LayoutTests/compositing/page-cache-back-crash.html	2017-10-27 01:57:42 UTC (rev 224078)
@@ -19,7 +19,7 @@
 window.addEventListener("load", function() {
     setTimeout(function() {
         // Navigate to a helper page that will immediately navigate back here after loading.
-        window.location.href = ""
+        window.location.href = ""
     }, 0);
 });
 </script>

Copied: trunk/LayoutTests/compositing/resources/go-back.html (from rev 224077, trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html) (0 => 224078)


--- trunk/LayoutTests/compositing/resources/go-back.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/resources/go-back.html	2017-10-27 01:57:42 UTC (rev 224078)
@@ -0,0 +1,8 @@
+This page should go back.
+<script>
+  window.addEventListener("load", function() {
+    setTimeout(function() {
+      history.back();
+    }, 0);
+  }, false);
+</script>

Modified: trunk/LayoutTests/compositing/tiling/tiled-drawing-async-frame-scrolling.html (224077 => 224078)


--- trunk/LayoutTests/compositing/tiling/tiled-drawing-async-frame-scrolling.html	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/LayoutTests/compositing/tiling/tiled-drawing-async-frame-scrolling.html	2017-10-27 01:57:42 UTC (rev 224078)
@@ -9,7 +9,7 @@
         if (window.testRunner) {
             testRunner.dumpAsText();
             testRunner.waitUntilDone();
-	}
+        }
 
         function doTest()
         {

Added: trunk/LayoutTests/platform/ios/compositing/accelerated-layers-after-back-expected.txt (0 => 224078)


--- trunk/LayoutTests/platform/ios/compositing/accelerated-layers-after-back-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/ios/compositing/accelerated-layers-after-back-expected.txt	2017-10-27 01:57:42 UTC (rev 224078)
@@ -0,0 +1,45 @@
+This layer should use 'acceleratesDrawing' after going back to this page.
+
+Before:
+
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (acceleratesDrawing 1)
+      (children 1
+        (GraphicsLayer
+          (position 18.00 10.00)
+          (bounds 222.00 222.00)
+          (drawsContent 1)
+          (acceleratesDrawing 1)
+        )
+      )
+    )
+  )
+)
+After:
+
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 638.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 638.00)
+      (contentsOpaque 1)
+      (acceleratesDrawing 1)
+      (children 1
+        (GraphicsLayer
+          (position 18.00 10.00)
+          (bounds 222.00 222.00)
+          (drawsContent 1)
+          (acceleratesDrawing 1)
+        )
+      )
+    )
+  )
+)
+

Modified: trunk/Source/WebCore/ChangeLog (224077 => 224078)


--- trunk/Source/WebCore/ChangeLog	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebCore/ChangeLog	2017-10-27 01:57:42 UTC (rev 224078)
@@ -1,3 +1,35 @@
+2017-10-25  Simon Fraser  <[email protected]>
+
+        When navigating back to a page, compositing layers may not use accelerated drawing
+        https://bugs.webkit.org/show_bug.cgi?id=178749
+        rdar://problem/35158946
+
+        Reviewed by Dean Jackson.
+
+        There were two issues with setting GraphicsLayerCA's "acceleratesDrawing" state which
+        occurred on back navigation, related to the ordering of style recalcs and layout.
+
+        First, at style recalc time, we created a RenderLayerCompositor but hadn't yet called
+        its cacheAcceleratedCompositingFlags(), so any layers created during style update
+        didn't get accelerated drawing. Fix by making cacheAcceleratedCompositingFlags() internal
+        to RenderLayerCompositor and calling it from willRecalcStyle() and updateCompositingLayers().
+
+        Secondly, GraphicsLayerCA::commitLayerChangesBeforeSublayers() needs to updateAcceleratesDrawing()
+        before updating tiles, so that new tiles fetch the right acceleratesDrawing state from
+        the TileController.
+
+        Test: compositing/accelerated-layers-after-back.html
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::updateCompositingLayersAfterLayout):
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::willRecalcStyle):
+        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
+        (WebCore::RenderLayerCompositor::updateCompositingLayers):
+        * rendering/RenderLayerCompositor.h:
+
 2017-10-26  Alex Christensen  <[email protected]>
 
         Fix Windows build

Modified: trunk/Source/WebCore/page/FrameView.cpp (224077 => 224078)


--- trunk/Source/WebCore/page/FrameView.cpp	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebCore/page/FrameView.cpp	2017-10-27 01:57:42 UTC (rev 224078)
@@ -892,8 +892,6 @@
     if (!renderView)
         return;
 
-    // This call will make sure the cached hasAcceleratedCompositing is updated from the pref
-    renderView->compositor().cacheAcceleratedCompositingFlags();
     renderView->compositor().updateCompositingLayers(CompositingUpdateType::AfterLayout);
 }
 

Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (224077 => 224078)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2017-10-27 01:57:42 UTC (rev 224078)
@@ -1753,6 +1753,9 @@
     if (m_uncommittedChanges & CoverageRectChanged)
         updateCoverage(commitState);
 
+    if (m_uncommittedChanges & AcceleratesDrawingChanged) // Needs to happen before TilingAreaChanged.
+        updateAcceleratesDrawing();
+
     if (m_uncommittedChanges & TilingAreaChanged) // Needs to happen after CoverageRectChanged, ContentsScaleChanged
         updateTiles();
 
@@ -1775,9 +1778,6 @@
     if (m_uncommittedChanges & ContentsNeedsDisplay)
         updateContentsNeedsDisplay();
     
-    if (m_uncommittedChanges & AcceleratesDrawingChanged)
-        updateAcceleratesDrawing();
-
     if (m_uncommittedChanges & SupportsSubpixelAntialiasedTextChanged)
         updateSupportsSubpixelAntialiasedText();
 

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (224077 => 224078)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2017-10-27 01:57:42 UTC (rev 224078)
@@ -299,15 +299,8 @@
 
 void RenderLayerCompositor::cacheAcceleratedCompositingFlags()
 {
-    bool hasAcceleratedCompositing = false;
-    bool showDebugBorders = false;
-    bool showRepaintCounter = false;
-    bool forceCompositingMode = false;
-    bool acceleratedDrawingEnabled = false;
-    bool displayListDrawingEnabled = false;
-
     auto& settings = m_renderView.settings();
-    hasAcceleratedCompositing = settings.acceleratedCompositingEnabled();
+    bool hasAcceleratedCompositing = settings.acceleratedCompositingEnabled();
 
     // We allow the chrome to override the settings, in case the page is rendered
     // on a chrome that doesn't allow accelerated compositing.
@@ -316,15 +309,11 @@
         hasAcceleratedCompositing = m_compositingTriggers;
     }
 
-    showDebugBorders = settings.showDebugBorders();
-    showRepaintCounter = settings.showRepaintCounter();
-    forceCompositingMode = settings.forceCompositingMode() && hasAcceleratedCompositing;
-
-    if (forceCompositingMode && !isMainFrameCompositor())
-        forceCompositingMode = requiresCompositingForScrollableFrame();
-
-    acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled();
-    displayListDrawingEnabled = settings.displayListDrawingEnabled();
+    bool showDebugBorders = settings.showDebugBorders();
+    bool showRepaintCounter = settings.showRepaintCounter();
+    bool forceCompositingMode = settings.forceCompositingMode() && hasAcceleratedCompositing;
+    bool acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled();
+    bool displayListDrawingEnabled = settings.displayListDrawingEnabled();
     
     if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter || forceCompositingMode != m_forceCompositingMode)
         setCompositingLayersNeedRebuild();
@@ -349,6 +338,18 @@
     }
 }
 
+void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout()
+{
+    cacheAcceleratedCompositingFlags();
+    if (isMainFrameCompositor() || !m_forceCompositingMode)
+        return;
+
+    if (!requiresCompositingForScrollableFrame()) {
+        m_forceCompositingMode = false;
+        setCompositingLayersNeedRebuild();
+    }
+}
+
 bool RenderLayerCompositor::canRender3DTransforms() const
 {
     return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger);
@@ -363,6 +364,7 @@
 void RenderLayerCompositor::willRecalcStyle()
 {
     m_layerNeedsCompositingUpdate = false;
+    cacheAcceleratedCompositingFlags();
 }
 
 bool RenderLayerCompositor::didRecalcStyleWithNoPendingLayout()
@@ -370,7 +372,6 @@
     if (!m_layerNeedsCompositingUpdate)
         return false;
     
-    cacheAcceleratedCompositingFlags();
     return updateCompositingLayers(CompositingUpdateType::AfterStyleChange);
 }
 
@@ -634,6 +635,9 @@
 {
     LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " root " << updateRoot);
 
+    if (updateType == CompositingUpdateType::AfterStyleChange || updateType == CompositingUpdateType::AfterLayout)
+        cacheAcceleratedCompositingFlagsAfterLayout(); // Some flags (e.g. forceCompositingMode) depend on layout.
+
     m_updateCompositingLayersTimer.stop();
 
     ASSERT(m_renderView.document().pageCacheState() == Document::NotInPageCache);

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (224077 => 224078)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2017-10-27 01:57:42 UTC (rev 224078)
@@ -110,9 +110,6 @@
 
     bool canRender3DTransforms() const;
 
-    // Copy the accelerated compositing related flags from Settings
-    void cacheAcceleratedCompositingFlags();
-
     // Called when the layer hierarchy needs to be updated (compositing layers have been
     // created, destroyed or re-parented).
     void setCompositingLayersNeedRebuild(bool needRebuild = true);
@@ -346,6 +343,10 @@
     // GraphicsLayerUpdaterClient implementation
     void flushLayersSoon(GraphicsLayerUpdater&) override;
 
+    // Copy the accelerated compositing related flags from Settings
+    void cacheAcceleratedCompositingFlags();
+    void cacheAcceleratedCompositingFlagsAfterLayout();
+
     // Whether the given RL needs a compositing layer.
     bool needsToBeComposited(const RenderLayer&, RenderLayer::ViewportConstrainedNotCompositedReason* = nullptr) const;
     // Whether the layer has an intrinsic need for compositing layer.

Modified: trunk/Source/WebKit/ChangeLog (224077 => 224078)


--- trunk/Source/WebKit/ChangeLog	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebKit/ChangeLog	2017-10-27 01:57:42 UTC (rev 224078)
@@ -1,3 +1,17 @@
+2017-10-25  Simon Fraser  <[email protected]>
+
+        When navigating back to a page, compositing layers may not use accelerated drawing
+        https://bugs.webkit.org/show_bug.cgi?id=178749
+        rdar://problem/35158946
+
+        Reviewed by Dean Jackson.
+
+        Avoid assertions when a test enables accelerated drawing (which we can't support
+        in the iOS simulator).
+
+        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
+        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
+
 2017-10-26  Sam Weinig  <[email protected]>
 
         [Settings] Generate the bulk of WebPage::updatePreferences(...)

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm (224077 => 224078)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm	2017-10-27 01:57:42 UTC (rev 224078)
@@ -72,6 +72,9 @@
 
 void RemoteLayerBackingStore::ensureBackingStore(FloatSize size, float scale, bool acceleratesDrawing, bool deepColor, bool isOpaque)
 {
+#if !USE(IOSURFACE)
+    acceleratesDrawing = false;
+#endif
     if (m_size == size && m_scale == scale && m_deepColor == deepColor && m_acceleratesDrawing == acceleratesDrawing && m_isOpaque == isOpaque)
         return;
 

Modified: trunk/Tools/ChangeLog (224077 => 224078)


--- trunk/Tools/ChangeLog	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Tools/ChangeLog	2017-10-27 01:57:42 UTC (rev 224078)
@@ -1,3 +1,25 @@
+2017-10-25  Simon Fraser  <[email protected]>
+
+        When navigating back to a page, compositing layers may not use accelerated drawing
+        https://bugs.webkit.org/show_bug.cgi?id=178749
+        rdar://problem/35158946
+
+        Reviewed by Dean Jackson.
+
+        Fix WTR and DRT to parse "useAcceleratedDrawing" out of "webkit-test-runner" options
+        and use it to set the state of the web view.
+
+        * DumpRenderTree/TestOptions.h:
+        * DumpRenderTree/TestOptions.mm:
+        (TestOptions::TestOptions):
+        * DumpRenderTree/mac/DumpRenderTree.mm:
+        (setWebPreferencesForTestOptions):
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::resetPreferencesToConsistentValues):
+        (WTR::updateTestOptionsFromTestHeader):
+        * WebKitTestRunner/TestOptions.h:
+        (WTR::TestOptions::hasSameInitializationOptions const):
+
 2017-10-26  Alex Christensen  <[email protected]>
 
         Move WKWebViewConfiguration validation to WKWebView construction

Modified: trunk/Tools/DumpRenderTree/TestOptions.h (224077 => 224078)


--- trunk/Tools/DumpRenderTree/TestOptions.h	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Tools/DumpRenderTree/TestOptions.h	2017-10-27 01:57:42 UTC (rev 224078)
@@ -30,6 +30,7 @@
 
 struct TestOptions {
     bool enableAttachmentElement { false };
+    bool useAcceleratedDrawing { false };
     bool enableIntersectionObserver { false };
     bool enableModernMediaControls { true };
     bool enablePointerLock { false };

Modified: trunk/Tools/DumpRenderTree/TestOptions.mm (224077 => 224078)


--- trunk/Tools/DumpRenderTree/TestOptions.mm	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Tools/DumpRenderTree/TestOptions.mm	2017-10-27 01:57:42 UTC (rev 224078)
@@ -80,6 +80,8 @@
         auto value = pairString.substr(equalsLocation + 1, pairEnd - (equalsLocation + 1));
         if (key == "enableAttachmentElement")
             this->enableAttachmentElement = parseBooleanTestHeaderValue(value);
+        if (key == "useAcceleratedDrawing")
+            this->useAcceleratedDrawing = parseBooleanTestHeaderValue(value);
         else if (key == "enableIntersectionObserver")
             this->enableIntersectionObserver = parseBooleanTestHeaderValue(value);
         else if (key == "enableModernMediaControls")

Modified: trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm (224077 => 224078)


--- trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm	2017-10-27 01:57:42 UTC (rev 224078)
@@ -982,6 +982,7 @@
     WebPreferences *preferences = [WebPreferences standardPreferences];
 
     preferences.attachmentElementEnabled = options.enableAttachmentElement;
+    preferences.acceleratedDrawingEnabled = options.useAcceleratedDrawing;
     preferences.intersectionObserverEnabled = options.enableIntersectionObserver;
     preferences.modernMediaControlsEnabled = options.enableModernMediaControls;
     preferences.credentialManagementEnabled = options.enableCredentialManagement;

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (224077 => 224078)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2017-10-27 01:57:42 UTC (rev 224078)
@@ -719,7 +719,7 @@
     WKPreferencesSetHiddenPageDOMTimerThrottlingEnabled(preferences, false);
     WKPreferencesSetHiddenPageCSSAnimationSuspensionEnabled(preferences, false);
 
-    WKPreferencesSetAcceleratedDrawingEnabled(preferences, m_shouldUseAcceleratedDrawing);
+    WKPreferencesSetAcceleratedDrawingEnabled(preferences, m_shouldUseAcceleratedDrawing || options.useAcceleratedDrawing);
     // FIXME: We should be testing the default.
     WKPreferencesSetStorageBlockingPolicy(preferences, kWKAllowAllStorage);
 
@@ -1021,6 +1021,8 @@
             String(value.c_str()).split(",", false, testOptions.overrideLanguages);
         if (key == "useThreadedScrolling")
             testOptions.useThreadedScrolling = parseBooleanTestHeaderValue(value);
+        if (key == "useAcceleratedDrawing")
+            testOptions.useAcceleratedDrawing = parseBooleanTestHeaderValue(value);
         if (key == "useFlexibleViewport")
             testOptions.useFlexibleViewport = parseBooleanTestHeaderValue(value);
         if (key == "useDataDetection")

Modified: trunk/Tools/WebKitTestRunner/TestOptions.h (224077 => 224078)


--- trunk/Tools/WebKitTestRunner/TestOptions.h	2017-10-27 01:45:28 UTC (rev 224077)
+++ trunk/Tools/WebKitTestRunner/TestOptions.h	2017-10-27 01:57:42 UTC (rev 224078)
@@ -33,6 +33,7 @@
 
 struct TestOptions {
     bool useThreadedScrolling { false };
+    bool useAcceleratedDrawing { false };
     bool useRemoteLayerTree { false };
     bool shouldShowWebView { false };
     bool useFlexibleViewport { false };
@@ -65,6 +66,7 @@
     bool hasSameInitializationOptions(const TestOptions& options) const
     {
         if (useThreadedScrolling != options.useThreadedScrolling
+            || useAcceleratedDrawing != options.useAcceleratedDrawing
             || overrideLanguages != options.overrideLanguages
             || useMockScrollbars != options.useMockScrollbars
             || needsSiteSpecificQuirks != options.needsSiteSpecificQuirks
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to