Diff
Modified: trunk/LayoutTests/ChangeLog (223983 => 223984)
--- trunk/LayoutTests/ChangeLog 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/LayoutTests/ChangeLog 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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-25 Alex Christensen <[email protected]>
LayoutTest http/tests/loading/basic-credentials-sent-automatically.html is flaky
Added: trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt (0 => 223984)
--- trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt (rev 0)
+++ trunk/LayoutTests/compositing/accelerated-layers-after-back-expected.txt 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 => 223984)
--- trunk/LayoutTests/compositing/accelerated-layers-after-back.html (rev 0)
+++ trunk/LayoutTests/compositing/accelerated-layers-after-back.html 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/LayoutTests/compositing/page-cache-back-crash.html 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/LayoutTests/compositing/page-cache-back-crash.html 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 223982, trunk/LayoutTests/compositing/iframes/resources/page-cache-helper.html) (0 => 223984)
--- trunk/LayoutTests/compositing/resources/go-back.html (rev 0)
+++ trunk/LayoutTests/compositing/resources/go-back.html 2017-10-25 21:32:08 UTC (rev 223984)
@@ -0,0 +1,8 @@
+This page should go back.
+<script>
+ window.addEventListener("load", function() {
+ setTimeout(function() {
+ history.back();
+ }, 0);
+ }, false);
+</script>
Added: trunk/LayoutTests/platform/ios/compositing/accelerated-layers-after-back-expected.txt (0 => 223984)
--- 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-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Source/WebCore/ChangeLog 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebCore/ChangeLog 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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-25 Youenn Fablet <[email protected]>
Enable ServiceWorker to fetch resources
Modified: trunk/Source/WebCore/page/FrameView.cpp (223983 => 223984)
--- trunk/Source/WebCore/page/FrameView.cpp 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebCore/page/FrameView.cpp 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2017-10-25 21:32:08 UTC (rev 223984)
@@ -362,6 +362,7 @@
void RenderLayerCompositor::willRecalcStyle()
{
+ cacheAcceleratedCompositingFlags();
m_layerNeedsCompositingUpdate = false;
}
@@ -370,7 +371,6 @@
if (!m_layerNeedsCompositingUpdate)
return false;
- cacheAcceleratedCompositingFlags();
return updateCompositingLayers(CompositingUpdateType::AfterStyleChange);
}
@@ -634,6 +634,9 @@
{
LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " root " << updateRoot);
+ if (updateType == CompositingUpdateType::AfterLayout)
+ cacheAcceleratedCompositingFlags(); // 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 (223983 => 223984)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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);
@@ -360,7 +357,9 @@
void clearBackingForLayerIncludingDescendants(RenderLayer&);
- // Repaint this and its child layers.
+ void cacheAcceleratedCompositingFlags();
+
+ // Repaint the given layer and its descendants.
void recursiveRepaintLayer(RenderLayer&);
void computeExtent(const OverlapMap&, const RenderLayer&, OverlapExtent&) const;
Modified: trunk/Source/WebKit/ChangeLog (223983 => 223984)
--- trunk/Source/WebKit/ChangeLog 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebKit/ChangeLog 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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-25 Youenn Fablet <[email protected]>
Enable ServiceWorker to fetch resources
Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm (223983 => 223984)
--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Tools/ChangeLog 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Tools/ChangeLog 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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-25 Robin Morisset <[email protected]>
Support the TailBench9000 benchmark in run-jsc-benchmarks
Modified: trunk/Tools/DumpRenderTree/TestOptions.h (223983 => 223984)
--- trunk/Tools/DumpRenderTree/TestOptions.h 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Tools/DumpRenderTree/TestOptions.h 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Tools/DumpRenderTree/TestOptions.mm 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Tools/DumpRenderTree/TestOptions.mm 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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 (223983 => 223984)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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);
@@ -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 (223983 => 223984)
--- trunk/Tools/WebKitTestRunner/TestOptions.h 2017-10-25 21:30:16 UTC (rev 223983)
+++ trunk/Tools/WebKitTestRunner/TestOptions.h 2017-10-25 21:32:08 UTC (rev 223984)
@@ -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