ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant()) on nytimes.com after r245170
https://bugs.webkit.org/show_bug.cgi?id=197776

Reviewed by Zalan Bujtas.

Source/WebCore:

Only try to paint into shared backing for layers that are able to be composited. This
avoids trying to do sharing for non-self-painting layers, which doesn't make sense.

Test: compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html

* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::computeCompositingRequirements):

LayoutTests:

* compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share-expected.txt: Added.
* compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html: Added.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@245181 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 8bbf93e..7a8e888 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
+2019-05-10  Simon Fraser  <simon.fraser@apple.com>
+
+        ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant()) on nytimes.com after r245170
+        https://bugs.webkit.org/show_bug.cgi?id=197776
+
+        Reviewed by Zalan Bujtas.
+
+        * compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share-expected.txt: Added.
+        * compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html: Added.
+
 2019-05-10  Chris Fleizach  <cfleizach@apple.com>
 
         AX: Crash at WebKit: WebKit::WebSpeechSynthesisClient::speak
diff --git a/LayoutTests/compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share-expected.txt b/LayoutTests/compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share-expected.txt
new file mode 100644
index 0000000..4c3c44a
--- /dev/null
+++ b/LayoutTests/compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share-expected.txt
@@ -0,0 +1,5 @@
+Test passes if it does not assert in debug.
+
+this is clipped
+this is clipped
+
diff --git a/LayoutTests/compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html b/LayoutTests/compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html
new file mode 100644
index 0000000..928b248
--- /dev/null
+++ b/LayoutTests/compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <title>Tests that a non-self-painting layer doesn't get into the sharing list</title>
+    <style>
+        .scroller {
+            margin: 20px;
+            width: 300px;
+            height: 300px;
+            overflow: auto;
+            border: 2px solid black;
+            padding: 10px;
+        }
+
+        .clipping {
+            overflow: hidden;
+            top: 50px;
+            left: 200px;
+            height: 200px;
+            width: 200px;
+            border: 2px solid orange;
+        }
+        
+        .relative {
+            position: relative;
+        }
+
+        .spacer {
+            height: 150px;
+        }
+    </style>
+    <script>
+        if (window.testRunner)
+            testRunner.dumpAsText();
+    </script>
+</head>
+<body>
+    <p>Test passes if it does not assert in debug.</p>
+    <div class="scroller">
+        <div class="clipping">this is clipped</div>
+        <div class="relative">
+            <div class="clipping">this is clipped</div>
+        </div>
+        <div class="spacer"></div>
+    </div>
+</body>
+</html>
+
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index e074249..202999a 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,18 @@
+2019-05-10  Simon Fraser  <simon.fraser@apple.com>
+
+        ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant()) on nytimes.com after r245170
+        https://bugs.webkit.org/show_bug.cgi?id=197776
+
+        Reviewed by Zalan Bujtas.
+
+        Only try to paint into shared backing for layers that are able to be composited. This
+        avoids trying to do sharing for non-self-painting layers, which doesn't make sense.
+
+        Test: compositing/shared-backing/overflow-scroll/non-self-painting-layer-should-not-share.html
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
+
 2019-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>
 
         Fix a bunch of compiler warnings
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp
index e3a4c9f..790791b 100644
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp
@@ -915,7 +915,7 @@
 
         // If we're testing for overlap, we only need to composite if we overlap something that is already composited.
         if (overlapMap.overlapsLayers(layerExtent.bounds)) {
-            if (backingSharingState.backingProviderCandidate && backingProviderLayerCanIncludeLayer(*backingSharingState.backingProviderCandidate, layer)) {
+            if (backingSharingState.backingProviderCandidate && canBeComposited(layer) && backingProviderLayerCanIncludeLayer(*backingSharingState.backingProviderCandidate, layer)) {
                 backingSharingState.backingSharingLayers.append(makeWeakPtr(layer));
                 LOG(Compositing, " layer %p can share with %p", &layer, backingSharingState.backingProviderCandidate);
                 compositingReason = RenderLayer::IndirectCompositingReason::None;