Title: [224796] trunk
Revision
224796
Author
[email protected]
Date
2017-11-13 18:01:40 -0800 (Mon, 13 Nov 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().

We have to be careful to avoid m_forceCompositingMode flip-flopping between cacheAcceleratedCompositingFlags()
and cacheAcceleratedCompositingFlagsAfterLayout(), since, for subframes, it depends on layout.

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 (224795 => 224796)


--- trunk/LayoutTests/ChangeLog	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/LayoutTests/ChangeLog	2017-11-14 02:01:40 UTC (rev 224796)
@@ -1,3 +1,20 @@
+2017-11-13  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-11-13  Ryan Haddad  <[email protected]>
 
         Disable two Modern EME LayoutTests on mac-wk1  until the feature is enabled in DumpRenderTree.

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


--- trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 => 224796)


--- trunk/LayoutTests/compositing/accelerated-layers-after-back.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/accelerated-layers-after-back.html	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/LayoutTests/compositing/page-cache-back-crash.html	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/LayoutTests/compositing/page-cache-back-crash.html	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 224795, trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html) (0 => 224796)


--- trunk/LayoutTests/compositing/resources/go-back.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/resources/go-back.html	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/LayoutTests/compositing/tiling/tiled-drawing-async-frame-scrolling.html	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/LayoutTests/compositing/tiling/tiled-drawing-async-frame-scrolling.html	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 => 224796)


--- 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-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/Source/WebCore/ChangeLog	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebCore/ChangeLog	2017-11-14 02:01:40 UTC (rev 224796)
@@ -1,3 +1,38 @@
+2017-11-13  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().
+
+        We have to be careful to avoid m_forceCompositingMode flip-flopping between cacheAcceleratedCompositingFlags()
+        and cacheAcceleratedCompositingFlagsAfterLayout(), since, for subframes, it depends on layout.
+
+        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-11-13  Youenn Fablet  <[email protected]>
 
         matchRegistration does not need to go to StorageProcess if no service worker is registered

Modified: trunk/Source/WebCore/page/FrameView.cpp (224795 => 224796)


--- trunk/Source/WebCore/page/FrameView.cpp	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebCore/page/FrameView.cpp	2017-11-14 02:01:40 UTC (rev 224796)
@@ -799,8 +799,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 (224795 => 224796)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2017-11-14 02:01:40 UTC (rev 224796)
@@ -1758,6 +1758,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();
 
@@ -1780,9 +1783,6 @@
     if (m_uncommittedChanges & ContentsNeedsDisplay)
         updateContentsNeedsDisplay();
     
-    if (m_uncommittedChanges & AcceleratesDrawingChanged)
-        updateAcceleratesDrawing();
-
     if (m_uncommittedChanges & SupportsSubpixelAntialiasedTextChanged)
         updateSupportsSubpixelAntialiasedText();
 

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (224795 => 224796)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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,15 @@
         hasAcceleratedCompositing = m_compositingTriggers;
     }
 
-    showDebugBorders = settings.showDebugBorders();
-    showRepaintCounter = settings.showRepaintCounter();
-    forceCompositingMode = settings.forceCompositingMode() && hasAcceleratedCompositing;
+    bool showDebugBorders = settings.showDebugBorders();
+    bool showRepaintCounter = settings.showRepaintCounter();
+    bool acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled();
+    bool displayListDrawingEnabled = settings.displayListDrawingEnabled();
 
-    if (forceCompositingMode && !isMainFrameCompositor())
-        forceCompositingMode = requiresCompositingForScrollableFrame();
-
-    acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled();
-    displayListDrawingEnabled = settings.displayListDrawingEnabled();
+    // forceCompositingMode for subframes can only be computed after layout.
+    bool forceCompositingMode = m_forceCompositingMode;
+    if (isMainFrameCompositor())
+        forceCompositingMode = m_renderView.settings().forceCompositingMode() && hasAcceleratedCompositing; 
     
     if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter || forceCompositingMode != m_forceCompositingMode)
         setCompositingLayersNeedRebuild();
@@ -331,9 +324,9 @@
 
     bool debugBordersChanged = m_showDebugBorders != showDebugBorders;
     m_hasAcceleratedCompositing = hasAcceleratedCompositing;
+    m_forceCompositingMode = forceCompositingMode;
     m_showDebugBorders = showDebugBorders;
     m_showRepaintCounter = showRepaintCounter;
