Title: [252285] tags/Safari-609.1.10.1
Revision
252285
Author
alanc...@apple.com
Date
2019-11-08 16:51:54 -0800 (Fri, 08 Nov 2019)

Log Message

Cherry-pick r252070. rdar://problem/56559648

    Content can disappear with a combination of <video> with controls and clipping
    https://bugs.webkit.org/show_bug.cgi?id=203834
    Source/WebCore:

    rdar://problem/56559648

    Reviewed by Zalan Bujtas.

    <video> with controls triggered a bug where a backing-sharing layer also claimed
    that it didn't need any backing store. RenderLayerCompositor::requiresOwnBackingStore()
    could early-return with 'false' if a layer had an indirect compositing reason of "Clipping",
    while also backing-sharing. We need to check for backing-sharing first.

    Test: compositing/shared-backing/clipping-and-shared-backing.html

    * rendering/RenderLayerBacking.cpp:
    (WebCore::RenderLayerBacking::setBackingSharingLayers):
    * rendering/RenderLayerCompositor.cpp:
    (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):

    LayoutTests:

    Reviewed by Zalan Bujtas.

    * compositing/shared-backing/clipping-and-shared-backing-expected.html: Added.
    * compositing/shared-backing/clipping-and-shared-backing.html: Added.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252070 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Added Paths

Diff

Modified: tags/Safari-609.1.10.1/LayoutTests/ChangeLog (252284 => 252285)


--- tags/Safari-609.1.10.1/LayoutTests/ChangeLog	2019-11-09 00:51:50 UTC (rev 252284)
+++ tags/Safari-609.1.10.1/LayoutTests/ChangeLog	2019-11-09 00:51:54 UTC (rev 252285)
@@ -1,5 +1,49 @@
 2019-11-07  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r252070. rdar://problem/56559648
