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 ba56918..c057f32 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 06b52d3..9f356cd 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 17c44ca..f06b374 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 4aff67f..54fef6e 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));