Tile cache has way too many tiles when pinch-zoomed in
authorbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 May 2014 23:58:06 +0000 (23:58 +0000)
committerbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 May 2014 23:58:06 +0000 (23:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=132929
-and corresponding-
<rdar://problem/16527172>

Reviewed by Benjamin Poulain.

This patch makes the margin sizing functions return the set margin size scaled by
the TileGrid's scale. We also need to get rid of the old notion we used to have
that margin tiles might be allowed to have a different size than the other tiles.
We don't want that. They should have the normal margin size, but they should
affect the overall coverage area.

Scale by the TileGrid's scale.
* platform/graphics/ca/mac/TileController.mm:
(WebCore::TileController::topMarginHeight):
(WebCore::TileController::bottomMarginHeight):
(WebCore::TileController::leftMarginWidth):
(WebCore::TileController::rightMarginWidth):

Get rid of adjustRectAtTileIndexForMargin() since we do not want to ever do this
adjustment. Use tileSize instead of margin size for all sizing computations.
* platform/graphics/ca/mac/TileGrid.h:
* platform/graphics/ca/mac/TileGrid.mm:
(WebCore::TileGrid::rectForTileIndex):
(WebCore::TileGrid::getTileIndexRangeForRect):
(WebCore::TileGrid::adjustRectAtTileIndexForMargin): Deleted.

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

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/ca/mac/TileController.mm
Source/WebCore/platform/graphics/ca/mac/TileGrid.h
Source/WebCore/platform/graphics/ca/mac/TileGrid.mm

index ba56918aeb58c33d1b5775416c94a393c79e6640..c057f323bd22be4ab570f8cb8e9e3f477ef21e34 100644 (file)
@@ -1,3 +1,33 @@
+2014-05-14  Beth Dakin  <bdakin@apple.com>
+
+        Tile cache has way too many tiles when pinch-zoomed in
+        https://bugs.webkit.org/show_bug.cgi?id=132929
+        -and corresponding-
+        <rdar://problem/16527172>
+
+        Reviewed by Benjamin Poulain.
+
+        This patch makes the margin sizing functions return the set margin size scaled by 
+        the TileGrid's scale. We also need to get rid of the old notion we used to have
+        that margin tiles might be allowed to have a different size than the other tiles. 
+        We don't want that. They should have the normal margin size, but they should
+        affect the overall coverage area.
+
+        Scale by the TileGrid's scale.
+        * platform/graphics/ca/mac/TileController.mm:
+        (WebCore::TileController::topMarginHeight):
+        (WebCore::TileController::bottomMarginHeight):
+        (WebCore::TileController::leftMarginWidth):
+        (WebCore::TileController::rightMarginWidth):
+
+        Get rid of adjustRectAtTileIndexForMargin() since we do not want to ever do this 
+        adjustment. Use tileSize instead of margin size for all sizing computations.
+        * platform/graphics/ca/mac/TileGrid.h:
+        * platform/graphics/ca/mac/TileGrid.mm:
+        (WebCore::TileGrid::rectForTileIndex):
+        (WebCore::TileGrid::getTileIndexRangeForRect):
+        (WebCore::TileGrid::adjustRectAtTileIndexForMargin): Deleted.
+
 2014-05-14  Dean Jackson  <dino@apple.com>
 
         [Mac] Search fields should not use centered look
index 06b52d3152eac4165ef41868d958c76b44a11342..9f356cd1fe8aa6da18c6be14db16d0628a17767a 100644 (file)
@@ -463,22 +463,22 @@ bool TileController::hasVerticalMargins() const
 
 int TileController::topMarginHeight() const
 {
-    return m_marginTop;
+    return m_marginTop / tileGrid().scale();
 }
 
 int TileController::bottomMarginHeight() const
 {
-    return m_marginBottom;
+    return m_marginBottom / tileGrid().scale();
 }
 
 int TileController::leftMarginWidth() const
 {
-    return m_marginLeft;
+    return m_marginLeft / tileGrid().scale();
 }
 
 int TileController::rightMarginWidth() const
 {
-    return m_marginRight;
+    return m_marginRight / tileGrid().scale();
 }
 
 RefPtr<PlatformCALayer> TileController::createTileLayer(const IntRect& tileRect, TileGrid& grid)
index 17c44ca3ee2e08abc262f86f9d26c7271ccc69a3..f06b374d6523a1783e70d062f9811c5fc13f116d 100644 (file)
@@ -99,7 +99,6 @@ private:
     void setTileNeedsDisplayInRect(const TileIndex&, TileInfo&, const IntRect& repaintRectInTileCoords, const IntRect& coverageRectInTileCoords);
 
     IntRect rectForTileIndex(const TileIndex&) const;
-    void adjustRectAtTileIndexForMargin(const TileIndex&, IntRect&) const;
     void getTileIndexRangeForRect(const IntRect&, TileIndex& topLeft, TileIndex& bottomRight) const;
 
     enum class CoverageType { PrimaryTiles, SecondaryTiles };
index 4aff67ff99fbe66d00f80f6814a184c72af4c719..54fef6ecc895991faa3cc1ee9b012ba98d5fc387 100644 (file)
@@ -213,50 +213,13 @@ bool TileGrid::prepopulateRect(const FloatRect& rect)
     return true;
 }
 
