<!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>[183354] trunk</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/183354">183354</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2015-04-26 10:24:40 -0700 (Sun, 26 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Expand compositing coverage rect when scrolling and animating
https://bugs.webkit.org/show_bug.cgi?id=144214
rdar://problem/20695926

Reviewed by Darin Adler.

Source/WebCore:

<a href="http://trac.webkit.org/projects/webkit/changeset/183300">r183300</a> added a secondary rect that gets mapped through graphics layers during
layer flushing, which represents a rect, in layer coordinates, that represents
the portion of this layer that's visible in the viewport.

This patch extends that rect based on scrolling and animating, with the extended
coverage rect being mapped into descendants (where it's used to determine whether
they should detach their backing store). This required moving the responsibility for
extending the coverage rect from TileController (where it was used to compute
tiled extent), to GraphicsLayerCA. Thus, GraphicsLayerCA now owns the concept
of coverage rect, and pushes it onto TileControllers.

Test: compositing/tiling/transform-origin-tiled.html

* platform/graphics/TiledBacking.h: Coverage rect is now pushed onto
TiledBacking from outside; new functions reflect that.
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): No need to pass
old visible rect to commitLayerChangesBeforeSublayers.
(WebCore::accumulatesTransform):
(WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush): Now calls computeVisibleAndCoverageRect(),
then adjustCoverageRect() which adjusts for scrolling and animations.
(WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect): Fetch the coverage rect from the
TransformState, but we can only use this if mapping it through various transforms didn't clamp
it (which can happen with severe rotations in perspective).
(WebCore::GraphicsLayerCA::adjustCoverageRect): If this layer represents the page tiled backing,
ask the TileController to do coverage adjustment (code which should move into here eventually).
For other tiled layers, do motion-based adjustment. This should really be done for all layers
(an animating non-tiled layer may contain a tiled layer).
(WebCore::GraphicsLayerCA::setVisibleAndCoverageRects): The VisibleRectChanged wasn't needed
any more; layers only react to changed in coverage rect now.
(WebCore::GraphicsLayerCA::recursiveCommitChanges): If adjustCoverageRect() changed the
coverage rect, here we push the new rect back into the TransformState so it will affect
descendants.
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
(WebCore::GraphicsLayerCA::updateCoverage): Coverage and backing store attachment go
hand-in-hand now.
(WebCore::GraphicsLayerCA::changeLayerTypeTo):
(WebCore::GraphicsLayerCA::computeVisibleRect): Deleted.
(WebCore::GraphicsLayerCA::updateBackingStoreAttachment): Deleted.
(WebCore::GraphicsLayerCA::updateVisibleRect): Deleted.
* platform/graphics/ca/GraphicsLayerCA.h:
* platform/graphics/ca/TileController.cpp:
(WebCore::TileController::setVisibleRect): Visible rect is only used for scroll performance
logging now.
(WebCore::TileController::setCoverageRect):
(WebCore::TileController::tilesWouldChangeForCoverageRect):
(WebCore::TileController::revalidateTiles):
(WebCore::TileController::boundsForSize): This is required because when computeTileCoverageRect()
is called at the top of committing the owning layer, we haven't yet pushed a new size to the
underlying platform layer (which TileController::bounds() consults).
(WebCore::TileController::bounds):
(WebCore::TileController::computeTileCoverageRect): Have to push the new size in, since the
underlying layer hasn't been updated yet.
(WebCore::TileController::didRevalidateTiles):
(WebCore::TileController::tilesWouldChangeForVisibleRect): Deleted.
* platform/graphics/ca/TileController.h:
* platform/graphics/ca/TileCoverageMap.cpp:
(WebCore::TileCoverageMap::TileCoverageMap): Add a layer to the tile map that shows
a dark blue outline for the coverage rect.
(WebCore::TileCoverageMap::update): Fix some minor issues with map position when top
content inset is non-zero.
* platform/graphics/ca/TileCoverageMap.h:
* platform/graphics/ca/TileGrid.cpp: Everything is in terms of coverage rect now.
(WebCore::TileGrid::tilesWouldChangeForCoverageRect):
(WebCore::TileGrid::revalidateTiles):
(WebCore::TileGrid::tilesWouldChangeForVisibleRect): Deleted.
* platform/graphics/ca/TileGrid.h:
* platform/graphics/transforms/TransformState.cpp:
(WebCore::TransformState::operator=):
(WebCore::TransformState::mappedQuad): Pass direction into mapQuad().
(WebCore::TransformState::mappedSecondaryQuad): Ditto.
(WebCore::TransformState::setLastPlanarSecondaryQuad): This function allows a caller
to pass in a secondary quad, and get it mapped into the coordinate space of the last
&quot;flattening&quot; state (since the TransformState may have in-flight XY offset, or transform).
This mapping is achieved by re-using mapQuad(), but in the inverse direction.
(WebCore::TransformState::mapQuad): Make direction a parameter.
(WebCore::TransformState::flattenWithTransform): This code omitted to map the secondary
quad. Failure was detected by tests.
* platform/graphics/transforms/TransformState.h:
(WebCore::TransformState::isMappingSecondaryQuad):
(WebCore::TransformState::direction):
(WebCore::TransformState::inverseDirection):
(WebCore::TransformState::lastPlanarSecondaryQuad): Deleted.

LayoutTests:

New baselines for tests dumping layer output, with coverage rect being affected
by this changeset. One new test for tiling a layer inside overflow:hidden with transform-origin.