+
+    Content can disappear with a combination of <video> with controls and clipping
+    https://bugs.webkit.org/show_bug.cgi?id=203834
+    Source/WebCore:
+    
+    rdar://problem/56559648
+    
+    Reviewed by Zalan Bujtas.
+    
+    <video> with controls triggered a bug where a backing-sharing layer also claimed
+    that it didn't need any backing store. RenderLayerCompositor::requiresOwnBackingStore()
+    could early-return with 'false' if a layer had an indirect compositing reason of "Clipping",
+    while also backing-sharing. We need to check for backing-sharing first.
+    
+    Test: compositing/shared-backing/clipping-and-shared-backing.html
+    
+    * rendering/RenderLayerBacking.cpp:
+    (WebCore::RenderLayerBacking::setBackingSharingLayers):
+    * rendering/RenderLayerCompositor.cpp:
+    (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
+    
+    LayoutTests:
+    
+    Reviewed by Zalan Bujtas.
+    
+    * compositing/shared-backing/clipping-and-shared-backing-expected.html: Added.
+    * compositing/shared-backing/clipping-and-shared-backing.html: Added.
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252070 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-11-05  Simon Fraser  <simon.fra...@apple.com>
+
+            Content can disappear with a combination of <video> with controls and clipping
+            https://bugs.webkit.org/show_bug.cgi?id=203834
+
+            Reviewed by Zalan Bujtas.
+
+            * compositing/shared-backing/clipping-and-shared-backing-expected.html: Added.
+            * compositing/shared-backing/clipping-and-shared-backing.html: Added.
+
+2019-11-07  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r252051. rdar://problem/56080440
 
     [iOS] Update fast/forms/ios/file-upload-panel.html test and results

Added: tags/Safari-609.1.10.1/LayoutTests/compositing/shared-backing/clipping-and-shared-backing-expected.html (0 => 252285)


--- tags/Safari-609.1.10.1/LayoutTests/compositing/shared-backing/clipping-and-shared-backing-expected.html	                        (rev 0)
+++ tags/Safari-609.1.10.1/LayoutTests/compositing/shared-backing/clipping-and-shared-backing-expected.html	2019-11-09 00:51:54 UTC (rev 252285)
@@ -0,0 +1,42 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <style>
+        .wrapper {
+            overflow-x: hidden;
+            margin: 20px 50px;
+        }
+        
+        .video {
+            width: 300px;
+            height: 100px;
+            will-change: transform;
+        }
+        
+        .obscurer {
+            position: absolute;
+            top: 18px;
+            left: 48px;
+            width: 320px;
+            height: 120px;
+            background-color: gray;
+        }
+        
+        .test {
+            position: relative;
+            width: 100%;
+            height: 300px;
+            background-color: green;
+        }
+    </style>
+</head>
+<body>
+    <section class="wrapper">
+        <div class="video"></div>
+        <div class="test">Some text here</div>
+    </section>
+    <!--Hide the video; we just want its side-effects -->
+    <div class="obscurer"></div>
+
+</body>
+</html>

Added: tags/Safari-609.1.10.1/LayoutTests/compositing/shared-backing/clipping-and-shared-backing.html (0 => 252285)


--- tags/Safari-609.1.10.1/LayoutTests/compositing/shared-backing/clipping-and-shared-backing.html	                        (rev 0)
+++ tags/Safari-609.1.10.1/LayoutTests/compositing/shared-backing/clipping-and-shared-backing.html	2019-11-09 00:51:54 UTC (rev 252285)
@@ -0,0 +1,59 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <style>
+        .wrapper {
+            overflow-x: hidden;
+            margin: 20px 50px;
+        }
+        
+        video {
+            display: block;
+            width: 300px;
+            height: 100px;
+        }
+        
+        .obscurer {
+            position: absolute;
+            top: 18px;
+            left: 48px;
+            width: 320px;
+            height: 120px;
+            background-color: gray;
+        }
+        
+        .test {
+            position: relative;
+            width: 100%;
+            height: 300px;
+            background-color: green;
+        }
+    </style>
+    <script src=""
+    <script src=""
+    <script>
+        if (window.testRunner)
+            testRunner.waitUntilDone();
+
+        function setupTest()
+        {
+            var video = document.getElementsByTagName('video')[0];
+            setupVideo(video, '../resources/video', null, () => {
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            });
+        }
+        
+        window.addEventListener('load', setupTest, false);
+    </script>
+</head>
+<body>
+    <section class="wrapper">
+        <video ></video>
+        <div class="test">Some text here</div>
+    </section>
+    <!--Hide the video; we just want its side-effects -->
+    <div class="obscurer"></div>
+
+</body>
+</html>

Modified: tags/Safari-609.1.10.1/Source/WebCore/ChangeLog (252284 => 252285)


--- tags/Safari-609.1.10.1/Source/WebCore/ChangeLog	2019-11-09 00:51:50 UTC (rev 252284)
+++ tags/Safari-609.1.10.1/Source/WebCore/ChangeLog	2019-11-09 00:51:54 UTC (rev 252285)
@@ -1,5 +1,59 @@
 2019-11-07  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r252070. rdar://problem/56559648
+
+    Content can disappear with a combination of <video> with controls and clipping
+    https://bugs.webkit.org/show_bug.cgi?id=203834
+    Source/WebCore:
+    
+    rdar://problem/56559648
+    
+    Reviewed by Zalan Bujtas.
+    
+    <video> with controls triggered a bug where a backing-sharing layer also claimed
+    that it didn't need any backing store. RenderLayerCompositor::requiresOwnBackingStore()
+    could early-return with 'false' if a layer had an indirect compositing reason of "Clipping",
+    while also backing-sharing. We need to check for backing-sharing first.
+    
+    Test: compositing/shared-backing/clipping-and-shared-backing.html
+    
+    * rendering/RenderLayerBacking.cpp:
+    (WebCore::RenderLayerBacking::setBackingSharingLayers):
+    * rendering/RenderLayerCompositor.cpp:
+    (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
+    
+    LayoutTests:
+    
+    Reviewed by Zalan Bujtas.
+    
+    * compositing/shared-backing/clipping-and-shared-backing-expected.html: Added.
+    * compositing/shared-backing/clipping-and-shared-backing.html: Added.
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252070 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-11-05  Simon Fraser  <simon.fra...@apple.com>
+
+            Content can disappear with a combination of <video> with controls and clipping
+            https://bugs.webkit.org/show_bug.cgi?id=203834
+            rdar://problem/56559648
+
+            Reviewed by Zalan Bujtas.
+
+            <video> with controls triggered a bug where a backing-sharing layer also claimed
+            that it didn't need any backing store. RenderLayerCompositor::requiresOwnBackingStore()
+            could early-return with 'false' if a layer had an indirect compositing reason of "Clipping",
+            while also backing-sharing. We need to check for backing-sharing first.
+
+            Test: compositing/shared-backing/clipping-and-shared-backing.html
+
+            * rendering/RenderLayerBacking.cpp:
+            (WebCore::RenderLayerBacking::setBackingSharingLayers):
+            * rendering/RenderLayerCompositor.cpp:
+            (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):
+
+2019-11-07  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r252059. rdar://problem/56889717
 
     http/tests/media/track-in-band-hls-metadata.html sometimes crashes after r251626

Modified: tags/Safari-609.1.10.1/Source/WebCore/rendering/RenderLayerBacking.cpp (252284 => 252285)


--- tags/Safari-609.1.10.1/Source/WebCore/rendering/RenderLayerBacking.cpp	2019-11-09 00:51:50 UTC (rev 252284)
+++ tags/Safari-609.1.10.1/Source/WebCore/rendering/RenderLayerBacking.cpp	2019-11-09 00:51:54 UTC (rev 252285)
@@ -294,8 +294,11 @@
 
     clearBackingSharingLayerProviders(m_backingSharingLayers);
 
-    if (sharingLayers != m_backingSharingLayers)
+    if (sharingLayers != m_backingSharingLayers) {
+        if (sharingLayers.size())
+            setRequiresOwnBackingStore(true);
         setContentsNeedDisplay(); // This could be optimized to only repaint rects for changed layers.
+    }
 
     auto oldSharingLayers = WTFMove(m_backingSharingLayers);
     m_backingSharingLayers = WTFMove(sharingLayers);

Modified: tags/Safari-609.1.10.1/Source/WebCore/rendering/RenderLayerCompositor.cpp (252284 => 252285)


--- tags/Safari-609.1.10.1/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-11-09 00:51:50 UTC (rev 252284)
+++ tags/Safari-609.1.10.1/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-11-09 00:51:54 UTC (rev 252285)
@@ -2422,6 +2422,9 @@
         || renderer.hasBackdropFilter())
         return true;
 
+    if (layer.isComposited() && layer.backing()->hasBackingSharingLayers())
+        return true;
+
     if (layer.mustCompositeForIndirectReasons()) {
         IndirectCompositingReason reason = layer.indirectCompositingReason();
         return reason == IndirectCompositingReason::Overlap
@@ -2432,12 +2435,10 @@
             || reason == IndirectCompositingReason::Preserve3D; // preserve-3d has to create backing store to ensure that 3d-transformed elements intersect.
     }
 
+    // FIXME: We really need to keep track of the ancestor layer that has its own backing store.
     if (!ancestorCompositedBounds.contains(layerCompositedBoundsInAncestor))
         return true;
 
-    if (layer.isComposited() && layer.backing()->hasBackingSharingLayers())
-        return true;
-
     return false;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to