Use larger tiles when possible to reduce per-tile painting overhead
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Mar 2016 23:32:22 +0000 (23:32 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Mar 2016 23:32:22 +0000 (23:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=154985

Reviewed by Zalan Bujtas.

Source/WebCore:

r197541 inadvertently missed FrameView changes that push scrollability data
onto the TiledBacking, so didn't actually change behavior (hence the 512x512 tiles
in the failing tests).

Also remove m_tileSizeAtLastRevalidate from TileGrid; it's replaced by a simpler test.

* page/FrameView.cpp:
(WebCore::FrameView::addedOrRemovedScrollbar):
* platform/graphics/ca/TileGrid.cpp:
(WebCore::TileGrid::revalidateTiles):
(WebCore::TileGrid::TileGrid): Deleted.
* platform/graphics/ca/TileGrid.h:

LayoutTests:

* tiled-drawing/background-transparency-toggle-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt:
* tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt:
* tiled-drawing/tile-coverage-after-scroll-expected.txt:
* tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt:
* tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt:
* tiled-drawing/tile-coverage-slow-scrolling-expected.txt:
* tiled-drawing/tile-coverage-speculative-expected.txt:
* tiled-drawing/tile-size-unscrollable-expected.txt:
* tiled-drawing/tile-size-vertically-scrollable-expected.txt:
* tiled-drawing/visible-rect-content-inset-expected.txt:

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

26 files changed:
LayoutTests/ChangeLog
LayoutTests/tiled-drawing/background-transparency-toggle-expected.txt
LayoutTests/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt
LayoutTests/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt
LayoutTests/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt
LayoutTests/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt
LayoutTests/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt
LayoutTests/tiled-drawing/tile-coverage-after-scroll-expected.txt
LayoutTests/tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt
LayoutTests/tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt
LayoutTests/tiled-drawing/tile-coverage-slow-scrolling-expected.txt
LayoutTests/tiled-drawing/tile-coverage-speculative-expected.txt
LayoutTests/tiled-drawing/tile-size-unscrollable-expected.txt
LayoutTests/tiled-drawing/tile-size-vertically-scrollable-expected.txt
LayoutTests/tiled-drawing/visible-rect-content-inset-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/page/FrameView.cpp
Source/WebCore/platform/graphics/ca/TileGrid.cpp
Source/WebCore/platform/graphics/ca/TileGrid.h

index 2028083..8e305c8 100644 (file)
@@ -1,3 +1,32 @@
+2016-03-04  Simon Fraser  <simon.fraser@apple.com>
+
+        Use larger tiles when possible to reduce per-tile painting overhead
+        https://bugs.webkit.org/show_bug.cgi?id=154985
+
+        Reviewed by Zalan Bujtas.
+
+        * tiled-drawing/background-transparency-toggle-expected.txt:
+        * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt:
+        * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt:
+        * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt:
+        * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt:
+        * tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt:
+        * tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt:
+        * tiled-drawing/tile-coverage-after-scroll-expected.txt:
+        * tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt:
+        * tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt:
+        * tiled-drawing/tile-coverage-slow-scrolling-expected.txt:
+        * tiled-drawing/tile-coverage-speculative-expected.txt:
+        * tiled-drawing/tile-size-unscrollable-expected.txt:
+        * tiled-drawing/tile-size-vertically-scrollable-expected.txt:
+        * tiled-drawing/visible-rect-content-inset-expected.txt:
+
 2016-03-04  Ryan Haddad  <ryanhaddad@apple.com>
 
         Temporarily skip fast/table/table-overflow.html on ios-simulator
index 576b74e..5b81002 100644 (file)
@@ -8,8 +8,8 @@ Page tiles should be transparent if the body's background has alpha.
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (tile cache coverage 0, 0 800 x 600)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 800 x 600)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
@@ -21,8 +21,8 @@ Page tiles should be transparent if the body's background has alpha.
       (bounds 800.00 600.00)
       (backgroundColor #00000033)
       (tile cache coverage 0, 0 800 x 600)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 800 x 600)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
@@ -34,8 +34,8 @@ Page tiles should be transparent if the body's background has alpha.
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (tile cache coverage 0, 0 800 x 600)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 800 x 600)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
@@ -46,9 +46,9 @@ Page tiles should be transparent if the body's background has alpha.
     (GraphicsLayer
       (bounds 785.00 648.00)
       (contentsOpaque 1)
-      (tile cache coverage 0, 0 785 x 648)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile cache coverage 0, 0 785 x 600)
+      (tile size 800 x 600)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
index 9625c20..494019c 100644 (file)
@@ -25,8 +25,8 @@ PASS Page did not receive wheel events.
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 785 x 2048)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 4)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 4)
     )
   )
 )