-    m_forceCompositingMode = forceCompositingMode;
     m_acceleratedDrawingEnabled = acceleratedDrawingEnabled;
     m_displayListDrawingEnabled = displayListDrawingEnabled;
     
@@ -349,6 +342,20 @@
     }
 }
 
+void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout()
+{
+    cacheAcceleratedCompositingFlags();
+
+    if (isMainFrameCompositor())
+        return;
+
+    bool forceCompositingMode = m_hasAcceleratedCompositing && m_renderView.settings().forceCompositingMode() && requiresCompositingForScrollableFrame();
+    if (forceCompositingMode != m_forceCompositingMode) {
+        m_forceCompositingMode = forceCompositingMode;
+        setCompositingLayersNeedRebuild();
+    }
+}
+
 bool RenderLayerCompositor::canRender3DTransforms() const
 {
     return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger);
@@ -363,6 +370,7 @@
 void RenderLayerCompositor::willRecalcStyle()
 {
     m_layerNeedsCompositingUpdate = false;
+    cacheAcceleratedCompositingFlags();
 }
 
 bool RenderLayerCompositor::didRecalcStyleWithNoPendingLayout()
@@ -370,7 +378,6 @@
     if (!m_layerNeedsCompositingUpdate)
         return false;
     
-    cacheAcceleratedCompositingFlags();
     return updateCompositingLayers(CompositingUpdateType::AfterStyleChange);
 }
 
@@ -631,6 +638,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 (224795 => 224796)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/Source/WebKit/ChangeLog	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebKit/ChangeLog	2017-11-14 02:01:40 UTC (rev 224796)
@@ -1,3 +1,17 @@
+2017-11-13  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-11-13  Youenn Fablet  <[email protected]>
 
         matchRegistration does not need to go to StorageProcess if no service worker is registered

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm (224795 => 224796)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 (224795 => 224796)


--- trunk/Tools/ChangeLog	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Tools/ChangeLog	2017-11-14 02:01:40 UTC (rev 224796)
@@ -1,3 +1,25 @@
+2017-11-13  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-11-13  Basuke Suzuki  <[email protected]>
 
         [Windows] Fix Python error for subprocess.popen with close_fds

Modified: trunk/Tools/DumpRenderTree/TestOptions.h (224795 => 224796)


--- trunk/Tools/DumpRenderTree/TestOptions.h	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Tools/DumpRenderTree/TestOptions.h	2017-11-14 02:01:40 UTC (rev 224796)
@@ -30,6 +30,7 @@
 
 struct TestOptions {
     bool enableAttachmentElement { false };
+    bool useAcceleratedDrawing { false };
     bool enableIntersectionObserver { false };
     bool enableMenuItemElement { false };
     bool enableModernMediaControls { true };

Modified: trunk/Tools/DumpRenderTree/TestOptions.mm (224795 => 224796)


--- trunk/Tools/DumpRenderTree/TestOptions.mm	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Tools/DumpRenderTree/TestOptions.mm	2017-11-14 02:01:40 UTC (rev 224796)
@@ -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 == "enableMenuItemElement")

Modified: trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm (224795 => 224796)


--- trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm	2017-11-14 02:01:40 UTC (rev 224796)
@@ -982,6 +982,7 @@
     WebPreferences *preferences = [WebPreferences standardPreferences];
 
     preferences.attachmentElementEnabled = options.enableAttachmentElement;
+    preferences.acceleratedDrawingEnabled = options.useAcceleratedDrawing;
     preferences.intersectionObserverEnabled = options.enableIntersectionObserver;
     preferences.menuItemElementEnabled = options.enableMenuItemElement;
     preferences.modernMediaControlsEnabled = options.enableModernMediaControls;

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (224795 => 224796)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2017-11-14 02:01:40 UTC (rev 224796)
@@ -721,7 +721,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);
 
@@ -1025,6 +1025,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 (224795 => 224796)


--- trunk/Tools/WebKitTestRunner/TestOptions.h	2017-11-14 00:55:41 UTC (rev 224795)
+++ trunk/Tools/WebKitTestRunner/TestOptions.h	2017-11-14 02:01:40 UTC (rev 224796)
@@ -33,6 +33,7 @@
 
 struct TestOptions {
     bool useThreadedScrolling { false };
+    bool useAcceleratedDrawing { false };
     bool useRemoteLayerTree { false };
     bool shouldShowWebView { false };
     bool useFlexibleViewport { false };
@@ -66,6 +67,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