Title: [212152] trunk
Revision
212152
Author
simon.fra...@apple.com
Date
2017-02-10 14:40:18 -0800 (Fri, 10 Feb 2017)

Log Message

Tiled layers are sometimes left with some tiles when outside the viewport
https://bugs.webkit.org/show_bug.cgi?id=168104
Source/WebCore:

rdar://problem/30459055

Reviewed by Tim Horton.

When the coverage rect of a TiledBacking goes from a non-empty rect to an empty rect, we
shouldn't just early return from TileGrid::revalidateTiles(), otherwise we are left with some
tiles. Run through the function as normal, which will remove all the tiles for an empty coverage rect.

Minor logging changes.

Test: tiled-drawing/tile-coverage-iframe-to-zero-coverage.html

* platform/graphics/ca/TileGrid.cpp:
(WebCore::TileGrid::revalidateTiles):

LayoutTests:

Reviewed by Tim Horton.

* tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt: Added.
* tiled-drawing/tile-coverage-iframe-to-zero-coverage.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (212151 => 212152)


--- trunk/LayoutTests/ChangeLog	2017-02-10 22:36:12 UTC (rev 212151)
+++ trunk/LayoutTests/ChangeLog	2017-02-10 22:40:18 UTC (rev 212152)
@@ -1,3 +1,13 @@
+2017-02-09  Simon Fraser  <simon.fra...@apple.com>
+
+        Tiled layers are sometimes left with some tiles when outside the viewport
+        https://bugs.webkit.org/show_bug.cgi?id=168104
+
+        Reviewed by Tim Horton.
+
+        * tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt: Added.
+        * tiled-drawing/tile-coverage-iframe-to-zero-coverage.html: Added.
+
 2017-02-10  Joseph Pecoraro  <pecor...@apple.com>
 
         [Resource Timing] Enable Resource Timing by default in Tests

Added: trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt (0 => 212152)


--- trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt	2017-02-10 22:40:18 UTC (rev 212152)
@@ -0,0 +1,104 @@
+
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 858.00 5016.00)
+  (visible rect 0.00, 3000.00 785.00 x 585.00)
+  (coverage rect 0.00, 3000.00 785.00 x 585.00)
+  (intersects coverage rect 1)
+  (contentsScale 1.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 858.00 5016.00)
+      (contentsOpaque 1)
+      (visible rect 0.00, 3000.00 785.00 x 585.00)
+      (coverage rect 0.00, 3000.00 785.00 x 585.00)
+      (intersects coverage rect 1)
+      (contentsScale 1.00)
+      (tile cache coverage 0, 2560 858 x 1536)
+      (tile size 512 x 512)
+      (top left tile 0, 5 tiles grid 2 x 3)
+      (in window 1)
+      (children 1
+        (GraphicsLayer
+          (position 1.00 1.00)
+          (bounds 857.00 464.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -1.00, 2999.00 785.00 x 585.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+          (children 1
+            (GraphicsLayer
+              (position 32.00 32.00)
+              (visible rect 0.00, 0.00 0.00 x 0.00)
+              (coverage rect -33.00, 2967.00 785.00 x 585.00)
+              (intersects coverage rect 0)
+              (contentsScale 1.00)
+              (children 1
+                (GraphicsLayer
+                  (anchor 0.00 0.00)
+                  (bounds 800.00 400.00)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 0.00, 0.00 0.00 x 0.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                  (children 1
+                    (GraphicsLayer
+                      (visible rect 0.00, 0.00 0.00 x 0.00)
+                      (coverage rect 0.00, 0.00 0.00 x 0.00)
+                      (intersects coverage rect 0)
+                      (contentsScale 1.00)
+                      (children 1
+                        (GraphicsLayer
+                          (anchor 0.00 0.00)
+                          (bounds 2508.00 400.00)
+                          (visible rect 0.00, 0.00 0.00 x 0.00)
+                          (coverage rect 0.00, 0.00 0.00 x 0.00)
+                          (intersects coverage rect 0)
+                          (contentsScale 1.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 2508.00 400.00)
+                              (usingTiledLayer 1)
+                              (drawsContent 1)
+                              (visible rect 0.00, 0.00 0.00 x 0.00)
+                              (coverage rect 0.00, 0.00 0.00 x 0.00)
+                              (intersects coverage rect 0)
+                              (contentsScale 1.00)
+                              (tile cache coverage 0, 0 0 x 0)
+                              (tile size 512 x 512)
+                              (top left tile 0, 0 tiles grid 0 x 0)
+                              (in window 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 8.00 8.00)
+                                  (bounds 2500.00 200.00)
+                                  (usingTiledLayer 1)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                                  (coverage rect -8.00, -8.00 0.00 x 0.00)
+                                  (intersects coverage rect 0)
+                                  (contentsScale 1.00)
+                                  (tile cache coverage 0, 0 0 x 0)
+                                  (tile size 512 x 512)
+                                  (top left tile 0, 0 tiles grid 0 x 0)
+                                  (in window 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+

Added: trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage.html (0 => 212152)


--- trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage.html	                        (rev 0)
+++ trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage.html	2017-02-10 22:40:18 UTC (rev 212152)
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <style>
+        body {
+            height: 5000px;
+        }
+        iframe {
+            height: 400px;
+            width: 800px;
+            border: 5px solid black;
+            box-shadow: 0 0 5px black;
+            padding: 20px;
+        }
+    </style>
+    <script>
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function doTest()
+        {
+            setTimeout(function() {
+                window.scrollTo(0, 3000);
+                if (window.internals) {
+                    document.getElementById('layers').innerText = internals.layerTreeAsText(document,
+                        internals.LAYER_TREE_INCLUDES_VISIBLE_RECTS | internals.LAYER_TREE_INCLUDES_TILE_CACHES);
+                }
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            }, 0);
+        }
+        window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<iframe scrolling="no" srcdoc="<div style='width: 2500px; height: 200px; background-color: silver; will-change: transform'>Stuff here</div>"></iframe>
+<pre id="layers">Layer tree goes here</p>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (212151 => 212152)


--- trunk/Source/WebCore/ChangeLog	2017-02-10 22:36:12 UTC (rev 212151)
+++ trunk/Source/WebCore/ChangeLog	2017-02-10 22:40:18 UTC (rev 212152)
@@ -1,3 +1,22 @@
+2017-02-09  Simon Fraser  <simon.fra...@apple.com>
+
+        Tiled layers are sometimes left with some tiles when outside the viewport
+        https://bugs.webkit.org/show_bug.cgi?id=168104
+        rdar://problem/30459055
+
+        Reviewed by Tim Horton.
+
+        When the coverage rect of a TiledBacking goes from a non-empty rect to an empty rect, we
+        shouldn't just early return from TileGrid::revalidateTiles(), otherwise we are left with some
+        tiles. Run through the function as normal, which will remove all the tiles for an empty coverage rect.
+        
+        Minor logging changes.
+
+        Test: tiled-drawing/tile-coverage-iframe-to-zero-coverage.html
+
+        * platform/graphics/ca/TileGrid.cpp:
+        (WebCore::TileGrid::revalidateTiles):
+
 2017-02-10  Zalan Bujtas  <za...@apple.com>
 
         Mail hangs when removing multiple rows from large table.

Modified: trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp (212151 => 212152)


--- trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp	2017-02-10 22:36:12 UTC (rev 212151)
+++ trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp	2017-02-10 22:40:18 UTC (rev 212152)
@@ -352,11 +352,8 @@
     FloatRect coverageRect = m_controller.coverageRect();
     IntRect bounds = m_controller.bounds();
 
-    LOG_WITH_STREAM(Tiling, stream << "TileGrid " << this << " revalidateTiles: bounds " << bounds << " coverageRect" << coverageRect << " validation: " << validationPolicyAsString(validationPolicy));
+    LOG_WITH_STREAM(Tiling, stream << "TileGrid " << this << " (controller " << &m_controller << ") revalidateTiles: bounds " << bounds << " coverageRect" << coverageRect << " validation: " << validationPolicyAsString(validationPolicy));
 
-    if (coverageRect.isEmpty() || bounds.isEmpty())
-        return;
-
     FloatRect scaledRect(coverageRect);
     scaledRect.scale(m_scale);
     IntRect coverageRectInTileCoords(enclosingIntRect(scaledRect));
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to