index 9625c20..494019c 100644 (file)
@@ -25,8 +25,8 @@ PASS Page did not receive wheel events.
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 785 x 2048)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 4)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 4)
     )
   )
 )
index 19b94a3..41b032b 100644 (file)
@@ -25,8 +25,8 @@ PASS IFrame did not receive wheel events.
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 785 x 2048)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 4)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 4)
     )
   )
 )
index 19b94a3..41b032b 100644 (file)
@@ -25,8 +25,8 @@ PASS IFrame did not receive wheel events.
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 785 x 2048)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 4)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 4)
     )
   )
 )
index f037c14..b1187dc 100644 (file)
@@ -6,8 +6,8 @@
       (bounds 785.00 1700.00)
       (contentsOpaque 1)
       (tile cache coverage 0, 0 785 x 1024)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 2)
     )
   )
 )
index f6c8c0e..7764648 100644 (file)
@@ -16,8 +16,8 @@
         (GraphicsLayer
           (bounds 785.00 1600.00)
           (tile cache coverage 0, 0 785 x 1024)
-          (tile size 512 x 512)
-          (top left tile 0, 0 tiles grid 2 x 2)
+          (tile size 785 x 512)
+          (top left tile 0, 0 tiles grid 1 x 2)
         )
       )
     )
index 40c20f2..55935a3 100644 (file)
@@ -16,8 +16,8 @@
         (GraphicsLayer
           (bounds 785.00 1700.00)
           (tile cache coverage 0, 0 785 x 1024)
-          (tile size 512 x 512)
-          (top left tile 0, 0 tiles grid 2 x 2)
+          (tile size 785 x 512)
+          (top left tile 0, 0 tiles grid 1 x 2)
         )
       )
     )
index 40c20f2..55935a3 100644 (file)
@@ -16,8 +16,8 @@
         (GraphicsLayer
           (bounds 785.00 1700.00)
           (tile cache coverage 0, 0 785 x 1024)
-          (tile size 512 x 512)
-          (top left tile 0, 0 tiles grid 2 x 2)
+          (tile size 785 x 512)
+          (top left tile 0, 0 tiles grid 1 x 2)
         )
       )
     )
index ab47449..560fdd6 100644 (file)
@@ -16,8 +16,8 @@
         (GraphicsLayer
           (bounds 785.00 3700.00)
           (tile cache coverage 0, 0 785 x 1024)
-          (tile size 512 x 512)
-          (top left tile 0, 0 tiles grid 2 x 2)
+          (tile size 785 x 512)
+          (top left tile 0, 0 tiles grid 1 x 2)
         )
       )
     )
index 1643ec5..4746451 100644 (file)
@@ -16,8 +16,8 @@
         (GraphicsLayer
           (bounds 785.00 1516.00)
           (tile cache coverage 0, 0 785 x 1024)
-          (tile size 512 x 512)
-          (top left tile 0, 0 tiles grid 2 x 2)
+          (tile size 785 x 512)
+          (top left tile 0, 0 tiles grid 1 x 2)
         )
       )
     )
index 7c2275a..21305e9 100644 (file)
@@ -7,8 +7,8 @@
       (contentsOpaque 1)
       (backgroundColor #C0C0C0)
       (tile cache coverage 0, 0 785 x 1024)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 2)
     )
   )
 )
index fe5457f..7d5fa03 100644 (file)
@@ -43,9 +43,9 @@
       (coverage rect 0.00, 0.00 341.30 x 254.35)
       (intersects coverage rect 1)
       (contentsScale 2.30)
-      (tile cache coverage 0, 0 445 x 445)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile cache coverage 0, 0 341 x 445)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 2)
       (children 4
         (GraphicsLayer
           (position -4.00 -4.00)
index 08b9410..1857e4f 100644 (file)
@@ -14,8 +14,8 @@
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 2560 785 x 1536)
-      (tile size 512 x 512)
-      (top left tile 0, 5 tiles grid 2 x 3)
+      (tile size 785 x 512)
+      (top left tile 0, 5 tiles grid 1 x 3)
     )
   )
 )
index 08b9410..1857e4f 100644 (file)
@@ -14,8 +14,8 @@
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 2560 785 x 1536)
-      (tile size 512 x 512)
-      (top left tile 0, 5 tiles grid 2 x 3)
+      (tile size 785 x 512)
+      (top left tile 0, 5 tiles grid 1 x 3)
     )
   )
 )
index 3ea25e5..1de1202 100644 (file)
@@ -14,8 +14,8 @@
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 4096 785 x 925)
-      (tile size 512 x 512)
-      (top left tile 0, 8 tiles grid 2 x 2)
+      (tile size 785 x 512)
+      (top left tile 0, 8 tiles grid 1 x 2)
     )
   )
 )
