<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[168871] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/168871">168871</a></dd>
<dt>Author</dt> <dd>bdakin@apple.com</dd>
<dt>Date</dt> <dd>2014-05-14 16:58:06 -0700 (Wed, 14 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Tile cache has way too many tiles when pinch-zoomed in
https://bugs.webkit.org/show_bug.cgi?id=132929
-and corresponding-
&lt;rdar://problem/16527172&gt;

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.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacTileControllermm">trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacTileGridh">trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacTileGridmm">trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168870 => 168871)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-14 23:36:34 UTC (rev 168870)
+++ trunk/Source/WebCore/ChangeLog        2014-05-14 23:58:06 UTC (rev 168871)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2014-05-14  Beth Dakin  &lt;bdakin@apple.com&gt;
+
+        Tile cache has way too many tiles when pinch-zoomed in
+        https://bugs.webkit.org/show_bug.cgi?id=132929
+        -and corresponding-
+        &lt;rdar://problem/16527172&gt;
+
+        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.
+
</ins><span class="cx"> 2014-05-14  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Mac] Search fields should not use centered look
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacTileControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm (168870 => 168871)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm        2014-05-14 23:36:34 UTC (rev 168870)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm        2014-05-14 23:58:06 UTC (rev 168871)
</span><span class="lines">@@ -463,22 +463,22 @@
</span><span class="cx"> 
</span><span class="cx"> int TileController::topMarginHeight() const
</span><span class="cx"> {
</span><del>-    return m_marginTop;
</del><ins>+    return m_marginTop / tileGrid().scale();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> int TileController::bottomMarginHeight() const
</span><span class="cx"> {
</span><del>-    return m_marginBottom;
</del><ins>+    return m_marginBottom / tileGrid().scale();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> int TileController::leftMarginWidth() const
</span><span class="cx"> {
</span><del>-    return m_marginLeft;
</del><ins>+    return m_marginLeft / tileGrid().scale();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> int TileController::rightMarginWidth() const
</span><span class="cx"> {
</span><del>-    return m_marginRight;
</del><ins>+    return m_marginRight / tileGrid().scale();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;PlatformCALayer&gt; TileController::createTileLayer(const IntRect&amp; tileRect, TileGrid&amp; grid)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacTileGridh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.h (168870 => 168871)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.h        2014-05-14 23:36:34 UTC (rev 168870)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.h        2014-05-14 23:58:06 UTC (rev 168871)
</span><span class="lines">@@ -99,7 +99,6 @@
</span><span class="cx">     void setTileNeedsDisplayInRect(const TileIndex&amp;, TileInfo&amp;, const IntRect&amp; repaintRectInTileCoords, const IntRect&amp; coverageRectInTileCoords);
</span><span class="cx"> 
</span><span class="cx">     IntRect rectForTileIndex(const TileIndex&amp;) const;
</span><del>-    void adjustRectAtTileIndexForMargin(const TileIndex&amp;, IntRect&amp;) const;
</del><span class="cx">     void getTileIndexRangeForRect(const IntRect&amp;, TileIndex&amp; topLeft, TileIndex&amp; bottomRight) const;
</span><span class="cx"> 
</span><span class="cx">     enum class CoverageType { PrimaryTiles, SecondaryTiles };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacTileGridmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.mm (168870 => 168871)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.mm        2014-05-14 23:36:34 UTC (rev 168870)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileGrid.mm        2014-05-14 23:58:06 UTC (rev 168871)
</span><span class="lines">@@ -213,50 +213,13 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TileGrid::adjustRectAtTileIndexForMargin(const TileIndex&amp; tileIndex, IntRect&amp; rect) const
-{
-    if (!m_controller.hasMargins())
-        return;
-
-    // This is a tile in the top margin.
-    if (m_controller.topMarginHeight() &amp;&amp; tileIndex.y() &lt; 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() &amp;&amp; tileIndex.x() &lt; 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() &amp;&amp; tileIndex.y() &gt; contentBottomRight.y())
-        rect.setHeight(m_controller.bottomMarginHeight());
-
-    // This is a tile in the right margin.
-    if (m_controller.rightMarginWidth()  &amp;&amp; tileIndex.x() &gt; contentBottomRight.x())
-        rect.setWidth(m_controller.rightMarginWidth());
-}
-
</del><span class="cx"> IntRect TileGrid::rectForTileIndex(const TileIndex&amp; tileIndex) const
</span><span class="cx"> {
</span><span class="cx">     IntSize tileSize = m_controller.tileSize();
</span><span class="cx">     IntRect rect(tileIndex.x() * tileSize.width(), tileIndex.y() * tileSize.height(), tileSize.width(), tileSize.height());
</span><span class="cx">     IntRect scaledBounds(m_controller.bounds());
</span><span class="cx">     scaledBounds.scale(m_scale);
</span><del>-
</del><span class="cx">     rect.intersect(scaledBounds);
</span><del>-
-    // 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);
-
</del><span class="cx">     return rect;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -270,12 +233,12 @@
</span><span class="cx">     if (clampedRect.x() &gt;= 0)
</span><span class="cx">         topLeft.setX(clampedRect.x() / tileSize.width());
</span><span class="cx">     else
</span><del>-        topLeft.setX(floorf((float)clampedRect.x() / m_controller.leftMarginWidth()));
</del><ins>+        topLeft.setX(floorf((float)clampedRect.x() / tileSize.width()));
</ins><span class="cx"> 
</span><span class="cx">     if (clampedRect.y() &gt;= 0)
</span><span class="cx">         topLeft.setY(clampedRect.y() / tileSize.height());
</span><span class="cx">     else
</span><del>-        topLeft.setY(floorf((float)clampedRect.y() / m_controller.topMarginHeight()));
</del><ins>+        topLeft.setY(floorf((float)clampedRect.y() / tileSize.height()));
</ins><span class="cx"> 
</span><span class="cx">     int bottomXRatio = ceil((float)clampedRect.maxX() / tileSize.width());
</span><span class="cx">     bottomRight.setX(std::max(bottomXRatio - 1, 0));
</span></span></pre>
</div>
</div>

</body>
</html>