Title: [201529] trunk
Revision
201529
Author
hy...@apple.com
Date
2016-05-31 14:57:39 -0700 (Tue, 31 May 2016)

Log Message

REGRESSION(r201040): Repainting of moving overflow:hidden objects is broken.
https://bugs.webkit.org/show_bug.cgi?id=158079

Reviewed by Zalan Bujtas.

Source/WebCore:

Added new test fast/repaint/overflow-hidden-movement.html

Change checkForRepaintDuringLayout() to only be true for self-painting layers
and not for all layers.

* rendering/RenderObject.cpp:
(WebCore::RenderObject::hasSelfPaintingLayer):
(WebCore::RenderObject::checkForRepaintDuringLayout):
* rendering/RenderObject.h:
(WebCore::RenderObject::hasSelfPaintingLayer):

LayoutTests:

* fast/repaint/overflow-hidden-movement-expected.txt: Added.
* fast/repaint/overflow-hidden-movement.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (201528 => 201529)


--- trunk/LayoutTests/ChangeLog	2016-05-31 21:56:50 UTC (rev 201528)
+++ trunk/LayoutTests/ChangeLog	2016-05-31 21:57:39 UTC (rev 201529)
@@ -1,3 +1,13 @@
+2016-05-31  Dave Hyatt  <hy...@apple.com>
+
+        REGRESSION(r201040): Repainting of moving overflow:hidden objects is broken.
+        https://bugs.webkit.org/show_bug.cgi?id=158079
+
+        Reviewed by Zalan Bujtas.
+
+        * fast/repaint/overflow-hidden-movement-expected.txt: Added.
+        * fast/repaint/overflow-hidden-movement.html: Added.
+
 2016-05-31  Eric Carlson  <eric.carl...@apple.com>
 
         [Mac] AirPlay route is sometimes reset when changing video.src

Added: trunk/LayoutTests/fast/repaint/overflow-hidden-movement-expected.txt (0 => 201529)


--- trunk/LayoutTests/fast/repaint/overflow-hidden-movement-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/repaint/overflow-hidden-movement-expected.txt	2016-05-31 21:57:39 UTC (rev 201529)
@@ -0,0 +1,7 @@
+(repaint rects
+  (rect 8 8 300 100)
+  (rect 8 108 300 200)
+  (rect 8 108 300 200)
+  (rect 8 8 300 300)
+)
+

Added: trunk/LayoutTests/fast/repaint/overflow-hidden-movement.html (0 => 201529)


--- trunk/LayoutTests/fast/repaint/overflow-hidden-movement.html	                        (rev 0)
+++ trunk/LayoutTests/fast/repaint/overflow-hidden-movement.html	2016-05-31 21:57:39 UTC (rev 201529)
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head></head>
+<body>
+<div style="height: 300px; overflow-y: hidden;" id="outerDiv">
+    <div style="height: 100px; width:300px; background: red; overflow:hidden" id="upperDiv"></div>
+    <div style="height: 200px; width:300px; background: green; overflow:hidden" id="lowerDiv"></div>
+</div>
+<script src="" type="text/_javascript_"></script>
+<script>
+    repaintTest = function() {
+        document.getElementById('upperDiv').style.height = '0';
+        document.getElementById('lowerDiv').style.height = '300px';
+    };
+    runRepaintTest();
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (201528 => 201529)


--- trunk/Source/WebCore/ChangeLog	2016-05-31 21:56:50 UTC (rev 201528)
+++ trunk/Source/WebCore/ChangeLog	2016-05-31 21:57:39 UTC (rev 201529)
@@ -1,3 +1,21 @@
+2016-05-31  Dave Hyatt  <hy...@apple.com>
+
+        REGRESSION(r201040): Repainting of moving overflow:hidden objects is broken.
+        https://bugs.webkit.org/show_bug.cgi?id=158079
+
+        Reviewed by Zalan Bujtas.
+
+        Added new test fast/repaint/overflow-hidden-movement.html
+
+        Change checkForRepaintDuringLayout() to only be true for self-painting layers
+        and not for all layers.
+
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::hasSelfPaintingLayer):
+        (WebCore::RenderObject::checkForRepaintDuringLayout):
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::hasSelfPaintingLayer):
+
 2016-05-31  Zalan Bujtas  <za...@apple.com>
 
         ShowRenderTree: Print location information for relative/sticky inlines.

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (201528 => 201529)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2016-05-31 21:56:50 UTC (rev 201528)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2016-05-31 21:57:39 UTC (rev 201529)
@@ -936,9 +936,19 @@
     return snappedIntRect(absoluteClippedOverflowRect());
 }
 
+bool RenderObject::hasSelfPaintingLayer() const
+{
+    if (!hasLayer())
+        return false;
+    auto* layer = downcast<RenderLayerModelObject>(*this).layer();
+    if (!layer)
+        return false;
+    return layer->isSelfPaintingLayer();
+}
+    
 bool RenderObject::checkForRepaintDuringLayout() const
 {
-    return !document().view()->needsFullRepaint() && !hasLayer() && everHadLayout();
+    return !document().view()->needsFullRepaint() && everHadLayout() && !hasSelfPaintingLayer();
 }
 
 LayoutRect RenderObject::rectWithOutlineForRepaint(const RenderLayerModelObject* repaintContainer, LayoutUnit outlineWidth) const

Modified: trunk/Source/WebCore/rendering/RenderObject.h (201528 => 201529)


--- trunk/Source/WebCore/rendering/RenderObject.h	2016-05-31 21:56:50 UTC (rev 201528)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2016-05-31 21:57:39 UTC (rev 201529)
@@ -507,6 +507,7 @@
     VisibleInViewportState visibleInViewportState() { return m_bitfields.hasRareData() ? rareData().visibleInViewportState() : VisibilityUnknown; }
 
     bool hasLayer() const { return m_bitfields.hasLayer(); }
+    bool hasSelfPaintingLayer() const;
 
     enum BoxDecorationState {
         NoBoxDecorations,
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to