index b68546b..d1ec668 100644 (file)
@@ -14,8 +14,8 @@
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 800 x 600)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 800 x 600)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
index 8871325..1f95d2b 100644 (file)
@@ -14,8 +14,8 @@
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 785 x 1024)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 2)
     )
   )
 )
index 22c71df..058faee 100644 (file)
@@ -6,8 +6,8 @@
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (tile cache coverage 0, 0 800 x 600)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 800 x 600)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
index cc9e29f..48b1aa2 100644 (file)
@@ -6,8 +6,8 @@
       (bounds 785.00 2021.00)
       (contentsOpaque 1)
       (tile cache coverage 0, 0 785 x 1024)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 2)
+      (tile size 785 x 512)
+      (top left tile 0, 0 tiles grid 1 x 2)
     )
   )
 )
index 1bfcf7b..eb05a90 100644 (file)
@@ -15,8 +15,8 @@ This test applies a content inset and then dumps the layer tree including visibl
       (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 800 x 500)
-      (tile size 512 x 512)
-      (top left tile 0, 0 tiles grid 2 x 1)
+      (tile size 800 x 512)
+      (top left tile 0, 0 tiles grid 1 x 1)
     )
   )
 )
index c4672e1..d171de0 100644 (file)
@@ -1,5 +1,25 @@
 2016-03-04  Simon Fraser  <simon.fraser@apple.com>
 
+        Use larger tiles when possible to reduce per-tile painting overhead
+        https://bugs.webkit.org/show_bug.cgi?id=154985
+
+        Reviewed by Zalan Bujtas.
+
+        r197541 inadvertently missed FrameView changes that push scrollability data
+        onto the TiledBacking, so didn't actually change behavior (hence the 512x512 tiles
+        in the failing tests).
+
+        Also remove m_tileSizeAtLastRevalidate from TileGrid; it's replaced by a simpler test.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::addedOrRemovedScrollbar):
+        * platform/graphics/ca/TileGrid.cpp:
+        (WebCore::TileGrid::revalidateTiles):
+        (WebCore::TileGrid::TileGrid): Deleted.
+        * platform/graphics/ca/TileGrid.h:
+
+2016-03-04  Simon Fraser  <simon.fraser@apple.com>
+
         Use BoxExtent instead of EdgeSet in TileController
         https://bugs.webkit.org/show_bug.cgi?id=155040
 
index f5e1ed1..5fe239b 100644 (file)
@@ -2465,6 +2465,17 @@ void FrameView::addedOrRemovedScrollbar()
         if (renderView->usesCompositing())
             renderView->compositor().frameViewDidAddOrRemoveScrollbars();
     }
+
+    if (auto* tiledBacking = this->tiledBacking()) {
+        TiledBacking::Scrollability scrollability = TiledBacking::NotScrollable;
+        if (horizontalScrollbar())
+            scrollability = TiledBacking::HorizontallyScrollable;
+
+        if (verticalScrollbar())
+            scrollability |= TiledBacking::VerticallyScrollable;
+
+        tiledBacking->setScrollability(scrollability);
+    }
 }
 
 static LayerFlushThrottleState::Flags determineLayerFlushThrottleState(Page& page)
index c662311..ebb8178 100644 (file)
@@ -46,7 +46,6 @@ TileGrid::TileGrid(TileController& controller)
     , m_containerLayer(*controller.rootLayer().createCompatibleLayer(PlatformCALayer::LayerTypeLayer, nullptr))
     , m_cohortRemovalTimer(*this, &TileGrid::cohortRemovalTimerFired)
     , m_tileSize(kDefaultTileSize, kDefaultTileSize)
-    , m_tileSizeAtLastRevalidate(m_tileSize)
 {
     m_containerLayer.get().setName(TileController::tileGridContainerLayerName());
 }
@@ -333,10 +332,10 @@ void TileGrid::revalidateTiles(TileValidationPolicy validationPolicy)
     double minimumRevalidationTimerDuration = std::numeric_limits<double>::max();
     bool needsTileRevalidation = false;
     
-    m_tileSize = m_controller.tileSize();
-    if (m_tileSize != m_tileSizeAtLastRevalidate) {
+    auto tileSize = m_controller.tileSize();
+    if (tileSize != m_tileSize) {
         removeAllTiles();
-        m_tileSizeAtLastRevalidate = m_tileSize;
+        m_tileSize = tileSize;
     }
 
     // Move tiles newly outside the coverage rect into the cohort map.
index faf2b80..30d4bc5 100644 (file)
@@ -167,7 +167,6 @@ private:
     RepaintCountMap m_tileRepaintCounts;
     
     IntSize m_tileSize;
-    IntSize m_tileSizeAtLastRevalidate;
 
     float m_scale { 1 };
 };