Title: [179147] trunk
Revision
179147
Author
commit-qu...@webkit.org
Date
2015-01-26 14:59:40 -0800 (Mon, 26 Jan 2015)

Log Message

Fix Border-radius clipping issue on a composited descendants
Source/WebCore:

https://bugs.webkit.org/show_bug.cgi?id=138551

Patch by Byungseon Shin <sun.s...@lge.com> on 2015-01-26
Reviewed by Simon Fraser.

Fix assertion in RenderLayerBacking::paintIntoLayer
by not checking out of sync with the GraphicsLayer heirarchy
in GraphicsLayerPaintChildClippingMask phase.

Test: compositing/clipping/border-radius-overflow-hidden-stacking-context.html

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::paintIntoLayer):

LayoutTests:

https://bugs.webkit.org/show_bug.cgi?id=138551

Patch by Byungseon Shin <sun.s...@lge.com> on 2015-01-26
Reviewed by Simon Fraser.

Ref test that clips composited descendant by stacking context with border-radius and overflow hidden element.

* compositing/clipping/border-radius-overflow-hidden-stacking-context-expected.txt: Added.
* compositing/clipping/border-radius-overflow-hidden-stacking-context.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (179146 => 179147)


--- trunk/LayoutTests/ChangeLog	2015-01-26 22:50:15 UTC (rev 179146)
+++ trunk/LayoutTests/ChangeLog	2015-01-26 22:59:40 UTC (rev 179147)
@@ -1,3 +1,15 @@
+2015-01-26  Byungseon Shin  <sun.s...@lge.com>
+
+        Fix Border-radius clipping issue on a composited descendants
+        https://bugs.webkit.org/show_bug.cgi?id=138551
+
+        Reviewed by Simon Fraser.
+
+        Ref test that clips composited descendant by stacking context with border-radius and overflow hidden element.
+
+        * compositing/clipping/border-radius-overflow-hidden-stacking-context-expected.txt: Added.
+        * compositing/clipping/border-radius-overflow-hidden-stacking-context.html: Added.
+
 2015-01-26  Benjamin Poulain  <benja...@webkit.org>
 
         Fix CSS Selector's tag name matching when mixing HTML and XML

Added: trunk/LayoutTests/compositing/clipping/border-radius-overflow-hidden-stacking-context-expected.txt (0 => 179147)


--- trunk/LayoutTests/compositing/clipping/border-radius-overflow-hidden-stacking-context-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/clipping/border-radius-overflow-hidden-stacking-context-expected.txt	2015-01-26 22:59:40 UTC (rev 179147)
@@ -0,0 +1,30 @@
+Test CSS clip with composited layers. Left and right sides should look the same. This test should not ASSERT in debug builds.
+
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 20.00 20.00)
+          (bounds 100.00 100.00)
+          (children 1
+            (GraphicsLayer
+              (bounds 100.00 100.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 200.00 200.00)
+                  (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+

Added: trunk/LayoutTests/compositing/clipping/border-radius-overflow-hidden-stacking-context.html (0 => 179147)


--- trunk/LayoutTests/compositing/clipping/border-radius-overflow-hidden-stacking-context.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/clipping/border-radius-overflow-hidden-stacking-context.html	2015-01-26 22:59:40 UTC (rev 179147)
@@ -0,0 +1,59 @@
+<html>
+<head>
+  <style type="text/css" media="screen">
+    .box {
+      position: absolute;
+      width: 100px;
+      height: 100px;
+      top: 20px;
+      left: 20px;
+      background-color: gray;
+      border-radius: 30%;
+      overflow: hidden;
+      z-index: 0;
+    }
+
+    .inner {
+      width: 200px;
+      height: 200px;
+      background-color: rgba(0, 0, 0, 0.2);
+    }
+
+    .composited {
+      -webkit-transform: translateZ(1px);
+    }
+
+    p {
+      margin-top: 140px;
+    }
+  </style>
+  <script type="text/_javascript_" charset="utf-8">
+    if (window.testRunner) {
+      testRunner.dumpAsText();
+      testRunner.waitUntilDone();
+    }
+
+    function doTest() {
+      if (window.testRunner) {
+        document.getElementById('layers').innerText = window.internals.layerTreeAsText(document);
+        testRunner.notifyDone();
+      }
+    }
+    window.addEventListener('load', doTest, false);
+  </script>
+</head>
+<body>
+  <div class="box">
+    <div class="composited inner">
+    </div>
+  </div>
+
+  <div class="box" style="left: 220px;">
+    <div class="inner">
+    </div>
+  </div>
+
+  <p>Test CSS clip with composited layers. Left and right sides should look the same. This test should not ASSERT in debug builds.</p>
+  <pre id="layers">In DRT, layer tree goes here.</pre>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (179146 => 179147)


--- trunk/Source/WebCore/ChangeLog	2015-01-26 22:50:15 UTC (rev 179146)
+++ trunk/Source/WebCore/ChangeLog	2015-01-26 22:59:40 UTC (rev 179147)
@@ -1,3 +1,19 @@
+2015-01-26  Byungseon Shin  <sun.s...@lge.com>
+
+        Fix Border-radius clipping issue on a composited descendants
+        https://bugs.webkit.org/show_bug.cgi?id=138551 
+
+        Reviewed by Simon Fraser.
+
+        Fix assertion in RenderLayerBacking::paintIntoLayer
+        by not checking out of sync with the GraphicsLayer heirarchy
+        in GraphicsLayerPaintChildClippingMask phase.
+
+        Test: compositing/clipping/border-radius-overflow-hidden-stacking-context.html
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::paintIntoLayer):
+
 2015-01-26  Chris Dumez  <cdu...@apple.com>
 
         Simplify RenderElement's shouldRepaintForImageAnimation()

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (179146 => 179147)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2015-01-26 22:50:15 UTC (rev 179146)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2015-01-26 22:59:40 UTC (rev 179147)
@@ -2189,7 +2189,7 @@
     const IntRect& paintDirtyRect, // In the coords of rootLayer.
     PaintBehavior paintBehavior, GraphicsLayerPaintingPhase paintingPhase)
 {
-    if (paintsIntoWindow() || paintsIntoCompositedAncestor()) {
+    if ((paintsIntoWindow() || paintsIntoCompositedAncestor()) && paintingPhase != GraphicsLayerPaintChildClippingMask) {
 #if !PLATFORM(IOS)
         // FIXME: Looks like the CALayer tree is out of sync with the GraphicsLayer heirarchy
         // when pages are restored from the PageCache.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to