-void TileGrid::adjustRectAtTileIndexForMargin(const TileIndex& tileIndex, IntRect& rect) const
-{
-    if (!m_controller.hasMargins())
-        return;
-
-    // This is a tile in the top margin.
-    if (m_controller.topMarginHeight() && tileIndex.y() < 0) {
-        rect.setY(tileIndex.y() * m_controller.topMarginHeight());
-        rect.setHeight(m_controller.topMarginHeight());
-    }
-
-    // This is a tile in the left margin.
-    if (m_controller.leftMarginWidth() && tileIndex.x() < 0) {
-        rect.setX(tileIndex.x() * m_controller.leftMarginWidth());
-        rect.setWidth(m_controller.leftMarginWidth());
-    }
-
-    TileIndex contentTopLeft;
-    TileIndex contentBottomRight;
-    getTileIndexRangeForRect(m_controller.boundsWithoutMargin(), contentTopLeft, contentBottomRight);
-
-    // This is a tile in the bottom margin.
-    if (m_controller.bottomMarginHeight() && tileIndex.y() > contentBottomRight.y())
-        rect.setHeight(m_controller.bottomMarginHeight());
-
-    // This is a tile in the right margin.
-    if (m_controller.rightMarginWidth()  && tileIndex.x() > contentBottomRight.x())
-        rect.setWidth(m_controller.rightMarginWidth());
-}
-
 IntRect TileGrid::rectForTileIndex(const TileIndex& tileIndex) const
 {
     IntSize tileSize = m_controller.tileSize();
     IntRect rect(tileIndex.x() * tileSize.width(), tileIndex.y() * tileSize.height(), tileSize.width(), tileSize.height());
     IntRect scaledBounds(m_controller.bounds());
     scaledBounds.scale(m_scale);
-
     rect.intersect(scaledBounds);
-
-    // These rect computations assume m_tileSize is the correct size to use. However, a tile in the margin area
-    // might be a different size depending on the size of the margins. So adjustRectAtTileIndexForMargin() will
-    // fix the rect we've computed to match the margin sizes if this tile is in the margins.
-    adjustRectAtTileIndexForMargin(tileIndex, rect);
-
     return rect;
 }
 
@@ -270,12 +233,12 @@ void TileGrid::getTileIndexRangeForRect(const IntRect& rect, TileIndex& topLeft,
     if (clampedRect.x() >= 0)
         topLeft.setX(clampedRect.x() / tileSize.width());
     else
-        topLeft.setX(floorf((float)clampedRect.x() / m_controller.leftMarginWidth()));
+        topLeft.setX(floorf((float)clampedRect.x() / tileSize.width()));
 
     if (clampedRect.y() >= 0)
         topLeft.setY(clampedRect.y() / tileSize.height());
     else
-        topLeft.setY(floorf((float)clampedRect.y() / m_controller.topMarginHeight()));
+        topLeft.setY(floorf((float)clampedRect.y() / tileSize.height()));
 
     int bottomXRatio = ceil((float)clampedRect.maxX() / tileSize.width());
     bottomRight.setX(std::max(bottomXRatio - 1, 0));