* compositing/contents-scale/animating-expected.txt:
* compositing/contents-scale/rounded-contents-scale-expected.txt:
* compositing/contents-scale/scaled-ancestor-expected.txt:
* compositing/contents-scale/simple-scale-expected.txt:
* compositing/tiling/transform-origin-tiled.html: Added.
* platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt:
* platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
* platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt:
* platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt:
* platform/mac-wk2/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt:
* platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt:
* platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt:
* platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt:
* platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt:
* platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt:
* platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt:
* platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
* platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt:
* platform/mac/compositing/visible-rect/2d-transformed-expected.txt:
* platform/mac/compositing/visible-rect/3d-transformed-expected.txt:
* platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt:
* platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt:
* platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
* platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt:
* platform/mac/compositing/visible-rect/scrolled-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscompositingcontentsscaleanimatingexpectedtxt">trunk/LayoutTests/compositing/contents-scale/animating-expected.txt</a></li>
<li><a href="#trunkLayoutTestscompositingcontentsscaleroundedcontentsscaleexpectedtxt">trunk/LayoutTests/compositing/contents-scale/rounded-contents-scale-expected.txt</a></li>
<li><a href="#trunkLayoutTestscompositingcontentsscalescaledancestorexpectedtxt">trunk/LayoutTests/compositing/contents-scale/scaled-ancestor-expected.txt</a></li>
<li><a href="#trunkLayoutTestscompositingcontentsscalesimplescaleexpectedtxt">trunk/LayoutTests/compositing/contents-scale/simple-scale-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingtilingrotatedtiledclampedexpectedtxt">trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingtilingrotatedtiledpreserve3dclampedexpectedtxt">trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingtilingtilecachezoomedexpectedtxt">trunk/LayoutTests/platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerect2dtransformedexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/2d-transformed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerect3dtransformedexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transformed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerectclippedbyviewportexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerectclippedvisiblerectexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerectiframeandlayersexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerectiframenolayersexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmaccompositingvisiblerectscrolledexpectedtxt">trunk/LayoutTests/platform/mac/compositing/visible-rect/scrolled-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2compositingtilingrotatedtiledclampedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2compositingtilingrotatedtiledpreserve3dclampedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2compositingtilingtilecachezoomedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2compositingvisiblerectiframenolayersexpectedtxt">trunk/LayoutTests/platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatcheddivexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatcheddivwithhandlerexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatchedmainframeexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatchedmainframewithhandlerexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchediframeexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchediframewithhandlerexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchedmainframeexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchedmainframewithhandlerexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedmainframeexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedmainframewithhandlerexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedselectexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedselectwithhandlerexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingfixedfourbarszoomedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingsimpledocumentwithmargintilesexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingtilesizeslowzoomedexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingtileddrawingscrollpositionpagecacherestorationexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingtileddrawingzoomexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingtileddrawingzoomscrolledexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsTiledBackingh">trunk/Source/WebCore/platform/graphics/TiledBacking.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileControllercpp">trunk/Source/WebCore/platform/graphics/ca/TileController.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileControllerh">trunk/Source/WebCore/platform/graphics/ca/TileController.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileCoverageMapcpp">trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileCoverageMaph">trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileGridcpp">trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileGridh">trunk/Source/WebCore/platform/graphics/ca/TileGrid.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstransformsTransformStatecpp">trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstransformsTransformStateh">trunk/Source/WebCore/platform/graphics/transforms/TransformState.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscompositingtilingtransformorigintiledexpectedtxt">trunk/LayoutTests/compositing/tiling/transform-origin-tiled-expected.txt</a></li>
<li><a href="#trunkLayoutTestscompositingtilingtransformorigintiledhtml">trunk/LayoutTests/compositing/tiling/transform-origin-tiled.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/ChangeLog        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -1,3 +1,52 @@
</span><ins>+2015-04-25  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Expand compositing coverage rect when scrolling and animating
+        https://bugs.webkit.org/show_bug.cgi?id=144214
+        rdar://problem/20695926
+
+        Reviewed by Darin Adler.
+        
+        New baselines for tests dumping layer output, with coverage rect being affected
+        by this changeset. One new test for tiling a layer inside overflow:hidden with transform-origin.
+
+        * compositing/contents-scale/animating-expected.txt:
+        * compositing/contents-scale/rounded-contents-scale-expected.txt:
+        * compositing/contents-scale/scaled-ancestor-expected.txt:
+        * compositing/contents-scale/simple-scale-expected.txt:
+        * compositing/tiling/transform-origin-tiled.html: Added.
+        * platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt:
+        * platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
+        * platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt:
+        * platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt:
+        * platform/mac-wk2/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt:
+        * platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt:
+        * platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt:
+        * platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt:
+        * platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt:
+        * platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt:
+        * platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt:
+        * platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
+        * platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt:
+        * platform/mac/compositing/visible-rect/2d-transformed-expected.txt:
+        * platform/mac/compositing/visible-rect/3d-transformed-expected.txt:
+        * platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt:
+        * platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt:
+        * platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
+        * platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt:
+        * platform/mac/compositing/visible-rect/scrolled-expected.txt:
+
</ins><span class="cx"> 2015-04-25  Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Mark some tests that take &gt;10 seconds on debug bots as slow.
</span></span></pre></div>
<a id="trunkLayoutTestscompositingcontentsscaleanimatingexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/compositing/contents-scale/animating-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/contents-scale/animating-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/compositing/contents-scale/animating-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (transform [1.50 0.00 0.00 0.00] [0.00 1.50 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">           (visible rect 0.00, 0.00 100.00 x 100.00)
</span><del>-          (coverage rect 0.00, 0.00 800.00 x 600.00)
</del><ins>+          (coverage rect -12.00, -6.67 533.33 x 400.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestscompositingcontentsscaleroundedcontentsscaleexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/compositing/contents-scale/rounded-contents-scale-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/contents-scale/rounded-contents-scale-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/compositing/contents-scale/rounded-contents-scale-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 -200.00 1.00])
</span><span class="cx">               (visible rect 0.00, 0.00 102.00 x 102.00)
</span><del>-              (coverage rect -8.00, -8.00 800.00 x 600.00)
</del><ins>+              (coverage rect -11.20, -11.20 1120.00 x 840.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 -100.00 1.00])
</span><span class="cx">               (visible rect 0.00, 0.00 102.00 x 102.00)
</span><del>-              (coverage rect -8.00, -8.00 800.00 x 600.00)
</del><ins>+              (coverage rect -9.60, -91.60 960.00 x 720.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">               (contentsOpaque 1)
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (visible rect 0.00, 0.00 102.00 x 102.00)
</span><del>-              (coverage rect -8.00, -8.00 800.00 x 600.00)
</del><ins>+              (coverage rect -8.00, -172.00 800.00 x 600.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 50.00 1.00])
</span><span class="cx">               (visible rect 0.00, 0.00 102.00 x 102.00)
</span><del>-              (coverage rect -8.00, -8.00 800.00 x 600.00)
</del><ins>+              (coverage rect -7.20, -253.20 720.00 x 540.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 100.00 1.00])
</span><span class="cx">               (visible rect 0.00, 0.00 102.00 x 102.00)
</span><del>-              (coverage rect -8.00, -8.00 800.00 x 600.00)
</del><ins>+              (coverage rect -6.40, -334.40 640.00 x 480.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 150.00 1.00])
</span><span class="cx">               (visible rect 0.00, 0.00 102.00 x 4.40)
</span><del>-              (coverage rect -8.00, -8.00 800.00 x 600.00)
</del><ins>+              (coverage rect -5.60, -415.60 560.00 x 420.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span></span></pre></div>
<a id="trunkLayoutTestscompositingcontentsscalescaledancestorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/compositing/contents-scale/scaled-ancestor-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/contents-scale/scaled-ancestor-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/compositing/contents-scale/scaled-ancestor-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (transform [2.00 0.00 0.00 0.00] [0.00 2.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">           (visible rect 0.00, 0.00 102.00 x 102.00)
</span><del>-          (coverage rect 0.00, 0.00 800.00 x 600.00)
</del><ins>+          (coverage rect -4.00, -4.00 400.00 x 300.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">           (children 1
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx">               (contentsOpaque 1)
</span><span class="cx">               (drawsContent 1)
</span><span class="cx">               (visible rect 0.00, 0.00 100.00 x 100.00)
</span><del>-              (coverage rect -11.00, -11.00 800.00 x 600.00)
</del><ins>+              (coverage rect -15.00, -15.00 400.00 x 300.00)
</ins><span class="cx">               (intersects coverage rect 1)
</span><span class="cx">               (contentsScale 1.00)
</span><span class="cx">             )
</span></span></pre></div>
<a id="trunkLayoutTestscompositingcontentsscalesimplescaleexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/compositing/contents-scale/simple-scale-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/contents-scale/simple-scale-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/compositing/contents-scale/simple-scale-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (transform [2.00 0.00 0.00 0.00] [0.00 2.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">           (visible rect 0.00, 0.00 100.00 x 100.00)
</span><del>-          (coverage rect 0.00, 0.00 800.00 x 600.00)
</del><ins>+          (coverage rect -9.00, -5.00 400.00 x 300.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestscompositingtilingtransformorigintiledexpectedtxtfromrev183353trunkLayoutTestsplatformmacwk2compositingtilingrotatedtiledclampedexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/compositing/tiling/transform-origin-tiled-expected.txt (from rev 183353, trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt) (0 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/tiling/transform-origin-tiled-expected.txt                                (rev 0)
+++ trunk/LayoutTests/compositing/tiling/transform-origin-tiled-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 600.00)
+  (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
+  (contentsScale 1.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (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)
+      (children 1
+        (GraphicsLayer
+          (position 58.00 50.00)
+          (bounds 502.00 302.00)
+          (visible rect 0.00, 0.00 502.00 x 302.00)
+          (coverage rect -58.00, -50.00 800.00 x 600.00)
+          (intersects coverage rect 1)
+          (contentsScale 1.00)
+          (children 1
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 500.00 300.00)
+              (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
+              (visible rect 0.00, 0.00 500.00 x 300.00)
+              (coverage rect 0.00, 0.00 500.00 x 300.00)
+              (intersects coverage rect 1)
+              (contentsScale 1.00)
+              (children 1
+                (GraphicsLayer
+                  (position -1250.00 0.00)
+                  (anchor 0.54 0.50)
+                  (bounds 2800.00 300.00)
+                  (usingTiledLayer 1)
+                  (contentsOpaque 1)
+                  (drawsContent 1)
+                  (visible rect 1250.00, 0.00 500.00 x 300.00)
+                  (coverage rect 1250.00, 0.00 500.00 x 300.00)
+                  (intersects coverage rect 1)
+                  (contentsScale 1.00)
+                  (tile cache coverage 1024, 0 1024 x 300)
+                  (tile size 512 x 512)
+                  (top left tile 2, 0 tiles grid 2 x 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
</ins></span></pre></div>
<a id="trunkLayoutTestscompositingtilingtransformorigintiledhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/tiling/transform-origin-tiled.html (0 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/tiling/transform-origin-tiled.html                                (rev 0)
+++ trunk/LayoutTests/compositing/tiling/transform-origin-tiled.html        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        body {
+            overflow: hidden; /* hide body scrollbars */
+        }
+        .scene {
+            position: relative;
+            -webkit-perspective: 600px;
+            width: 500px;
+            height: 300px;
+            margin: 50px;
+            overflow: hidden;
+            border: 1px solid black;
+        }
+        .tiled {
+            position: absolute;
+            left: -1250px;
+            height: 300px;
+            width: 2500px;
+            background-color: silver;
+            border-right: 300px solid green;
+            -webkit-transform: translateZ(0);
+            -webkit-transform-origin: 1500px 50%;
+        }
+        
+        #layers {
+            opacity: 0; /* hide from pixel result */
+        }
+    &lt;/style&gt;
+    &lt;script&gt;
+        if (window.testRunner)
+            testRunner.dumpAsText(true);
+
+        function doTest()
+        {
+            if (window.internals) {
+                document.getElementById('layers').innerText = internals.layerTreeAsText(document,
+                    internals.LAYER_TREE_INCLUDES_VISIBLE_RECTS | internals.LAYER_TREE_INCLUDES_TILE_CACHES);
+            }
+        }
+    
+        window.addEventListener('load', doTest, false);
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;div class=&quot;scene&quot;&gt;
+    &lt;div class=&quot;tiled&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;pre id=&quot;layers&quot;&gt;Layer tree goes here&lt;/p&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingtilingrotatedtiledclampedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">                   (drawsContent 1)
</span><span class="cx">                   (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 2800.00 x 300.00)
</span><del>-                  (coverage rect 0.00, 0.00 500.00 x 300.00)
</del><ins>+                  (coverage rect 0.00, 0.00 2800.00 x 300.00)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                   (tile cache coverage 0, 0 2800 x 300)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingtilingrotatedtiledpreserve3dclampedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">                       (drawsContent 1)
</span><span class="cx">                       (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">                       (visible rect 0.00, 0.00 2800.00 x 300.00)
</span><del>-                      (coverage rect -1562500.00, -1562500.00 1563571.88 x 1562694.63)
</del><ins>+                      (coverage rect 0.00, 0.00 2800.00 x 300.00)
</ins><span class="cx">                       (intersects coverage rect 1)
</span><span class="cx">                       (contentsScale 1.00)
</span><span class="cx">                       (tile cache coverage 0, 0 2800 x 300)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingtilingtilecachezoomedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (transform [1.60 0.00 0.00 0.00] [0.00 1.60 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">       (visible rect 0.00, 0.00 490.63 x 365.63)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 490.63 x 365.63)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.60)
</span><span class="cx">       (children 1
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">           (contentsOpaque 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 0.00, 0.00 482.63 x 357.63)
</span><del>-          (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+          (coverage rect -8.00, -8.00 490.63 x 365.63)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.60)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerect2dtransformedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/2d-transformed-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/2d-transformed-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/2d-transformed-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx">                   (contentsOpaque 1)
</span><span class="cx">                   (transform [0.71 0.71 0.00 0.00] [-0.71 0.71 0.00 0.00] [0.00 0.00 1.00 0.00] [150.00 0.00 0.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 200.00 x 200.00)
</span><del>-                  (coverage rect 0.00, 0.00 500.00 x 200.00)
</del><ins>+                  (coverage rect -147.49, -147.49 494.97 x 494.97)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                 )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerect3dtransformedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transformed-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transformed-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transformed-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx">                   (contentsOpaque 1)
</span><span class="cx">                   (transform [1.00 0.00 0.00 0.00] [0.00 0.71 0.71 0.00] [0.00 -0.71 0.71 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 220.62 x 218.46)
</span><del>-                  (coverage rect 0.00, 0.00 200.00 x 200.00)
</del><ins>+                  (coverage rect -6.51, -51.46 227.13 x 269.92)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                 )
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">                   (contentsOpaque 1)
</span><span class="cx">                   (transform [0.71 0.00 0.71 0.00] [0.00 1.00 0.00 0.00] [-0.71 0.00 0.71 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 218.46 x 220.62)
</span><del>-                  (coverage rect 0.00, 0.00 200.00 x 200.00)
</del><ins>+                  (coverage rect -51.46, -6.51 269.92 x 227.13)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                 )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerectclippedbyviewportexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx">           (contentsOpaque 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 100.00, 120.00 100.00 x 80.00)
</span><del>-          (coverage rect 0.00, 0.00 800.00 x 600.00)
</del><ins>+          (coverage rect 100.00, 120.00 800.00 x 600.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx">           (contentsOpaque 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 100.00, 0.00 100.00 x 200.00)
</span><del>-          (coverage rect 0.00, 0.00 800.00 x 600.00)
</del><ins>+          (coverage rect 100.00, -200.00 800.00 x 600.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerectclippedvisiblerectexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx">                   (contentsOpaque 1)
</span><span class="cx">                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">                   (visible rect 100.00, 0.00 100.00 x 200.00)
</span><del>-                  (coverage rect 0.00, 0.00 500.00 x 200.00)
</del><ins>+                  (coverage rect 100.00, 0.00 500.00 x 200.00)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                 )
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">                   (contentsOpaque 1)
</span><span class="cx">                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 200.00 x 200.00)
</span><del>-                  (coverage rect 0.00, 0.00 500.00 x 200.00)
</del><ins>+                  (coverage rect -150.00, 0.00 500.00 x 200.00)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                 )
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">                   (contentsOpaque 1)
</span><span class="cx">                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 100.00 x 200.00)
</span><del>-                  (coverage rect 0.00, 0.00 500.00 x 200.00)
</del><ins>+                  (coverage rect -400.00, 0.00 500.00 x 200.00)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                 )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerectiframeandlayersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">                                   (drawsContent 1)
</span><span class="cx">                                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">                                   (visible rect 0.00, 0.00 100.00 x 127.00)
</span><del>-                                  (coverage rect 0.00, 0.00 285.00 x 135.00)
</del><ins>+                                  (coverage rect -8.00, -8.00 285.00 x 135.00)
</ins><span class="cx">                                   (intersects coverage rect 1)
</span><span class="cx">                                   (contentsScale 1.00)
</span><span class="cx">                                 )
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx">           (contentsOpaque 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 0.00, 0.00 200.00 x 200.00)
</span><del>-          (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+          (coverage rect -8.00, -226.00 785.00 x 585.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerectiframenolayersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -21,7 +21,7 @@
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 2.00, 92.00 98.00 x 135.00)
</span><del>-          (coverage rect 10.00, 100.00 285.00 x 135.00)
</del><ins>+          (coverage rect 2.00, 92.00 285.00 x 135.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaccompositingvisiblerectscrolledexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/scrolled-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/compositing/visible-rect/scrolled-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/scrolled-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -20,7 +20,7 @@
</span><span class="cx">           (contentsOpaque 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 17.00, 200.00 183.00 x 300.00)
</span><del>-          (coverage rect 25.00, 200.00 785.00 x 585.00)
</del><ins>+          (coverage rect 17.00, 200.00 785.00 x 585.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2compositingtilingrotatedtiledclampedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx">                   (drawsContent 1)
</span><span class="cx">                   (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">                   (visible rect 0.00, 0.00 2800.00 x 300.00)
</span><del>-                  (coverage rect 0.00, 0.00 500.00 x 300.00)
</del><ins>+                  (coverage rect 0.00, 0.00 2800.00 x 300.00)
</ins><span class="cx">                   (intersects coverage rect 1)
</span><span class="cx">                   (contentsScale 1.00)
</span><span class="cx">                   (tile cache coverage 0, 0 2800 x 300)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2compositingtilingrotatedtiledpreserve3dclampedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">                       (drawsContent 1)
</span><span class="cx">                       (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">                       (visible rect 0.00, 0.00 2800.00 x 300.00)
</span><del>-                      (coverage rect -1562500.00, -1562500.00 1563571.88 x 1562694.63)
</del><ins>+                      (coverage rect 0.00, 0.00 2800.00 x 300.00)
</ins><span class="cx">                       (intersects coverage rect 1)
</span><span class="cx">                       (contentsScale 1.00)
</span><span class="cx">                       (tile cache coverage 0, 0 2800 x 300)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2compositingtilingtilecachezoomedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (transform [1.60 0.00 0.00 0.00] [0.00 1.60 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">       (visible rect 0.00, 0.00 490.63 x 365.63)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 490.63 x 365.63)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.60)
</span><span class="cx">       (tile cache coverage 0, 0 640 x 640)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx">           (contentsOpaque 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 0.00, 0.00 482.63 x 357.63)
</span><del>-          (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+          (coverage rect -8.00, -8.00 490.63 x 365.63)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.60)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2compositingvisiblerectiframenolayersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
</span><span class="cx">           (visible rect 2.00, 92.00 98.00 x 135.00)
</span><del>-          (coverage rect 10.00, 100.00 285.00 x 135.00)
</del><ins>+          (coverage rect 2.00, 92.00 285.00 x 135.00)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 1.00)
</span><span class="cx">         )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatcheddivexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">       (bounds 2008.00 2326.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatcheddivwithhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">       (bounds 2008.00 2341.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatchedmainframeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx">       (bounds 2008.00 2311.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 70.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 70.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolldivlatchedmainframewithhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">       (bounds 2008.00 2326.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 70.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 70.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchediframeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx">       (bounds 785.00 2326.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 600.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 600.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1800.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 785 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchediframewithhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx">       (bounds 785.00 2341.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 600.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 600.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1800.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 785 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchedmainframeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx">       (bounds 785.00 2311.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 70.00 785.00 x 600.00)
</span><del>-      (coverage rect 0.00, 70.00 785.00 x 600.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1800.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 785 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrolliframelatchedmainframewithhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx">       (bounds 785.00 2326.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 70.00 785.00 x 600.00)
</span><del>-      (coverage rect 0.00, 70.00 785.00 x 600.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1800.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 785 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedmainframeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx">       (bounds 2008.00 2311.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 70.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 70.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedmainframewithhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx">       (bounds 2008.00 2326.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 70.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 70.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedselectexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx">       (bounds 2008.00 2326.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfastscrollselectlatchedselectwithhandlerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx">       (bounds 2008.00 2341.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 0, 0 2008 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingfixedfourbarszoomedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (transform [2.30 0.00 0.00 0.00] [0.00 2.30 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">       (visible rect 0.00, 0.00 341.30 x 254.35)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 341.30 x 254.35)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 2.30)
</span><span class="cx">       (tile cache coverage 0, 0 445 x 445)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx">           (bounds 786.00 82.00)
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (visible rect 4.00, 4.00 341.30 x 78.00)
</span><del>-          (coverage rect 4.00, 4.00 785.00 x 585.00)
</del><ins>+          (coverage rect 4.00, 4.00 341.30 x 254.35)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 2.30)
</span><span class="cx">         )
</span><span class="lines">@@ -61,7 +61,7 @@
</span><span class="cx">           (bounds 182.00 332.00)
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (visible rect 0.00, 0.00 182.00 x 58.35)
</span><del>-          (coverage rect -6.00, -196.00 785.00 x 585.00)
</del><ins>+          (coverage rect -6.00, -196.00 341.30 x 254.35)
</ins><span class="cx">           (intersects coverage rect 1)
</span><span class="cx">           (contentsScale 2.30)
</span><span class="cx">         )
</span><span class="lines">@@ -70,8 +70,8 @@
</span><span class="cx">           (bounds 182.00 332.00)
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (visible rect 0.00, 0.00 0.00 x 0.00)
</span><del>-          (coverage rect -597.00, -196.00 785.00 x 585.00)
-          (intersects coverage rect 1)
</del><ins>+          (coverage rect -597.00, -196.00 341.30 x 254.35)
+          (intersects coverage rect 0)
</ins><span class="cx">           (contentsScale 2.30)
</span><span class="cx">         )
</span><span class="cx">         (GraphicsLayer
</span><span class="lines">@@ -79,8 +79,8 @@
</span><span class="cx">           (bounds 786.00 82.00)
</span><span class="cx">           (drawsContent 1)
</span><span class="cx">           (visible rect 0.00, 0.00 0.00 x 0.00)
</span><del>-          (coverage rect 4.00, -497.00 785.00 x 585.00)
-          (intersects coverage rect 1)
</del><ins>+          (coverage rect 4.00, -497.00 341.30 x 254.35)
+          (intersects coverage rect 0)
</ins><span class="cx">           (contentsScale 2.30)
</span><span class="cx">         )
</span><span class="cx">       )
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingsimpledocumentwithmargintilesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx">       (bounds 1208.00 2021.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 0.00, 0.00 785.00 x 585.00)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect -512.00, -512.00 1809.00 x 1609.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage -512, -512 2048 x 2048)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingtilesizeslowzoomedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (transform [1.70 0.00 0.00 0.00] [0.00 1.70 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">       (visible rect 0.00, 0.00 461.76 x 344.12)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 461.76 x 344.12)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.70)
</span><span class="cx">       (tile cache coverage 0, 0 602 x 584)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingtileddrawingscrollpositionpagecacherestorationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">       (bounds 5008.00 5016.00)
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (visible rect 1000.00, 1000.00 785.00 x 585.00)
</span><del>-      (coverage rect 1000.00, 1000.00 785.00 x 585.00)
</del><ins>+      (coverage rect 607.50, 415.00 1570.00 x 1755.00)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 1.00)
</span><span class="cx">       (tile cache coverage 512, 0 2048 x 2560)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingtileddrawingzoomexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (transform [2.30 0.00 0.00 0.00] [0.00 2.30 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">       (visible rect 0.00, 0.00 341.30 x 254.35)
</span><del>-      (coverage rect 0.00, 0.00 785.00 x 585.00)
</del><ins>+      (coverage rect 0.00, 0.00 341.30 x 254.35)
</ins><span class="cx">       (intersects coverage rect 1)
</span><span class="cx">       (contentsScale 2.30)
</span><span class="cx">       (tile cache coverage 0, 0 445 x 445)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingtileddrawingzoomscrolledexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -12,8 +12,8 @@
</span><span class="cx">       (contentsOpaque 1)
</span><span class="cx">       (transform [2.30 0.00 0.00 0.00] [0.00 2.30 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
</span><span class="cx">       (visible rect 800.00, 1000.00 341.30 x 254.35)
</span><del>-      (coverage rect 1840.00, 2300.00 785.00 x 585.00)
-      (intersects coverage rect 0)
</del><ins>+      (coverage rect 800.00, 1000.00 341.30 x 254.35)
+      (intersects coverage rect 1)
</ins><span class="cx">       (contentsScale 2.30)
</span><span class="cx">       (tile cache coverage 667, 890 540 x 445)
</span><span class="cx">       (tile size 512 x 512)
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/ChangeLog        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -1,3 +1,95 @@
</span><ins>+2015-04-25  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Expand compositing coverage rect when scrolling and animating
+        https://bugs.webkit.org/show_bug.cgi?id=144214
+        rdar://problem/20695926
+
+        Reviewed by Darin Adler.
+        
+        r183300 added a secondary rect that gets mapped through graphics layers during
+        layer flushing, which represents a rect, in layer coordinates, that represents
+        the portion of this layer that's visible in the viewport.
+        
+        This patch extends that rect based on scrolling and animating, with the extended
+        coverage rect being mapped into descendants (where it's used to determine whether
+        they should detach their backing store). This required moving the responsibility for
+        extending the coverage rect from TileController (where it was used to compute
+        tiled extent), to GraphicsLayerCA. Thus, GraphicsLayerCA now owns the concept
+        of coverage rect, and pushes it onto TileControllers.
+
+        Test: compositing/tiling/transform-origin-tiled.html
+
+        * platform/graphics/TiledBacking.h: Coverage rect is now pushed onto
+        TiledBacking from outside; new functions reflect that.
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): No need to pass
+        old visible rect to commitLayerChangesBeforeSublayers.
+        (WebCore::accumulatesTransform):
+        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush): Now calls computeVisibleAndCoverageRect(),
+        then adjustCoverageRect() which adjusts for scrolling and animations.
+        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect): Fetch the coverage rect from the
+        TransformState, but we can only use this if mapping it through various transforms didn't clamp
+        it (which can happen with severe rotations in perspective).
+        (WebCore::GraphicsLayerCA::adjustCoverageRect): If this layer represents the page tiled backing,
+        ask the TileController to do coverage adjustment (code which should move into here eventually).
+        For other tiled layers, do motion-based adjustment. This should really be done for all layers
+        (an animating non-tiled layer may contain a tiled layer).
+        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects): The VisibleRectChanged wasn't needed
+        any more; layers only react to changed in coverage rect now.
+        (WebCore::GraphicsLayerCA::recursiveCommitChanges): If adjustCoverageRect() changed the
+        coverage rect, here we push the new rect back into the TransformState so it will affect
+        descendants.
+        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
+        (WebCore::GraphicsLayerCA::updateCoverage): Coverage and backing store attachment go
+        hand-in-hand now.
+        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
+        (WebCore::GraphicsLayerCA::computeVisibleRect): Deleted.
+        (WebCore::GraphicsLayerCA::updateBackingStoreAttachment): Deleted.
+        (WebCore::GraphicsLayerCA::updateVisibleRect): Deleted.
+        * platform/graphics/ca/GraphicsLayerCA.h:
+        * platform/graphics/ca/TileController.cpp:
+        (WebCore::TileController::setVisibleRect): Visible rect is only used for scroll performance
+        logging now.
+        (WebCore::TileController::setCoverageRect):
+        (WebCore::TileController::tilesWouldChangeForCoverageRect):
+        (WebCore::TileController::revalidateTiles):
+        (WebCore::TileController::boundsForSize): This is required because when computeTileCoverageRect()
+        is called at the top of committing the owning layer, we haven't yet pushed a new size to the
+        underlying platform layer (which TileController::bounds() consults).
+        (WebCore::TileController::bounds):
+        (WebCore::TileController::computeTileCoverageRect): Have to push the new size in, since the
+        underlying layer hasn't been updated yet.
+        (WebCore::TileController::didRevalidateTiles):
+        (WebCore::TileController::tilesWouldChangeForVisibleRect): Deleted.
+        * platform/graphics/ca/TileController.h:
+        * platform/graphics/ca/TileCoverageMap.cpp:
+        (WebCore::TileCoverageMap::TileCoverageMap): Add a layer to the tile map that shows 
+        a dark blue outline for the coverage rect.
+        (WebCore::TileCoverageMap::update): Fix some minor issues with map position when top
+        content inset is non-zero.
+        * platform/graphics/ca/TileCoverageMap.h:
+        * platform/graphics/ca/TileGrid.cpp: Everything is in terms of coverage rect now.
+        (WebCore::TileGrid::tilesWouldChangeForCoverageRect):
+        (WebCore::TileGrid::revalidateTiles):
+        (WebCore::TileGrid::tilesWouldChangeForVisibleRect): Deleted.
+        * platform/graphics/ca/TileGrid.h:
+        * platform/graphics/transforms/TransformState.cpp:
+        (WebCore::TransformState::operator=):
+        (WebCore::TransformState::mappedQuad): Pass direction into mapQuad().
+        (WebCore::TransformState::mappedSecondaryQuad): Ditto.
+        (WebCore::TransformState::setLastPlanarSecondaryQuad): This function allows a caller
+        to pass in a secondary quad, and get it mapped into the coordinate space of the last
+        &quot;flattening&quot; state (since the TransformState may have in-flight XY offset, or transform).
+        This mapping is achieved by re-using mapQuad(), but in the inverse direction.
+        (WebCore::TransformState::mapQuad): Make direction a parameter.
+        (WebCore::TransformState::flattenWithTransform): This code omitted to map the secondary
+        quad. Failure was detected by tests.
+        * platform/graphics/transforms/TransformState.h:
+        (WebCore::TransformState::isMappingSecondaryQuad):
+        (WebCore::TransformState::direction):
+        (WebCore::TransformState::inverseDirection):
+        (WebCore::TransformState::lastPlanarSecondaryQuad): Deleted.
+
</ins><span class="cx"> 2015-04-25  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Updated expected bindings generation test results after r183343.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsTiledBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/TiledBacking.h (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/TiledBacking.h        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/TiledBacking.h        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -66,8 +66,11 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void setVisibleRect(const FloatRect&amp;) = 0;
</span><span class="cx">     virtual FloatRect visibleRect() const = 0;
</span><del>-    virtual bool tilesWouldChangeForVisibleRect(const FloatRect&amp;) const = 0;
</del><span class="cx"> 
</span><ins>+    virtual void setCoverageRect(const FloatRect&amp;) = 0;
+    virtual FloatRect coverageRect() const = 0;
+    virtual bool tilesWouldChangeForCoverageRect(const FloatRect&amp;) const = 0;
+
</ins><span class="cx">     virtual void setTiledScrollingIndicatorPosition(const FloatPoint&amp;) = 0;
</span><span class="cx">     virtual void setTopContentInset(float) = 0;
</span><span class="cx"> 
</span><span class="lines">@@ -88,6 +91,8 @@
</span><span class="cx">     virtual void setTileCoverage(TileCoverage) = 0;
</span><span class="cx">     virtual TileCoverage tileCoverage() const = 0;
</span><span class="cx"> 
</span><ins>+    virtual FloatRect computeTileCoverageRect(const FloatSize&amp; newSize, const FloatRect&amp; previousVisibleRect, const FloatRect&amp; currentVisibleRect) const = 0;
+
</ins><span class="cx">     virtual IntSize tileSize() const = 0;
</span><span class="cx"> 
</span><span class="cx">     virtual void revalidateTiles() = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -1088,26 +1088,30 @@
</span><span class="cx">     CommitState commitState;
</span><span class="cx"> 
</span><span class="cx">     FloatPoint offset = computePositionRelativeToBase(pageScaleFactor);
</span><del>-    commitLayerChangesBeforeSublayers(commitState, pageScaleFactor, offset, m_visibleRect);
</del><ins>+    commitLayerChangesBeforeSublayers(commitState, pageScaleFactor, offset);
</ins><span class="cx">     commitLayerChangesAfterSublayers(commitState);
</span><span class="cx"> 
</span><span class="cx">     if (hadChanges)
</span><span class="cx">         client().didCommitChangesForLayer(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool accumulatesTransform(const GraphicsLayerCA&amp; layer)
+{
+    return layer.preserves3D() || (layer.parent() &amp;&amp; layer.parent()-&gt;preserves3D());
+}
+
</ins><span class="cx"> bool GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush(const TransformState&amp; state) const
</span><span class="cx"> {
</span><span class="cx">     TransformState localState = state;
</span><span class="cx">     
</span><span class="cx">     // This may be called at times when layout has not been updated, so we want to avoid calling out to the client
</span><span class="cx">     // for animating transforms.
</span><del>-    FloatRect newVisibleRect = computeVisibleRect(localState, 0);
-    if (m_layer-&gt;layerType() == PlatformCALayer::LayerTypeTiledBackingLayer)
-        newVisibleRect = adjustTiledLayerVisibleRect(tiledBacking(), m_visibleRect, newVisibleRect, m_sizeAtLastVisibleRectUpdate, m_size);
</del><ins>+    VisibleAndCoverageRects rects = computeVisibleAndCoverageRect(localState, accumulatesTransform(*this), 0);
+    adjustCoverageRect(rects, m_visibleRect);
</ins><span class="cx"> 
</span><del>-    if (newVisibleRect != m_visibleRect) {
</del><ins>+    if (rects.coverageRect != m_coverageRect) {
</ins><span class="cx">         if (TiledBacking* tiledBacking = this-&gt;tiledBacking()) {
</span><del>-            if (tiledBacking-&gt;tilesWouldChangeForVisibleRect(newVisibleRect))
</del><ins>+            if (tiledBacking-&gt;tilesWouldChangeForCoverageRect(rects.coverageRect))
</ins><span class="cx">                 return true;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -1174,11 +1178,8 @@
</span><span class="cx">     return transform;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatRect GraphicsLayerCA::computeVisibleRect(TransformState&amp; state, ComputeVisibleRectFlags flags) const
</del><ins>+GraphicsLayerCA::VisibleAndCoverageRects GraphicsLayerCA::computeVisibleAndCoverageRect(TransformState&amp; state, bool preserves3D, ComputeVisibleRectFlags flags) const
</ins><span class="cx"> {
</span><del>-    bool preserve3D = preserves3D() || (parent() ? parent()-&gt;preserves3D() : false);
-    TransformState::TransformAccumulation accumulation = preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform;
-
</del><span class="cx">     FloatPoint position = m_position;
</span><span class="cx">     client().customPositionForVisibleRectComputation(this, position);
</span><span class="cx"> 
</span><span class="lines">@@ -1190,6 +1191,7 @@
</span><span class="cx">         layerTransform = this-&gt;layerTransform(position);
</span><span class="cx"> 
</span><span class="cx">     bool applyWasClamped;
</span><ins>+    TransformState::TransformAccumulation accumulation = preserves3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform;
</ins><span class="cx">     state.applyTransform(layerTransform, accumulation, &amp;applyWasClamped);
</span><span class="cx"> 
</span><span class="cx">     bool mapWasClamped;
</span><span class="lines">@@ -1211,43 +1213,73 @@
</span><span class="cx">         // Flatten, and replace the quad in the TransformState with one that is clipped to this layer's bounds.
</span><span class="cx">         state.flatten();
</span><span class="cx">         state.setQuad(clipRectForSelf);
</span><del>-        if (state.lastPlanarSecondaryQuad()) {
</del><ins>+        if (state.isMappingSecondaryQuad()) {
</ins><span class="cx">             FloatQuad secondaryQuad(clipRectForSelf);
</span><span class="cx">             state.setSecondaryQuad(&amp;secondaryQuad);
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return clipRectForSelf;
</del><ins>+    FloatRect coverageRect = clipRectForSelf;
+    std::unique_ptr&lt;FloatQuad&gt; quad = state.mappedSecondaryQuad(&amp;mapWasClamped);
+    if (quad &amp;&amp; !mapWasClamped &amp;&amp; !applyWasClamped)
+        coverageRect = quad-&gt;boundingBox();
+
+    return VisibleAndCoverageRects(clipRectForSelf, coverageRect);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsLayerCA::setVisibleAndCoverageRects(const FloatRect&amp; visibleRect, const FloatRect&amp; coverageRect)
</del><ins>+bool GraphicsLayerCA::adjustCoverageRect(VisibleAndCoverageRects&amp; rects, const FloatRect&amp; oldVisibleRect) const
</ins><span class="cx"> {
</span><del>-    bool visibleRectChanged = visibleRect != m_visibleRect;
-    bool coverageRectChanged = coverageRect != m_coverageRect;
</del><ins>+    FloatRect coverageRect = rects.coverageRect;
+
+    // FIXME: TileController's computeTileCoverageRect() code should move here, and we should unify these different
+    // ways of computing coverage.
+    switch (type()) {
+    case Type::PageTiledBacking:
+        coverageRect = tiledBacking()-&gt;computeTileCoverageRect(size(), oldVisibleRect, rects.visibleRect);
+        break;
+    case Type::Normal:
+        if (m_layer-&gt;layerType() == PlatformCALayer::LayerTypeTiledBackingLayer)
+            coverageRect.unite(adjustTiledLayerVisibleRect(tiledBacking(), oldVisibleRect, rects.visibleRect, m_sizeAtLastCoverageRectUpdate, m_size));
+        break;
+    default:
+        break;
+    }
+    
+    if (rects.coverageRect == coverageRect)
+        return false;
+
+    rects.coverageRect = coverageRect;
+    return true;
+}
+
+void GraphicsLayerCA::setVisibleAndCoverageRects(const VisibleAndCoverageRects&amp; rects)
+{
+    bool visibleRectChanged = rects.visibleRect != m_visibleRect;
+    bool coverageRectChanged = rects.coverageRect != m_coverageRect;
</ins><span class="cx">     if (!visibleRectChanged &amp;&amp; !coverageRectChanged)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (visibleRectChanged) {
</span><del>-        m_uncommittedChanges |= VisibleRectChanged;
-        m_visibleRect = visibleRect;
</del><ins>+        m_uncommittedChanges |= CoverageRectChanged;
+        m_visibleRect = rects.visibleRect;
</ins><span class="cx">         
</span><span class="cx">         if (GraphicsLayerCA* maskLayer = downcast&lt;GraphicsLayerCA&gt;(m_maskLayer)) {
</span><span class="cx">             // FIXME: this assumes that the mask layer has the same geometry as this layer (which is currently always true).
</span><del>-            maskLayer-&gt;m_uncommittedChanges |= VisibleRectChanged;
-            maskLayer-&gt;m_visibleRect = visibleRect;
</del><ins>+            maskLayer-&gt;m_uncommittedChanges |= CoverageRectChanged;
+            maskLayer-&gt;m_visibleRect = rects.visibleRect;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (coverageRectChanged) {
</span><span class="cx">         m_uncommittedChanges |= CoverageRectChanged;
</span><del>-        m_coverageRect = coverageRect;
</del><ins>+        m_coverageRect = rects.coverageRect;
</ins><span class="cx"> 
</span><span class="cx">         // FIXME: we need to take reflections into account when determining whether this layer intersects the coverage rect.
</span><span class="cx">         m_intersectsCoverageRect = m_coverageRect.intersects(FloatRect(m_boundsOrigin, size()));
</span><span class="cx"> 
</span><span class="cx">         if (GraphicsLayerCA* maskLayer = downcast&lt;GraphicsLayerCA&gt;(m_maskLayer)) {
</span><span class="cx">             maskLayer-&gt;m_uncommittedChanges |= CoverageRectChanged;
</span><del>-            maskLayer-&gt;m_coverageRect = coverageRect;
</del><ins>+            maskLayer-&gt;m_coverageRect = rects.coverageRect;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -1259,14 +1291,16 @@
</span><span class="cx">     TransformState localState = state;
</span><span class="cx">     CommitState childCommitState = commitState;
</span><span class="cx">     bool affectedByTransformAnimation = commitState.ancestorHasTransformAnimation;
</span><del>-    
-    FloatRect visibleRect = computeVisibleRect(localState);
-    FloatRect coverageRect = visibleRect;
-    if (std::unique_ptr&lt;FloatQuad&gt; quad = localState.mappedSecondaryQuad())
-        coverageRect = quad-&gt;boundingBox();
</del><span class="cx"> 
</span><del>-    FloatRect oldVisibleRect = m_visibleRect;
-    setVisibleAndCoverageRects(visibleRect, coverageRect);
</del><ins>+    bool accumulateTransform = accumulatesTransform(*this);
+    VisibleAndCoverageRects rects = computeVisibleAndCoverageRect(localState, accumulateTransform);
+    if (adjustCoverageRect(rects, m_visibleRect)) {
+        if (state.isMappingSecondaryQuad()) {
+            FloatQuad secondaryQuad(rects.coverageRect);
+            localState.setLastPlanarSecondaryQuad(&amp;secondaryQuad);
+        }
+    }
+    setVisibleAndCoverageRects(rects);
</ins><span class="cx"> 
</span><span class="cx"> #ifdef VISIBLE_TILE_WASH
</span><span class="cx">     // Use having a transform as a key to making the tile wash layer. If every layer gets a wash,
</span><span class="lines">@@ -1303,7 +1337,7 @@
</span><span class="cx">     if (affectedByPageScale)
</span><span class="cx">         baseRelativePosition += m_position;
</span><span class="cx">     
</span><del>-    commitLayerChangesBeforeSublayers(childCommitState, pageScaleFactor, baseRelativePosition, oldVisibleRect);
</del><ins>+    commitLayerChangesBeforeSublayers(childCommitState, pageScaleFactor, baseRelativePosition);
</ins><span class="cx"> 
</span><span class="cx">     if (isRunningTransformAnimation()) {
</span><span class="cx">         childCommitState.ancestorHasTransformAnimation = true;
</span><span class="lines">@@ -1311,7 +1345,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (GraphicsLayerCA* maskLayer = downcast&lt;GraphicsLayerCA&gt;(m_maskLayer))
</span><del>-        maskLayer-&gt;commitLayerChangesBeforeSublayers(childCommitState, pageScaleFactor, baseRelativePosition, oldVisibleRect);
</del><ins>+        maskLayer-&gt;commitLayerChangesBeforeSublayers(childCommitState, pageScaleFactor, baseRelativePosition);
</ins><span class="cx"> 
</span><span class="cx">     const Vector&lt;GraphicsLayer*&gt;&amp; childLayers = children();
</span><span class="cx">     size_t numChildren = childLayers.size();
</span><span class="lines">@@ -1386,7 +1420,7 @@
</span><span class="cx">     return layerType == PlatformCALayer::LayerTypeLightSystemBackdropLayer || layerType == PlatformCALayer::LayerTypeDarkSystemBackdropLayer;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsLayerCA::commitLayerChangesBeforeSublayers(CommitState&amp; commitState, float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase, const FloatRect&amp; oldVisibleRect)
</del><ins>+void GraphicsLayerCA::commitLayerChangesBeforeSublayers(CommitState&amp; commitState, float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase)
</ins><span class="cx"> {
</span><span class="cx">     TemporaryChange&lt;bool&gt; committingChangesChange(m_isCommittingChanges, true);
</span><span class="cx"> 
</span><span class="lines">@@ -1486,13 +1520,10 @@
</span><span class="cx">     if (m_uncommittedChanges &amp; ContentsScaleChanged)
</span><span class="cx">         updateContentsScale(pageScaleFactor);
</span><span class="cx"> 
</span><del>-    if (m_uncommittedChanges &amp; VisibleRectChanged)
-        updateVisibleRect(oldVisibleRect);
-    
</del><span class="cx">     if (m_uncommittedChanges &amp; CoverageRectChanged)
</span><del>-        updateBackingStoreAttachment();
</del><ins>+        updateCoverage();
</ins><span class="cx"> 
</span><del>-    if (m_uncommittedChanges &amp; TilingAreaChanged) // Needs to happen after VisibleRectChanged, ContentsScaleChanged
</del><ins>+    if (m_uncommittedChanges &amp; TilingAreaChanged) // Needs to happen after CoverageRectChanged, ContentsScaleChanged
</ins><span class="cx">         updateTiles();
</span><span class="cx"> 
</span><span class="cx">     if (m_uncommittedChanges &amp; DirtyRectsChanged)
</span><span class="lines">@@ -1965,14 +1996,22 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsLayerCA::updateBackingStoreAttachment()
</del><ins>+void GraphicsLayerCA::updateCoverage()
</ins><span class="cx"> {
</span><ins>+    // FIXME: Need to set coverage on clone layers too.
+    if (TiledBacking* backing = tiledBacking()) {
+        backing-&gt;setVisibleRect(m_visibleRect);
+        backing-&gt;setCoverageRect(m_coverageRect);
+    }
+
</ins><span class="cx">     m_layer-&gt;setBackingStoreAttached(m_intersectsCoverageRect);
</span><span class="cx">     if (m_layerClones) {
</span><span class="cx">         LayerMap::const_iterator end = m_layerClones-&gt;end();
</span><span class="cx">         for (LayerMap::const_iterator it = m_layerClones-&gt;begin(); it != end; ++it)
</span><span class="cx">             it-&gt;value-&gt;setBackingStoreAttached(m_intersectsCoverageRect);
</span><span class="cx">     }
</span><ins>+
+    m_sizeAtLastCoverageRectUpdate = m_size;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void GraphicsLayerCA::updateAcceleratesDrawing()
</span><span class="lines">@@ -2090,20 +2129,6 @@
</span><span class="cx">     return expandedRect;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void GraphicsLayerCA::updateVisibleRect(const FloatRect&amp; oldVisibleRect)
-{
-    if (!m_layer-&gt;usesTiledBackingLayer())
-        return;
-
-    FloatRect tileArea = m_visibleRect;
-    if (m_layer-&gt;layerType() == PlatformCALayer::LayerTypeTiledBackingLayer)
-        tileArea = adjustTiledLayerVisibleRect(tiledBacking(), oldVisibleRect, tileArea, m_sizeAtLastVisibleRectUpdate, m_size);
-
-    tiledBacking()-&gt;setVisibleRect(tileArea);
-
-    m_sizeAtLastVisibleRectUpdate = m_size;
-}
-
</del><span class="cx"> void GraphicsLayerCA::updateTiles()
</span><span class="cx"> {
</span><span class="cx">     if (!m_layer-&gt;usesTiledBackingLayer())
</span><span class="lines">@@ -3312,7 +3337,7 @@
</span><span class="cx">         | DebugIndicatorsChanged;
</span><span class="cx">     
</span><span class="cx">     if (m_usingTiledBacking)
</span><del>-        m_uncommittedChanges |= VisibleRectChanged;
</del><ins>+        m_uncommittedChanges |= CoverageRectChanged;
</ins><span class="cx"> 
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     String name = String::format(&quot;%sCALayer(%p) GraphicsLayer(%p, %llu) &quot;, (newLayerType == PlatformCALayer::LayerTypeWebTiledLayer) ? &quot;Tiled &quot; : &quot;&quot;, m_layer-&gt;platformLayer(), this, primaryLayerID()) + m_name;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -246,7 +246,7 @@
</span><span class="cx">         return m_runningAnimations.find(animationName) != m_runningAnimations.end();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void commitLayerChangesBeforeSublayers(CommitState&amp;, float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase, const FloatRect&amp; oldVisibleRect);
</del><ins>+    void commitLayerChangesBeforeSublayers(CommitState&amp;, float pageScaleFactor, const FloatPoint&amp; positionRelativeToBase);
</ins><span class="cx">     void commitLayerChangesAfterSublayers(CommitState&amp;);
</span><span class="cx"> 
</span><span class="cx">     FloatPoint computePositionRelativeToBase(float&amp; pageScale) const;
</span><span class="lines">@@ -275,12 +275,25 @@
</span><span class="cx"> 
</span><span class="cx">     enum ComputeVisibleRectFlag { RespectAnimatingTransforms = 1 &lt;&lt; 0 };
</span><span class="cx">     typedef unsigned ComputeVisibleRectFlags;
</span><del>-    FloatRect computeVisibleRect(TransformState&amp;, ComputeVisibleRectFlags = RespectAnimatingTransforms) const;
</del><ins>+    
+    struct VisibleAndCoverageRects {
+        FloatRect visibleRect;
+        FloatRect coverageRect;
+        
+        VisibleAndCoverageRects(const FloatRect&amp; visRect, const FloatRect&amp; covRect)
+            : visibleRect(visRect)
+            , coverageRect(covRect)
+        {
+        }
+    };
+    
+    VisibleAndCoverageRects computeVisibleAndCoverageRect(TransformState&amp;, bool accumulateTransform, ComputeVisibleRectFlags = RespectAnimatingTransforms) const;
+    bool adjustCoverageRect(VisibleAndCoverageRects&amp;, const FloatRect&amp; oldVisibleRect) const;
</ins><span class="cx"> 
</span><span class="cx">     const FloatRect&amp; visibleRect() const { return m_visibleRect; }
</span><span class="cx">     const FloatRect&amp; coverageRect() const { return m_coverageRect; }
</span><span class="cx"> 
</span><del>-    void setVisibleAndCoverageRects(const FloatRect&amp; visibleRect, const FloatRect&amp; coverageRect);
</del><ins>+    void setVisibleAndCoverageRects(const VisibleAndCoverageRects&amp;);
</ins><span class="cx">     
</span><span class="cx">     static FloatRect adjustTiledLayerVisibleRect(TiledBacking*, const FloatRect&amp; oldVisibleRect, const FloatRect&amp; newVisibleRect, const FloatSize&amp; oldSize, const FloatSize&amp; newSize);
</span><span class="cx"> 
</span><span class="lines">@@ -363,7 +376,7 @@
</span><span class="cx">     void updateBackfaceVisibility();
</span><span class="cx">     void updateStructuralLayer();
</span><span class="cx">     void updateDrawsContent();
</span><del>-    void updateBackingStoreAttachment();
</del><ins>+    void updateCoverage();
</ins><span class="cx">     void updateBackgroundColor();
</span><span class="cx"> 
</span><span class="cx">     void updateContentsImage();
</span><span class="lines">@@ -378,7 +391,6 @@
</span><span class="cx">     void updateContentsNeedsDisplay();
</span><span class="cx">     void updateAcceleratesDrawing();
</span><span class="cx">     void updateDebugBorder();
</span><del>-    void updateVisibleRect(const FloatRect&amp; oldVisibleRect);
</del><span class="cx">     void updateTiles();
</span><span class="cx">     void updateContentsScale(float pageScaleFactor);
</span><span class="cx">     void updateCustomAppearance();
</span><span class="lines">@@ -450,17 +462,16 @@
</span><span class="cx">         AcceleratesDrawingChanged =     1LLU &lt;&lt; 23,
</span><span class="cx">         ContentsScaleChanged =          1LLU &lt;&lt; 24,
</span><span class="cx">         ContentsVisibilityChanged =     1LLU &lt;&lt; 25,
</span><del>-        VisibleRectChanged =            1LLU &lt;&lt; 26,
-        CoverageRectChanged =           1LLU &lt;&lt; 27,
-        FiltersChanged =                1LLU &lt;&lt; 28,
-        BackdropFiltersChanged =        1LLU &lt;&lt; 29,
-        TilingAreaChanged =             1LLU &lt;&lt; 30,
-        TilesAdded =                    1LLU &lt;&lt; 31,
-        DebugIndicatorsChanged =        1LLU &lt;&lt; 32,
-        CustomAppearanceChanged =       1LLU &lt;&lt; 33,
-        BlendModeChanged =              1LLU &lt;&lt; 34,
-        ShapeChanged =                  1LLU &lt;&lt; 35,
-        WindRuleChanged =               1LLU &lt;&lt; 36,
</del><ins>+        CoverageRectChanged =           1LLU &lt;&lt; 26,
+        FiltersChanged =                1LLU &lt;&lt; 27,
+        BackdropFiltersChanged =        1LLU &lt;&lt; 28,
+        TilingAreaChanged =             1LLU &lt;&lt; 29,
+        TilesAdded =                    1LLU &lt;&lt; 30,
+        DebugIndicatorsChanged =        1LLU &lt;&lt; 31,
+        CustomAppearanceChanged =       1LLU &lt;&lt; 32,
+        BlendModeChanged =              1LLU &lt;&lt; 33,
+        ShapeChanged =                  1LLU &lt;&lt; 34,
+        WindRuleChanged =               1LLU &lt;&lt; 35,
</ins><span class="cx">     };
</span><span class="cx">     typedef uint64_t LayerChangeFlags;
</span><span class="cx">     enum ScheduleFlushOrNot { ScheduleFlush, DontScheduleFlush };
</span><span class="lines">@@ -492,7 +503,7 @@
</span><span class="cx">     RefPtr&lt;PlatformCALayer&gt; m_visibleTileWashLayer;
</span><span class="cx"> #endif
</span><span class="cx">     FloatRect m_visibleRect;
</span><del>-    FloatSize m_sizeAtLastVisibleRectUpdate;
</del><ins>+    FloatSize m_sizeAtLastCoverageRectUpdate;
</ins><span class="cx"> 
</span><span class="cx">     FloatRect m_coverageRect; // Area for which we should maintain backing store, in the coordinate space of this layer.
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileController.cpp (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileController.cpp        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/TileController.cpp        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -182,21 +182,27 @@
</span><span class="cx">     tileGrid().updateTileLayerProperties();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TileController::setVisibleRect(const FloatRect&amp; visibleRect)
</del><ins>+void TileController::setVisibleRect(const FloatRect&amp; rect)
</ins><span class="cx"> {
</span><ins>+    m_visibleRect = rect;
+}
+
+void TileController::setCoverageRect(const FloatRect&amp; rect)
+{
</ins><span class="cx">     ASSERT(owningGraphicsLayer()-&gt;isCommittingChanges());
</span><del>-    if (m_visibleRect == visibleRect)
</del><ins>+    if (m_coverageRect == rect)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_visibleRect = visibleRect;
</del><ins>+    m_coverageRect = rect;
</ins><span class="cx">     setNeedsRevalidateTiles();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool TileController::tilesWouldChangeForVisibleRect(const FloatRect&amp; newVisibleRect) const
</del><ins>+bool TileController::tilesWouldChangeForCoverageRect(const FloatRect&amp; rect) const
</ins><span class="cx"> {
</span><span class="cx">     if (bounds().isEmpty())
</span><span class="cx">         return false;
</span><del>-    return tileGrid().tilesWouldChangeForVisibleRect(newVisibleRect, m_visibleRect);
</del><ins>+
+    return tileGrid().tilesWouldChangeForCoverageRect(rect);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void TileController::setVelocity(const VelocityData&amp; velocity)
</span><span class="lines">@@ -256,7 +262,6 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(owningGraphicsLayer()-&gt;isCommittingChanges());
</span><span class="cx">     tileGrid().revalidateTiles(0);
</span><del>-    m_visibleRectAtLastRevalidate = m_visibleRect;
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void TileController::forceRepaint()
</span><span class="lines">@@ -282,15 +287,20 @@
</span><span class="cx">     tileGrid().updateTileLayerProperties();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntRect TileController::bounds() const
</del><ins>+IntRect TileController::boundsForSize(const FloatSize&amp; size) const
</ins><span class="cx"> {
</span><span class="cx">     IntPoint boundsOriginIncludingMargin(-leftMarginWidth(), -topMarginHeight());
</span><del>-    IntSize boundsSizeIncludingMargin = expandedIntSize(m_tileCacheLayer-&gt;bounds().size());
</del><ins>+    IntSize boundsSizeIncludingMargin = expandedIntSize(size);
</ins><span class="cx">     boundsSizeIncludingMargin.expand(leftMarginWidth() + rightMarginWidth(), topMarginHeight() + bottomMarginHeight());
</span><span class="cx"> 
</span><span class="cx">     return IntRect(boundsOriginIncludingMargin, boundsSizeIncludingMargin);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+IntRect TileController::bounds() const
+{
+    return boundsForSize(m_tileCacheLayer-&gt;bounds().size());
+}
+
</ins><span class="cx"> IntRect TileController::boundsWithoutMargin() const
</span><span class="cx"> {
</span><span class="cx">     return IntRect(IntPoint(), expandedIntSize(m_tileCacheLayer-&gt;bounds().size()));
</span><span class="lines">@@ -303,7 +313,7 @@
</span><span class="cx">     return boundsWithoutMargin;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatRect TileController::computeTileCoverageRect(const FloatRect&amp; previousVisibleRect, const FloatRect&amp; visibleRect) const
</del><ins>+FloatRect TileController::computeTileCoverageRect(const FloatSize&amp; newSize, const FloatRect&amp; previousVisibleRect, const FloatRect&amp; visibleRect) const
</ins><span class="cx"> {
</span><span class="cx">     // If the page is not in a window (for example if it's in a background tab), we limit the tile coverage rect to the visible rect.
</span><span class="cx">     if (!m_isInWindow)
</span><span class="lines">@@ -346,7 +356,9 @@
</span><span class="cx">         futureRect.setY(futureRect.y() - verticalMargin / 2);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    IntSize contentSize = bounds().size();
</del><ins>+    // Can't use m_tileCacheLayer-&gt;bounds() here, because the size of the underlying platform layer
+    // hasn't been updated for the current commit.
+    IntSize contentSize = expandedIntSize(newSize);
</ins><span class="cx">     if (futureRect.maxX() &gt; contentSize.width())
</span><span class="cx">         futureRect.setX(contentSize.width() - futureRect.width());
</span><span class="cx">     if (futureRect.maxY() &gt; contentSize.height())
</span><span class="lines">@@ -377,7 +389,9 @@
</span><span class="cx">     coverageVerticalSize += topMarginHeight() + bottomMarginHeight();
</span><span class="cx">     coverageHorizontalSize += leftMarginWidth() + rightMarginWidth();
</span><span class="cx"> 
</span><del>-    FloatRect coverageBounds = bounds();
</del><ins>+    // Can't use m_tileCacheLayer-&gt;bounds() here, because the size of the underlying platform layer
+    // hasn't been updated for the current commit.
+    FloatRect coverageBounds = boundsForSize(newSize);
</ins><span class="cx">     float coverageLeft = visibleRect.x() - (coverageHorizontalSize - visibleRect.width()) / 2;
</span><span class="cx">     coverageLeft = std::min(coverageLeft, coverageBounds.maxX() - coverageHorizontalSize);
</span><span class="cx">     coverageLeft = std::max(coverageLeft, coverageBounds.x());
</span><span class="lines">@@ -427,7 +441,6 @@
</span><span class="cx"> 
</span><span class="cx"> void TileController::didRevalidateTiles()
</span><span class="cx"> {
</span><del>-    m_visibleRectAtLastRevalidate = visibleRect();
</del><span class="cx">     m_boundsAtLastRevalidate = bounds();
</span><span class="cx"> 
</span><span class="cx">     updateTileCoverageMap();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileController.h (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileController.h        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/TileController.h        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -79,6 +79,7 @@
</span><span class="cx">     WEBCORE_EXPORT void setTileDebugBorderColor(Color);
</span><span class="cx"> 
</span><span class="cx">     virtual FloatRect visibleRect() const override { return m_visibleRect; }
</span><ins>+    virtual FloatRect coverageRect() const override { return m_coverageRect; }
</ins><span class="cx"> 
</span><span class="cx">     unsigned blankPixelCount() const;
</span><span class="cx">     static unsigned blankPixelCountForTiles(const PlatformLayerList&amp;, const FloatRect&amp;, const IntPoint&amp;);
</span><span class="lines">@@ -105,14 +106,12 @@
</span><span class="cx">     virtual int leftMarginWidth() const override;
</span><span class="cx">     virtual int rightMarginWidth() const override;
</span><span class="cx">     virtual TileCoverage tileCoverage() const override { return m_tileCoverage; }
</span><ins>+    virtual FloatRect computeTileCoverageRect(const FloatSize&amp; newSize, const FloatRect&amp; previousVisibleRect, const FloatRect&amp; currentVisibleRect) const override;
</ins><span class="cx">     virtual bool unparentsOffscreenTiles() const override { return m_unparentsOffscreenTiles; }
</span><span class="cx">     virtual bool scrollingPerformanceLoggingEnabled() const override { return m_scrollingPerformanceLoggingEnabled; }
</span><span class="cx"> 
</span><del>-    FloatRect computeTileCoverageRect(const FloatRect&amp; previousVisibleRect, const FloatRect&amp; currentVisibleRect) const;
-
</del><span class="cx">     IntRect boundsAtLastRevalidate() const { return m_boundsAtLastRevalidate; }
</span><span class="cx">     IntRect boundsAtLastRevalidateWithoutMargin() const;
</span><del>-    FloatRect visibleRectAtLastRevalidate() const { return m_visibleRectAtLastRevalidate; }
</del><span class="cx">     void didRevalidateTiles();
</span><span class="cx"> 
</span><span class="cx">     bool shouldAggressivelyRetainTiles() const;
</span><span class="lines">@@ -136,7 +135,8 @@
</span><span class="cx"> 
</span><span class="cx">     // TiledBacking member functions.
</span><span class="cx">     virtual void setVisibleRect(const FloatRect&amp;) override;
</span><del>-    virtual bool tilesWouldChangeForVisibleRect(const FloatRect&amp;) const override;
</del><ins>+    virtual void setCoverageRect(const FloatRect&amp;) override;
+    virtual bool tilesWouldChangeForCoverageRect(const FloatRect&amp;) const override;
</ins><span class="cx">     virtual void setTiledScrollingIndicatorPosition(const FloatPoint&amp;) override;
</span><span class="cx">     virtual void setTopContentInset(float) override;
</span><span class="cx">     virtual void setVelocity(const VelocityData&amp;) override;
</span><span class="lines">@@ -158,10 +158,10 @@
</span><span class="cx">     virtual void setZoomedOutContentsScale(float) override;
</span><span class="cx">     virtual float zoomedOutContentsScale() const override;
</span><span class="cx"> 
</span><del>-
</del><span class="cx">     void tileRevalidationTimerFired();
</span><del>-
</del><span class="cx">     void setNeedsRevalidateTiles();
</span><ins>+    
+    IntRect boundsForSize(const FloatSize&amp;) const;
</ins><span class="cx"> 
</span><span class="cx">     PlatformCALayerClient* owningGraphicsLayer() const { return m_tileCacheLayer-&gt;owner(); }
</span><span class="cx"> 
</span><span class="lines">@@ -173,8 +173,8 @@
</span><span class="cx">     std::unique_ptr&lt;TileGrid&gt; m_zoomedOutTileGrid;
</span><span class="cx"> 
</span><span class="cx">     IntSize m_tileSize;
</span><del>-    FloatRect m_visibleRect;
-    FloatRect m_visibleRectAtLastRevalidate;
</del><ins>+    FloatRect m_visibleRect; // Only used for scroll performance logging.
+    FloatRect m_coverageRect;
</ins><span class="cx">     IntRect m_boundsAtLastRevalidate;
</span><span class="cx"> 
</span><span class="cx">     Timer m_tileRevalidationTimer;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileCoverageMapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.cpp        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx">     : m_controller(controller)
</span><span class="cx">     , m_layer(*controller.rootLayer().createCompatibleLayer(PlatformCALayer::LayerTypeSimpleLayer, this))
</span><span class="cx">     , m_visibleRectIndicatorLayer(*controller.rootLayer().createCompatibleLayer(PlatformCALayer::LayerTypeLayer, nullptr))
</span><ins>+    , m_coverageRectIndicatorLayer(*controller.rootLayer().createCompatibleLayer(PlatformCALayer::LayerTypeLayer, nullptr))
</ins><span class="cx">     , m_position(FloatPoint(0, controller.topContentInset()))
</span><span class="cx"> {
</span><span class="cx">     m_layer.get().setOpacity(0.75);
</span><span class="lines">@@ -44,10 +45,16 @@
</span><span class="cx">     m_layer.get().setBorderWidth(1);
</span><span class="cx">     m_layer.get().setPosition(FloatPoint(2, 2));
</span><span class="cx">     m_layer.get().setContentsScale(m_controller.deviceScaleFactor());
</span><ins>+
</ins><span class="cx">     m_visibleRectIndicatorLayer.get().setBorderWidth(2);
</span><span class="cx">     m_visibleRectIndicatorLayer.get().setAnchorPoint(FloatPoint3D());
</span><span class="cx">     m_visibleRectIndicatorLayer.get().setBorderColor(Color(255, 0, 0));
</span><ins>+    
+    m_coverageRectIndicatorLayer.get().setBorderWidth(2);
+    m_coverageRectIndicatorLayer.get().setAnchorPoint(FloatPoint3D());
+    m_coverageRectIndicatorLayer.get().setBorderColor(Color(0, 0, 128));
</ins><span class="cx"> 
</span><ins>+    m_layer.get().appendSublayer(m_coverageRectIndicatorLayer);
</ins><span class="cx">     m_layer.get().appendSublayer(m_visibleRectIndicatorLayer);
</span><span class="cx"> 
</span><span class="cx">     update();
</span><span class="lines">@@ -62,16 +69,19 @@
</span><span class="cx"> {
</span><span class="cx">     FloatRect containerBounds = m_controller.bounds();
</span><span class="cx">     FloatRect visibleRect = m_controller.visibleRect();
</span><ins>+    FloatRect coverageRect = m_controller.coverageRect();
</ins><span class="cx">     visibleRect.contract(4, 4); // Layer is positioned 2px from top and left edges.
</span><span class="cx"> 
</span><span class="cx">     float widthScale = 1;
</span><span class="cx">     float scale = 1;
</span><span class="cx">     if (!containerBounds.isEmpty()) {
</span><span class="cx">         widthScale = std::min&lt;float&gt;(visibleRect.width() / containerBounds.width(), 0.1);
</span><del>-        scale = std::min(widthScale, visibleRect.height() / containerBounds.height());
</del><ins>+        float visibleHeight = visibleRect.height() - std::min(m_controller.topContentInset(), visibleRect.y());
+        scale = std::min(widthScale, visibleHeight / containerBounds.height());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     float indicatorScale = scale * m_controller.tileGrid().scale();
</span><ins>+
</ins><span class="cx">     FloatRect mapBounds = containerBounds;
</span><span class="cx">     mapBounds.scale(indicatorScale, indicatorScale);
</span><span class="cx"> 
</span><span class="lines">@@ -84,6 +94,11 @@
</span><span class="cx">     m_visibleRectIndicatorLayer-&gt;setPosition(visibleRect.location());
</span><span class="cx">     m_visibleRectIndicatorLayer-&gt;setBounds(FloatRect(FloatPoint(), visibleRect.size()));
</span><span class="cx"> 
</span><ins>+    coverageRect.scale(indicatorScale, indicatorScale);
+    coverageRect.expand(2, 2);
+    m_coverageRectIndicatorLayer-&gt;setPosition(coverageRect.location());
+    m_coverageRectIndicatorLayer-&gt;setBounds(FloatRect(FloatPoint(), coverageRect.size()));
+
</ins><span class="cx">     Color visibleRectIndicatorColor;
</span><span class="cx">     switch (m_controller.indicatorMode()) {
</span><span class="cx">     case SynchronousScrollingBecauseOfStyleIndication:
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileCoverageMaph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.h (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.h        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/TileCoverageMap.h        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -65,6 +65,7 @@
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;PlatformCALayer&gt; m_layer;
</span><span class="cx">     Ref&lt;PlatformCALayer&gt; m_visibleRectIndicatorLayer;
</span><ins>+    Ref&lt;PlatformCALayer&gt; m_coverageRectIndicatorLayer;
</ins><span class="cx"> 
</span><span class="cx">     FloatPoint m_position;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -185,15 +185,12 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool TileGrid::tilesWouldChangeForVisibleRect(const FloatRect&amp; newVisibleRect, const FloatRect&amp; oldVisibleRect) const
</del><ins>+bool TileGrid::tilesWouldChangeForCoverageRect(const FloatRect&amp; coverageRect) const
</ins><span class="cx"> {
</span><del>-    FloatRect visibleRect = newVisibleRect;
-
-    if (visibleRect.isEmpty())
</del><ins>+    if (coverageRect.isEmpty())
</ins><span class="cx">         return false;
</span><del>-        
-    FloatRect currentTileCoverageRect = m_controller.computeTileCoverageRect(oldVisibleRect, newVisibleRect);
-    FloatRect scaledRect(currentTileCoverageRect);
</del><ins>+
+    FloatRect scaledRect(coverageRect);
</ins><span class="cx">     scaledRect.scale(m_scale);
</span><span class="cx">     IntRect currentCoverageRectInTileCoords(enclosingIntRect(scaledRect));
</span><span class="cx"> 
</span><span class="lines">@@ -201,9 +198,9 @@
</span><span class="cx">     TileIndex bottomRight;
</span><span class="cx">     getTileIndexRangeForRect(currentCoverageRectInTileCoords, topLeft, bottomRight);
</span><span class="cx"> 
</span><del>-    IntRect coverageRect = rectForTileIndex(topLeft);
-    coverageRect.unite(rectForTileIndex(bottomRight));
-    return coverageRect != m_primaryTileCoverageRect;
</del><ins>+    IntRect tileCoverageRect = rectForTileIndex(topLeft);
+    tileCoverageRect.unite(rectForTileIndex(bottomRight));
+    return tileCoverageRect != m_primaryTileCoverageRect;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool TileGrid::prepopulateRect(const FloatRect&amp; rect)
</span><span class="lines">@@ -306,14 +303,13 @@
</span><span class="cx"> 
</span><span class="cx"> void TileGrid::revalidateTiles(TileValidationPolicy validationPolicy)
</span><span class="cx"> {
</span><del>-    FloatRect visibleRect = m_controller.visibleRect();
</del><ins>+    FloatRect coverageRect = m_controller.coverageRect();
</ins><span class="cx">     IntRect bounds = m_controller.bounds();
</span><span class="cx"> 
</span><del>-    if (visibleRect.isEmpty() || bounds.isEmpty())
</del><ins>+    if (coverageRect.isEmpty() || bounds.isEmpty())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    FloatRect tileCoverageRect = m_controller.computeTileCoverageRect(m_controller.visibleRectAtLastRevalidate(), visibleRect);
-    FloatRect scaledRect(tileCoverageRect);
</del><ins>+    FloatRect scaledRect(coverageRect);
</ins><span class="cx">     scaledRect.scale(m_scale);
</span><span class="cx">     IntRect coverageRectInTileCoords(enclosingIntRect(scaledRect));
</span><span class="cx"> 
</span><span class="lines">@@ -378,7 +374,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Ensure primary tile coverage tiles.
</span><del>-    m_primaryTileCoverageRect = ensureTilesForRect(tileCoverageRect, CoverageType::PrimaryTiles);
</del><ins>+    m_primaryTileCoverageRect = ensureTilesForRect(coverageRect, CoverageType::PrimaryTiles);
</ins><span class="cx"> 
</span><span class="cx">     if (validationPolicy &amp; PruneSecondaryTiles) {
</span><span class="cx">         removeAllSecondaryTiles();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileGridh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileGrid.h (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileGrid.h        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/ca/TileGrid.h        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx">     typedef unsigned TileValidationPolicy;
</span><span class="cx">     void revalidateTiles(TileValidationPolicy);
</span><span class="cx"> 
</span><del>-    bool tilesWouldChangeForVisibleRect(const FloatRect&amp; newVisibleRect, const FloatRect&amp; oldVisibleRect) const;
</del><ins>+    bool tilesWouldChangeForCoverageRect(const FloatRect&amp;) const;
</ins><span class="cx"> 
</span><span class="cx">     IntRect tileCoverageRect() const;
</span><span class="cx">     IntRect extent() const;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstransformsTransformStatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">             m_lastPlanarSecondaryQuad = std::make_unique&lt;FloatQuad&gt;(*other.m_lastPlanarSecondaryQuad);
</span><span class="cx">         else
</span><span class="cx">             m_lastPlanarSecondaryQuad = nullptr;
</span><del>-        
</del><span class="cx">     }
</span><span class="cx">     m_accumulatingTransform = other.m_accumulatingTransform;
</span><span class="cx">     m_direction = other.m_direction;
</span><span class="lines">@@ -180,7 +179,7 @@
</span><span class="cx">         *wasClamped = false;
</span><span class="cx"> 
</span><span class="cx">     FloatQuad quad = m_lastPlanarQuad;
</span><del>-    mapQuad(quad, wasClamped);
</del><ins>+    mapQuad(quad, m_direction, wasClamped);
</ins><span class="cx">     return quad;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -193,17 +192,30 @@
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     FloatQuad quad = *m_lastPlanarSecondaryQuad;
</span><del>-    mapQuad(quad, wasClamped);
</del><ins>+    mapQuad(quad, m_direction, wasClamped);
</ins><span class="cx">     return std::make_unique&lt;FloatQuad&gt;(quad);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TransformState::mapQuad(FloatQuad&amp; quad, bool* wasClamped) const
</del><ins>+void TransformState::setLastPlanarSecondaryQuad(const FloatQuad* quad)
</ins><span class="cx"> {
</span><del>-    quad.move((m_direction == ApplyTransformDirection) ? m_accumulatedOffset : -m_accumulatedOffset);
</del><ins>+    if (!quad) {
+        m_lastPlanarSecondaryQuad = nullptr;
+        return;
+    }
+    
+    // Map the quad back through any transform or offset back into the last flattening coordinate space.
+    FloatQuad backMappedQuad(*quad);
+    mapQuad(backMappedQuad, inverseDirection());
+    m_lastPlanarSecondaryQuad = std::make_unique&lt;FloatQuad&gt;(backMappedQuad);
+}
+
+void TransformState::mapQuad(FloatQuad&amp; quad, TransformDirection direction, bool* wasClamped) const
+{
+    quad.move((direction == ApplyTransformDirection) ? m_accumulatedOffset : -m_accumulatedOffset);
</ins><span class="cx">     if (!m_accumulatedTransform)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (m_direction == ApplyTransformDirection)
</del><ins>+    if (direction == ApplyTransformDirection)
</ins><span class="cx">         quad = m_accumulatedTransform-&gt;mapQuad(quad);
</span><span class="cx"> 
</span><span class="cx">     quad = m_accumulatedTransform-&gt;inverse().projectQuad(quad, wasClamped);
</span><span class="lines">@@ -214,14 +226,21 @@
</span><span class="cx">     if (m_direction == ApplyTransformDirection) {
</span><span class="cx">         if (m_mapPoint)
</span><span class="cx">             m_lastPlanarPoint = t.mapPoint(m_lastPlanarPoint);
</span><del>-        if (m_mapQuad)
</del><ins>+        if (m_mapQuad) {
</ins><span class="cx">             m_lastPlanarQuad = t.mapQuad(m_lastPlanarQuad);
</span><ins>+            if (m_lastPlanarSecondaryQuad)
+                *m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad);
+        }
+
</ins><span class="cx">     } else {
</span><span class="cx">         TransformationMatrix inverseTransform = t.inverse();
</span><span class="cx">         if (m_mapPoint)
</span><span class="cx">             m_lastPlanarPoint = inverseTransform.projectPoint(m_lastPlanarPoint);
</span><del>-        if (m_mapQuad)
</del><ins>+        if (m_mapQuad) {
</ins><span class="cx">             m_lastPlanarQuad = inverseTransform.projectQuad(m_lastPlanarQuad, wasClamped);
</span><ins>+            if (m_lastPlanarSecondaryQuad)
+                *m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped);
+        }
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // We could throw away m_accumulatedTransform if we wanted to here, but that
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstransformsTransformStateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformState.h (183353 => 183354)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/transforms/TransformState.h        2015-04-26 15:47:20 UTC (rev 183353)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformState.h        2015-04-26 17:24:40 UTC (rev 183354)
</span><span class="lines">@@ -79,6 +79,7 @@
</span><span class="cx">         m_lastPlanarQuad = quad;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // FIXME: webkit.org/b/144226 use Optional&lt;FloatQuad&gt;. 
</ins><span class="cx">     void setSecondaryQuad(const FloatQuad* quad)
</span><span class="cx">     {
</span><span class="cx">         // We must be in a flattened state (no accumulated offset) when setting this secondary quad.
</span><span class="lines">@@ -89,6 +90,9 @@
</span><span class="cx">             m_lastPlanarSecondaryQuad = nullptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // FIXME: webkit.org/b/144226 use Optional&lt;FloatQuad&gt;.
+    void setLastPlanarSecondaryQuad(const FloatQuad*);
+
</ins><span class="cx">     void move(LayoutUnit x, LayoutUnit y, TransformAccumulation accumulate = FlattenTransform)
</span><span class="cx">     {
</span><span class="cx">         move(LayoutSize(x, y), accumulate);
</span><span class="lines">@@ -103,6 +107,7 @@
</span><span class="cx">     FloatPoint lastPlanarPoint() const { return m_lastPlanarPoint; }
</span><span class="cx">     FloatQuad lastPlanarQuad() const { return m_lastPlanarQuad; }
</span><span class="cx">     FloatQuad* lastPlanarSecondaryQuad() const { return m_lastPlanarSecondaryQuad.get(); }
</span><ins>+    bool isMappingSecondaryQuad() const { return m_lastPlanarSecondaryQuad.get(); }
</ins><span class="cx"> 
</span><span class="cx">     // Return the point or quad mapped through the current transform
</span><span class="cx">     FloatPoint mappedPoint(bool* wasClamped = nullptr) const;
</span><span class="lines">@@ -115,7 +120,10 @@
</span><span class="cx">     void flattenWithTransform(const TransformationMatrix&amp;, bool* wasClamped);
</span><span class="cx">     void applyAccumulatedOffset();
</span><span class="cx">     
</span><del>-    void mapQuad(FloatQuad&amp;, bool* clamped) const;
</del><ins>+    TransformDirection direction() const { return m_direction; }
+    TransformDirection inverseDirection() const;
+
+    void mapQuad(FloatQuad&amp;, TransformDirection, bool* clamped = nullptr) const;
</ins><span class="cx">     
</span><span class="cx">     FloatPoint m_lastPlanarPoint;
</span><span class="cx">     FloatQuad m_lastPlanarQuad;
</span><span class="lines">@@ -130,6 +138,11 @@
</span><span class="cx">     TransformDirection m_direction;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+inline TransformState::TransformDirection TransformState::inverseDirection() const
+{
+    return m_direction == ApplyTransformDirection ? UnapplyInverseTransformDirection : ApplyTransformDirection;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // TransformState_h
</span></span></pre>
</div>
</div>

</body>
</html>