<!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>[166784] 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/166784">166784</a></dd>
<dt>Author</dt> <dd>zalan@apple.com</dd>
<dt>Date</dt> <dd>2014-04-04 09:30:18 -0700 (Fri, 04 Apr 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Subpixel rendering: Move background images to device pixel boundaries.
https://bugs.webkit.org/show_bug.cgi?id=131144

Reviewed by Simon Fraser.

Replace integral snapping with device pixel snapping.
Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.

Source/WebCore:

Tests: fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html
       fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html
       fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html
       fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html

* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::setContentsTilePhase):
(WebCore::GraphicsLayer::contentsTilePhase):
(WebCore::GraphicsLayer::setContentsTileSize):
(WebCore::GraphicsLayer::contentsTileSize):
* platform/graphics/texmap/TextureMapperLayer.cpp:
(WebCore::TextureMapperLayer::setContentsTileSize):
(WebCore::TextureMapperLayer::setContentsTilePhase):
* platform/graphics/texmap/TextureMapperLayer.h:
* platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
(WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
(WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
* platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
* platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
* rendering/RenderBox.cpp:
(WebCore::RenderBox::repaintLayerRectsForImage):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::paintFillLayerExtended):
(WebCore::resolveWidthForRatio):
(WebCore::resolveHeightForRatio):
(WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
(WebCore::resolveAgainstIntrinsicRatio):
(WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
(WebCore::RenderBoxModelObject::calculateFillTileSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase):
(WebCore::getSpace):
(WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
(WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
(WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
(WebCore::RenderBoxModelObject::paintNinePieceImage):
(WebCore::applySubPixelHeuristicForTileSize): Deleted.
* rendering/RenderBoxModelObject.h:
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::spaceSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setSpaceSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseX):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseY):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
* rendering/shapes/ShapeOutsideInfo.cpp:
(WebCore::getShapeImageAndRect):

LayoutTests:

* css3/background/background-repeat-round-auto1-expected.html:
* css3/background/background-repeat-round-auto1.html:
* css3/background/background-repeat-round-auto2-expected.html:
* css3/background/background-repeat-round-auto2.html:
* css3/background/background-repeat-round-border-expected.html:
* css3/background/background-repeat-round-border.html:
* css3/background/background-repeat-round-content-expected.html:
* css3/background/background-repeat-round-content.html:
* css3/background/background-repeat-space-content-expected.html:
* css3/background/background-repeat-space-content.html:
* css3/background/background-repeat-space-padding-expected.html:
* css3/background/background-repeat-space-padding.html:
* css3/masking/mask-repeat-round-auto1-expected.html:
* css3/masking/mask-repeat-round-auto1.html:
* css3/masking/mask-repeat-round-auto2-expected.html:
* css3/masking/mask-repeat-round-auto2.html:
* css3/masking/mask-repeat-round-border-expected.html:
* css3/masking/mask-repeat-round-border.html:
* css3/masking/mask-repeat-round-content-expected.html:
* css3/masking/mask-repeat-round-content.html:
* css3/masking/mask-repeat-space-content-expected.html:
* css3/masking/mask-repeat-space-content.html:
* css3/masking/mask-repeat-space-padding-expected.html:
* css3/masking/mask-repeat-space-padding.html:
* fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html: Added.
* fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html: Added.
* fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html: Added.
* fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html: Added.
* fast/backgrounds/resources/black25x25.png: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1expectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1html">trunk/LayoutTests/css3/background/background-repeat-round-auto1.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2expectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2html">trunk/LayoutTests/css3/background/background-repeat-round-auto2.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundborderexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundborderhtml">trunk/LayoutTests/css3/background/background-repeat-round-border.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundcontentexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundcontenthtml">trunk/LayoutTests/css3/background/background-repeat-round-content.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacecontentexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacecontenthtml">trunk/LayoutTests/css3/background/background-repeat-space-content.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddingexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddinghtml">trunk/LayoutTests/css3/background/background-repeat-space-padding.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto1expectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto1html">trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto2expectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto2html">trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundborderexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundborderhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-border.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundcontentexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundcontenthtml">trunk/LayoutTests/css3/masking/mask-repeat-round-content.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacecontentexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacecontenthtml">trunk/LayoutTests/css3/masking/mask-repeat-space-content.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacepaddingexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacepaddinghtml">trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerh">trunk/Source/WebCore/platform/graphics/GraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayercpp">trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayerh">trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayercpp">trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayerh">trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsStateh">trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxModelObjectcpp">trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxModelObjecth">trunk/Source/WebCore/rendering/RenderBoxModelObject.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingshapesShapeOutsideInfocpp">trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundsresourcesblack25x25png">trunk/LayoutTests/fast/backgrounds/resources/black25x25.png</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/ChangeLog        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2014-04-04  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Subpixel rendering: Move background images to device pixel boundaries.
+        https://bugs.webkit.org/show_bug.cgi?id=131144
+
+        Reviewed by Simon Fraser.
+
+        Replace integral snapping with device pixel snapping.
+        Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.
+
+        * css3/background/background-repeat-round-auto1-expected.html:
+        * css3/background/background-repeat-round-auto1.html:
+        * css3/background/background-repeat-round-auto2-expected.html:
+        * css3/background/background-repeat-round-auto2.html:
+        * css3/background/background-repeat-round-border-expected.html:
+        * css3/background/background-repeat-round-border.html:
+        * css3/background/background-repeat-round-content-expected.html:
+        * css3/background/background-repeat-round-content.html:
+        * css3/background/background-repeat-space-content-expected.html:
+        * css3/background/background-repeat-space-content.html:
+        * css3/background/background-repeat-space-padding-expected.html:
+        * css3/background/background-repeat-space-padding.html:
+        * css3/masking/mask-repeat-round-auto1-expected.html:
+        * css3/masking/mask-repeat-round-auto1.html:
+        * css3/masking/mask-repeat-round-auto2-expected.html:
+        * css3/masking/mask-repeat-round-auto2.html:
+        * css3/masking/mask-repeat-round-border-expected.html:
+        * css3/masking/mask-repeat-round-border.html:
+        * css3/masking/mask-repeat-round-content-expected.html:
+        * css3/masking/mask-repeat-round-content.html:
+        * css3/masking/mask-repeat-space-content-expected.html:
+        * css3/masking/mask-repeat-space-content.html:
+        * css3/masking/mask-repeat-space-padding-expected.html:
+        * css3/masking/mask-repeat-space-padding.html:
+        * fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html: Added.
+        * fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html: Added.
+        * fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html: Added.
+        * fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html: Added.
+        * fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html: Added.
+        * fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html: Added.
+        * fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html: Added.
+        * fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html: Added.
+        * fast/backgrounds/resources/black25x25.png: Added.
+
</ins><span class="cx"> 2014-04-04  Mihnea Ovidenie  &lt;mihnea@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CSSRegions] Region's behaviour not updated when becoming valid from invalid
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 111px 88px;
</del><ins>+                background-size: 50px auto;
</ins><span class="cx">                 background-repeat: repeat;
</span><span class="cx">                 background-origin: border-box;
</span><span class="cx">                 background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto1.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto1.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto1.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 106px auto;
</del><ins>+                background-size: 50px auto;
</ins><span class="cx">                 background-repeat: round repeat;
</span><span class="cx">                 background-origin: border-box;
</span><span class="cx">                 background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 124px 100px;
</del><ins>+                background-size: auto 50px;
</ins><span class="cx">                 background-repeat: repeat;
</span><span class="cx">                 background-origin: border-box;
</span><span class="cx">                 background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto2.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto2.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto2.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: auto 99px;
</del><ins>+                background-size: auto 50px;
</ins><span class="cx">                 background-repeat: repeat round;
</span><span class="cx">                 background-origin: border-box;
</span><span class="cx">                 background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundborderexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 111px 85px;
</del><ins>+                background-size: 50px;
</ins><span class="cx">                 background-repeat: repeat;
</span><span class="cx">                 background-origin: border-box;
</span><span class="cx">                 background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundborderhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-border.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-border.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-border.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 106px;
</del><ins>+                background-size: 50px;
</ins><span class="cx">                 background-repeat: round;
</span><span class="cx">                 background-origin: border-box;
</span><span class="cx">                 background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundcontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 72px 40px;
</del><ins>+                background-size: 100px;
</ins><span class="cx">                 background-repeat: repeat;
</span><span class="cx">                 background-origin: content-box;
</span><span class="cx">                 background-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundcontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 background-image: url(resources/circle.png);
</span><del>-                background-size: 70px 40px;
</del><ins>+                background-size: 100px;
</ins><span class="cx">                 background-repeat: round;
</span><span class="cx">                 background-origin: content-box;
</span><span class="cx">                 background-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacecontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -3,14 +3,17 @@
</span><span class="cx">     &lt;head&gt;
</span><span class="cx">         &lt;style&gt;
</span><span class="cx">             div {
</span><del>-                width: 800px;
</del><ins>+                width: 600px;
</ins><span class="cx">                 height: 400px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 padding: 50px;
</span><del>-            }
</del><ins>+                background-origin: content-box;
+                background-clip: content-box;
+                background-repeat: no-repeat;
+           }
</ins><span class="cx">         &lt;/style&gt;
</span><span class="cx">         &lt;script&gt;
</span><del>-            var sizeX = 121, sizeY = 93, spaceX = 14, spaceY = 9, width = 800, height = 400;
</del><ins>+            var sizeX = 100, sizeY = 80, spaceX = 0, spaceY = 0, width = 600, height = 400;
</ins><span class="cx"> 
</span><span class="cx">             var urls = Array(), size = Array(), position = Array();
</span><span class="cx"> 
</span><span class="lines">@@ -27,10 +30,7 @@
</span><span class="cx"> 
</span><span class="cx">                 div.style.cssText += &quot;background-image: &quot; + urls.join(&quot;, &quot;) + &quot;;&quot; +
</span><span class="cx">                                      &quot;background-size: &quot; + size.join(&quot;, &quot;)  + &quot;;&quot; +
</span><del>-                                     &quot;background-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot; +
-                                     &quot;background-repeat: no-repeat;&quot; +
-                                     &quot;background-origin: content-box;&quot; +
-                                     &quot;background-clip: content-box;&quot;;
</del><ins>+                                     &quot;background-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot;;
</ins><span class="cx">            }
</span><span class="cx">        &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacecontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -3,12 +3,12 @@
</span><span class="cx">     &lt;head&gt;
</span><span class="cx">         &lt;style&gt;
</span><span class="cx">             div {
</span><del>-                width: 800px;
</del><ins>+                width: 600px;
</ins><span class="cx">                 height: 400px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 background-image: url(&quot;resources/circle.png&quot;);
</span><del>-                background-size: 121px 93px;
</del><ins>+                background-size: 100px;
</ins><span class="cx">                 background-repeat: space space;
</span><span class="cx">                 background-origin: content-box;
</span><span class="cx">                 background-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddingexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -7,10 +7,13 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 padding: 50px;
</span><ins>+                background-repeat: no-repeat;
+                background-origin: padding-box;
+                background-clip: padding-box;
</ins><span class="cx">             }
</span><span class="cx">         &lt;/style&gt;
</span><span class="cx">         &lt;script&gt;
</span><del>-            var sizeX = 153, sizeY = 127, spaceX = 20, spaceY = 9, width = 700, height = 600;
</del><ins>+            var sizeX = 150, sizeY = 120, spaceX = 25, spaceY = 20, width = 400, height = 300;
</ins><span class="cx"> 
</span><span class="cx">             var urls = Array(), size = Array(), position = Array();
</span><span class="cx"> 
</span><span class="lines">@@ -27,10 +30,7 @@
</span><span class="cx"> 
</span><span class="cx">                 div.style.cssText += &quot;background-image: &quot; + urls.join(&quot;, &quot;) + &quot;;&quot; +
</span><span class="cx">                                      &quot;background-size: &quot; + size.join(&quot;, &quot;)  + &quot;;&quot; +
</span><del>-                                     &quot;background-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot; +
-                                     &quot;background-repeat: no-repeat;&quot; +
-                                     &quot;background-origin: padding-box;&quot; +
-                                     &quot;background-clip: padding-box;&quot;;
</del><ins>+                                     &quot;background-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot;;
</ins><span class="cx">            }
</span><span class="cx">        &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddinghtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-padding.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-padding.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-padding.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx">                 border: 50px solid transparent;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 background-image: url(&quot;resources/circle.png&quot;);
</span><del>-                background-size: 153px 127px;
</del><ins>+                background-size: 150px;
</ins><span class="cx">                 background-repeat: space;
</span><span class="cx">                 background-origin: padding-box;
</span><span class="cx">                 background-clip: padding-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto1expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 111px 88px;
</del><ins>+                -webkit-mask-size: 100px;
</ins><span class="cx">                 -webkit-mask-repeat: repeat;
</span><span class="cx">                 -webkit-mask-origin: border-box;
</span><span class="cx">                 -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto1html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 106px auto;
</del><ins>+                -webkit-mask-size: 100px;
</ins><span class="cx">                 -webkit-mask-repeat: round repeat;
</span><span class="cx">                 -webkit-mask-origin: border-box;
</span><span class="cx">                 -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto2expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 124px 100px;
</del><ins>+                -webkit-mask-size: 50px;
</ins><span class="cx">                 -webkit-mask-repeat: repeat;
</span><span class="cx">                 -webkit-mask-origin: border-box;
</span><span class="cx">                 -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto2html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: auto 99px;
</del><ins>+                -webkit-mask-size: 50px;
</ins><span class="cx">                 -webkit-mask-repeat: repeat round;
</span><span class="cx">                 -webkit-mask-origin: border-box;
</span><span class="cx">                 -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundborderexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 111px 85px;
</del><ins>+                -webkit-mask-size: 50px;
</ins><span class="cx">                 -webkit-mask-repeat: repeat;
</span><span class="cx">                 -webkit-mask-origin: border-box;
</span><span class="cx">                 -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundborderhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-border.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-border.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-border.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 106px;
</del><ins>+                -webkit-mask-size: 50px;
</ins><span class="cx">                 -webkit-mask-repeat: round;
</span><span class="cx">                 -webkit-mask-origin: border-box;
</span><span class="cx">                 -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundcontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 72px 40px;
</del><ins>+                -webkit-mask-size: 50px;
</ins><span class="cx">                 -webkit-mask-repeat: repeat;
</span><span class="cx">                 -webkit-mask-origin: content-box;
</span><span class="cx">                 -webkit-mask-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundcontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(resources/circle.png);
</span><del>-                -webkit-mask-size: 70px 40px;
</del><ins>+                -webkit-mask-size: 50px;
</ins><span class="cx">                 -webkit-mask-repeat: round;
</span><span class="cx">                 -webkit-mask-origin: content-box;
</span><span class="cx">                 -webkit-mask-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacecontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -13,17 +13,20 @@
</span><span class="cx">                 background-color: red;
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><ins>+                -webkit-mask-repeat: no-repeat;
+                -webkit-mask-origin: content-box;
+                -webkit-mask-clip: content-box;
</ins><span class="cx">             }
</span><span class="cx">         &lt;/style&gt;
</span><span class="cx">         &lt;script&gt;
</span><del>-            var sizeX = 121, sizeY = 93, spaceX = 58, spaceY = 10, width = 300, height = 300;
</del><ins>+            var sizeX = 100, sizeY = 80, spaceX = 0, spaceY = 30, width = 300, height = 300;
</ins><span class="cx"> 
</span><span class="cx">             var urls = Array(), size = Array(), position = Array();
</span><span class="cx"> 
</span><span class="cx">             function addMasks() {
</span><span class="cx">                 for (var x = 0; x &lt; width; x += sizeX + spaceX) {
</span><span class="cx">                     for (var y = 0; y &lt; height; y += sizeY + spaceY) {
</span><del>-                        urls.push(&quot;url(resources/circle.svg)&quot;);
</del><ins>+                        urls.push(&quot;url(resources/circle.png)&quot;);
</ins><span class="cx">                         size.push(sizeX + &quot;px &quot; + sizeY + &quot;px&quot;);
</span><span class="cx">                         position.push(x + &quot;px &quot; + y + &quot;px&quot;);
</span><span class="cx">                     }
</span><span class="lines">@@ -33,10 +36,7 @@
</span><span class="cx"> 
</span><span class="cx">                 div.style.cssText += &quot;-webkit-mask-image: &quot; + urls.join(&quot;, &quot;) + &quot;;&quot; +
</span><span class="cx">                                      &quot;-webkit-mask-size: &quot; + size.join(&quot;, &quot;)  + &quot;;&quot; +
</span><del>-                                     &quot;-webkit-mask-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot; +
-                                     &quot;-webkit-mask-repeat: no-repeat;&quot; +
-                                     &quot;-webkit-mask-origin: content-box;&quot; +
-                                     &quot;-webkit-mask-clip: content-box;&quot;;
</del><ins>+                                     &quot;-webkit-mask-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot;;
</ins><span class="cx">            }
</span><span class="cx">        &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacecontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -13,8 +13,8 @@
</span><span class="cx">                 background-color: red;
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><del>-                -webkit-mask-image: url(&quot;resources/circle.svg&quot;);
-                -webkit-mask-size: 121px 93px;
</del><ins>+                -webkit-mask-image: url(&quot;resources/circle.png&quot;);
+                -webkit-mask-size: 100px;
</ins><span class="cx">                 -webkit-mask-repeat: space space;
</span><span class="cx">                 -webkit-mask-origin: content-box;
</span><span class="cx">                 -webkit-mask-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacepaddingexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -13,10 +13,13 @@
</span><span class="cx">                 background-color: red;
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><ins>+                -webkit-mask-repeat: no-repeat;
+                -webkit-mask-origin: padding-box;
+                -webkit-mask-clip: padding-box;
</ins><span class="cx">             }
</span><span class="cx">         &lt;/style&gt;
</span><span class="cx">         &lt;script&gt;
</span><del>-            var sizeX = 153, sizeY = 127, spaceX = 20, spaceY = 9, width = 700, height = 600;
</del><ins>+            var sizeX = 100, sizeY = 80, spaceX = 0, spaceY = 0, width = 700, height = 600;
</ins><span class="cx"> 
</span><span class="cx">             var urls = Array(), size = Array(), position = Array();
</span><span class="cx"> 
</span><span class="lines">@@ -33,10 +36,7 @@
</span><span class="cx"> 
</span><span class="cx">                 div.style.cssText += &quot;-webkit-mask-image: &quot; + urls.join(&quot;, &quot;) + &quot;;&quot; +
</span><span class="cx">                                      &quot;-webkit-mask-size: &quot; + size.join(&quot;, &quot;)  + &quot;;&quot; +
</span><del>-                                     &quot;-webkit-mask-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot; +
-                                     &quot;-webkit-mask-repeat: no-repeat;&quot; +
-                                     &quot;-webkit-mask-origin: padding-box;&quot; +
-                                     &quot;-webkit-mask-clip: padding-box;&quot;;
</del><ins>+                                     &quot;-webkit-mask-position: &quot; + position.join(&quot;, &quot;) + &quot;;&quot;;
</ins><span class="cx">            }
</span><span class="cx">        &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacepaddinghtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">                 border: 50px solid blue;
</span><span class="cx">                 padding: 50px;
</span><span class="cx">                 -webkit-mask-image: url(&quot;resources/circle.png&quot;);
</span><del>-                -webkit-mask-size: 153px 127px;
</del><ins>+                -webkit-mask-size: 100px;
</ins><span class="cx">                 -webkit-mask-repeat: space;
</span><span class="cx">                 -webkit-mask-origin: padding-box;
</span><span class="cx">                 -webkit-mask-position: 150px 150px; /* This should be igonored because of repeat: space */
</span></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that bitmap background images sized and positioned properly on subpixels.&lt;/title&gt;
+&lt;head&gt;
+&lt;style&gt;
+  div {
+    background: black;
+    width: 9px;
+    height: 9px;
+    position: fixed;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  adjustment = 0.1;
+  w=0.1; h=0.1;
+  for (i = 0; i &lt; 15; ++i) {
+    adjustment+=0.1;
+    for (j = 0; j &lt; 15; ++j) {
+      var e = document.createElement(&quot;div&quot;);
+      e.style.top = ((w + 1) * i + j * adjustment) + &quot;px&quot;;
+      e.style.left = ((w + 1) * j + i * adjustment) + &quot;px&quot;;
+      e.style.width = w + &quot;px&quot;;
+      e.style.height = h + &quot;px&quot;;
+      container.appendChild(e);
+      w+=0.1;
+      h+=0.1;
+    }
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that bitmap background images sized and positioned properly on subpixels.&lt;/title&gt;
+&lt;head&gt;
+&lt;style&gt;
+  div {
+    background: url(&quot;resources/black25x25.png&quot;);
+    width: 9px;
+    height: 9px;
+    position: fixed;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  adjustment = 0.1;
+  w=0.1; h=0.1;
+  for (i = 0; i &lt; 15; ++i) {
+    adjustment+=0.1;
+    for (j = 0; j &lt; 15; ++j) {
+      var e = document.createElement(&quot;div&quot;);
+      e.style.top = ((w + 1) * i + j * adjustment) + &quot;px&quot;;
+      e.style.left = ((w + 1) * j + i * adjustment) + &quot;px&quot;;
+      e.style.width = w + &quot;px&quot;;
+      e.style.height = h + &quot;px&quot;;
+      container.appendChild(e);
+      w+=0.1;
+      h+=0.1;
+    }
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that bitmap background images sized and positioned properly on subpixels when background-origin is present.&lt;/title&gt;
+&lt;style&gt;
+  div {
+    background: red;
+    position: fixed;
+    height: 150px;
+    width: 25px;
+    top: 0px;
+  }
+  .box {
+    background: black;
+    height: 25px;
+    width: 25px;
+  }
+
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  w = 0;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = ((50 + w) * i) + &quot;px&quot;;
+    e.style.height = (150 + w) + &quot;px&quot;;
+    container.appendChild(e);
+    w+=0.1;
+  }
+
+  w = 0;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.className = &quot;box&quot;;
+    e.style.top = &quot;50px&quot;;
+    e.style.left = 25 + ((50 + w ) * i) + &quot;px&quot;;
+    container.appendChild(e);
+    w+=0.1;
+  }
+
+  w = 0;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.className = &quot;box&quot;;
+    e.style.top = &quot;100px&quot;;
+    e.style.left = 25 + ((50 + w + 0.1) * i) + &quot;px&quot;;
+    container.appendChild(e);
+    w+=0.1;
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that bitmap background images sized and positioned properly on subpixels when background-origin is present.&lt;/title&gt;
+&lt;style&gt;
+  div {
+    background: url(&quot;resources/black25x25.png&quot;);
+    position: fixed;
+    top: 0px;
+    background-repeat: no-repeat;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  w=50; h=50;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundOrigin = &quot;border-box&quot;;
+    e.style.borderLeft = &quot;solid 25px red&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+
+  w=50; h=50;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.top = &quot;50px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundOrigin = &quot;padding-box&quot;;
+    e.style.borderLeft = &quot;solid 25px red&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+
+  w=50; h=50;
+  padding = 0;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.top = &quot;100px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundOrigin = &quot;content-box&quot;;
+    e.style.paddingLeft = padding + &quot;px&quot;;
+    e.style.borderLeft = &quot;solid 25px red&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+    padding+=0.1;
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that bitmap background images sized and positioned properly on subpixels when background-repeat is present.&lt;/title&gt;
+&lt;style&gt;
+  div {
+    background: black;
+    position: fixed;
+    top: 0px;
+  }
+  .thin {
+    background: white;
+    height: 0.5px;
+    width: 0.5px;
+  }
+  .thick {
+    background: white;
+    height: 1px;
+    width: 1px;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  w=50; h=150;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundRepeat = &quot;space&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+
+  w=25; h=25;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.top = &quot;150px&quot;;
+    e.style.left = ((w + 25) * i) + &quot;px&quot;;
+    e.style.width = &quot;25px&quot;;
+    e.style.height = &quot;25px&quot;;
+    e.style.backgroundRepeat = &quot;space&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+&lt;/script&gt;
+&lt;div class=thin style=&quot;left: 151px; top: 25px; width: 255px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thick style=&quot;left: 406px; top: 25px; width: 105px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thin style=&quot;left: 176px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thin style=&quot;left: 226.5px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thin style=&quot;left: 277.5px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thin style=&quot;left: 328.5px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thin style=&quot;left: 380px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thick style=&quot;left: 431.5px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;div class=thick style=&quot;left: 483px; top: 0px; height: 50px;&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that bitmap background images sized and positioned properly on subpixels when background-repeat is present.&lt;/title&gt;
+&lt;style&gt;
+  div {
+    background: url(&quot;resources/black25x25.png&quot;);
+    position: fixed;
+    top: 0px;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  w=50; h=50;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundRepeat = &quot;space&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+
+  w=50; h=50;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.top = &quot;50px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundRepeat = &quot;round&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+
+  w=50; h=50;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.top = &quot;100px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundRepeat = &quot;repeat&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+
+  w=50; h=50;
+  for (i = 0; i &lt; 10; ++i) {
+    var e = document.createElement(&quot;div&quot;);
+    e.style.left = (w * i) + &quot;px&quot;;
+    e.style.top = &quot;150px&quot;;
+    e.style.width = w + &quot;px&quot;;
+    e.style.height = h + &quot;px&quot;;
+    e.style.backgroundRepeat = &quot;no-repeat&quot;;
+    container.appendChild(e);
+    w+=0.1;
+    h+=0.1;
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that generated background images sized and positioned properly on subpixels.&lt;/title&gt;
+&lt;head&gt;
+&lt;style&gt;
+  div {
+    background: black;
+    width: 9px;
+    height: 9px;
+    position: fixed;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  adjustment = 0.1;
+  w=0.1; h=0.1;
+  for (i = 0; i &lt; 15; ++i) {
+    adjustment+=0.1;
+    for (j = 0; j &lt; 15; ++j) {
+      var e = document.createElement(&quot;div&quot;);
+      e.style.top = ((w + 1) * i + j * adjustment) + &quot;px&quot;;
+      e.style.left = ((w + 1) * j + i * adjustment) + &quot;px&quot;;
+      e.style.width = w + &quot;px&quot;;
+      e.style.height = h + &quot;px&quot;;
+      container.appendChild(e);
+      w+=0.1;
+      h+=0.1;
+    }
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that generated background images sized and positioned properly on subpixels.&lt;/title&gt;
+&lt;head&gt;
+&lt;style&gt;
+  div {
+    background: -webkit-linear-gradient(black, black);
+    width: 9px;
+    height: 9px;
+    position: fixed;
+  }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;p id=&quot;container&quot;&gt;&lt;/p&gt;
+&lt;script&gt;
+  var container = document.getElementById(&quot;container&quot;);
+  adjustment = 0.1;
+  w=0.1; h=0.1;
+  for (i = 0; i &lt; 15; ++i) {
+    adjustment+=0.1;
+    for (j = 0; j &lt; 15; ++j) {
+      var e = document.createElement(&quot;div&quot;);
+      e.style.top = ((w + 1) * i + j * adjustment) + &quot;px&quot;;
+      e.style.left = ((w + 1) * j + i * adjustment) + &quot;px&quot;;
+      e.style.width = w + &quot;px&quot;;
+      e.style.height = h + &quot;px&quot;;
+      container.appendChild(e);
+      w+=0.1;
+      h+=0.1;
+    }
+  }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundsresourcesblack25x25png"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/fast/backgrounds/resources/black25x25.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/fast/backgrounds/resources/black25x25.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/ChangeLog        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1,3 +1,71 @@
</span><ins>+2014-04-04  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Subpixel rendering: Move background images to device pixel boundaries.
+        https://bugs.webkit.org/show_bug.cgi?id=131144
+
+        Reviewed by Simon Fraser.
+
+        Replace integral snapping with device pixel snapping.
+        Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.
+
+        Tests: fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html
+               fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html
+               fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html
+               fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html
+
+        * platform/graphics/GraphicsLayer.h:
+        (WebCore::GraphicsLayer::setContentsTilePhase):
+        (WebCore::GraphicsLayer::contentsTilePhase):
+        (WebCore::GraphicsLayer::setContentsTileSize):
+        (WebCore::GraphicsLayer::contentsTileSize):
+        * platform/graphics/texmap/TextureMapperLayer.cpp:
+        (WebCore::TextureMapperLayer::setContentsTileSize):
+        (WebCore::TextureMapperLayer::setContentsTilePhase):
+        * platform/graphics/texmap/TextureMapperLayer.h:
+        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
+        (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
+        (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
+        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
+        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::repaintLayerRectsForImage):
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
+        (WebCore::resolveWidthForRatio):
+        (WebCore::resolveHeightForRatio):
+        (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
+        (WebCore::resolveAgainstIntrinsicRatio):
+        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
+        (WebCore::RenderBoxModelObject::calculateFillTileSize):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase):
+        (WebCore::getSpace):
+        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
+        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
+        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
+        (WebCore::RenderBoxModelObject::paintNinePieceImage):
+        (WebCore::applySubPixelHeuristicForTileSize): Deleted.
+        * rendering/RenderBoxModelObject.h:
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::spaceSize):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setSpaceSize):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseX):
+        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseY):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
+        * rendering/shapes/ShapeOutsideInfo.cpp:
+        (WebCore::getShapeImageAndRect):
+
</ins><span class="cx"> 2014-04-04  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] Unreviewed test fix (crash in debug build).
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -368,11 +368,11 @@
</span><span class="cx">     virtual void setContentsNeedsDisplay() { };
</span><span class="cx"> 
</span><span class="cx">     // The tile phase is relative to the GraphicsLayer bounds.
</span><del>-    virtual void setContentsTilePhase(const IntPoint&amp; p) { m_contentsTilePhase = p; }
-    IntPoint contentsTilePhase() const { return m_contentsTilePhase; }
</del><ins>+    virtual void setContentsTilePhase(const FloatPoint&amp; p) { m_contentsTilePhase = p; }
+    FloatPoint contentsTilePhase() const { return m_contentsTilePhase; }
</ins><span class="cx"> 
</span><del>-    virtual void setContentsTileSize(const IntSize&amp; s) { m_contentsTileSize = s; }
-    IntSize contentsTileSize() const { return m_contentsTileSize; }
</del><ins>+    virtual void setContentsTileSize(const FloatSize&amp; s) { m_contentsTileSize = s; }
+    FloatSize contentsTileSize() const { return m_contentsTileSize; }
</ins><span class="cx">     bool hasContentsTiling() const { return !m_contentsTileSize.isEmpty(); }
</span><span class="cx"> 
</span><span class="cx">     // Set that the position/size of the contents (image or video).
</span><span class="lines">@@ -610,8 +610,8 @@
</span><span class="cx"> 
</span><span class="cx">     FloatRect m_contentsRect;
</span><span class="cx">     FloatRect m_contentsClippingRect;
</span><del>-    IntPoint m_contentsTilePhase;
-    IntSize m_contentsTileSize;
</del><ins>+    FloatPoint m_contentsTilePhase;
+    FloatSize m_contentsTileSize;
</ins><span class="cx"> 
</span><span class="cx">     int m_repaintCount;
</span><span class="cx">     CustomAppearance m_customAppearance;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -568,7 +568,7 @@
</span><span class="cx">     m_patternTransformDirty = true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TextureMapperLayer::setContentsTileSize(const IntSize&amp; size)
</del><ins>+void TextureMapperLayer::setContentsTileSize(const FloatSize&amp; size)
</ins><span class="cx"> {
</span><span class="cx">     if (size == m_state.contentsTileSize)
</span><span class="cx">         return;
</span><span class="lines">@@ -576,7 +576,7 @@
</span><span class="cx">     m_patternTransformDirty = true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TextureMapperLayer::setContentsTilePhase(const IntPoint&amp; phase)
</del><ins>+void TextureMapperLayer::setContentsTilePhase(const FloatPoint&amp; phase)
</ins><span class="cx"> {
</span><span class="cx">     if (phase == m_state.contentsTilePhase)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -99,8 +99,8 @@
</span><span class="cx">     void setBackfaceVisibility(bool);
</span><span class="cx">     void setOpacity(float);
</span><span class="cx">     void setSolidColor(const Color&amp;);
</span><del>-    void setContentsTileSize(const IntSize&amp;);
-    void setContentsTilePhase(const IntPoint&amp;);
</del><ins>+    void setContentsTileSize(const FloatSize&amp;);
+    void setContentsTilePhase(const FloatPoint&amp;);
</ins><span class="cx"> #if ENABLE(CSS_FILTERS)
</span><span class="cx">     void setFilters(const FilterOperations&amp;);
</span><span class="cx"> #endif
</span><span class="lines">@@ -210,8 +210,8 @@
</span><span class="cx">         TransformationMatrix childrenTransform;
</span><span class="cx">         float opacity;
</span><span class="cx">         FloatRect contentsRect;
</span><del>-        IntSize contentsTileSize;
-        IntPoint contentsTilePhase;
</del><ins>+        FloatSize contentsTileSize;
+        FloatPoint contentsTilePhase;
</ins><span class="cx">         TextureMapperLayer* maskLayer;
</span><span class="cx">         TextureMapperLayer* replicaLayer;
</span><span class="cx">         Color solidColor;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -346,7 +346,7 @@
</span><span class="cx">     didChangeLayerState();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CoordinatedGraphicsLayer::setContentsTileSize(const IntSize&amp; s)
</del><ins>+void CoordinatedGraphicsLayer::setContentsTileSize(const FloatSize&amp; s)
</ins><span class="cx"> {
</span><span class="cx">     if (contentsTileSize() == s)
</span><span class="cx">         return;
</span><span class="lines">@@ -357,7 +357,7 @@
</span><span class="cx">     didChangeLayerState();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void CoordinatedGraphicsLayer::setContentsTilePhase(const IntPoint&amp; p)
</del><ins>+void CoordinatedGraphicsLayer::setContentsTilePhase(const FloatPoint&amp; p)
</ins><span class="cx"> {
</span><span class="cx">     if (contentsTilePhase() == p)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -85,8 +85,8 @@
</span><span class="cx">     virtual void setBackfaceVisibility(bool) override;
</span><span class="cx">     virtual void setOpacity(float) override;
</span><span class="cx">     virtual void setContentsRect(const FloatRect&amp;) override;
</span><del>-    virtual void setContentsTilePhase(const IntPoint&amp;) override;
-    virtual void setContentsTileSize(const IntSize&amp;) override;
</del><ins>+    virtual void setContentsTilePhase(const FloatPoint&amp;) override;
+    virtual void setContentsTileSize(const FloatSize&amp;) override;
</ins><span class="cx">     virtual void setContentsToImage(Image*) override;
</span><span class="cx">     virtual void setContentsToSolidColor(const Color&amp;) override;
</span><span class="cx">     virtual void setShowDebugBorder(bool) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsStateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -142,8 +142,8 @@
</span><span class="cx">     TransformationMatrix transform;
</span><span class="cx">     TransformationMatrix childrenTransform;
</span><span class="cx">     FloatRect contentsRect;
</span><del>-    IntPoint contentsTilePhase;
-    IntSize contentsTileSize;
</del><ins>+    FloatPoint contentsTilePhase;
+    FloatSize contentsTileSize;
</ins><span class="cx">     float opacity;
</span><span class="cx">     Color solidColor;
</span><span class="cx">     Color debugBorderColor;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1623,7 +1623,7 @@
</span><span class="cx">                 return true;
</span><span class="cx">             }
</span><span class="cx">             
</span><del>-            IntRect rectToRepaint = geometry.destRect();
</del><ins>+            LayoutRect rectToRepaint = geometry.destRect();
</ins><span class="cx">             bool shouldClipToLayer = true;
</span><span class="cx"> 
</span><span class="cx">             // If this is the root background layer, we may need to extend the repaintRect if the FrameView has an
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxModelObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -773,11 +773,11 @@
</span><span class="cx">     // FIXME: In the bgLayer-&gt;hasFiniteBounds() case, we could improve the culling test
</span><span class="cx">     // by verifying whether the background image covers the entire layout rect.
</span><span class="cx">     if (!bgLayer-&gt;next()) {
</span><del>-        IntRect backgroundRect(pixelSnappedIntRect(scrolledPaintRect));
</del><ins>+        LayoutRect backgroundRect(scrolledPaintRect);
</ins><span class="cx">         bool boxShadowShouldBeAppliedToBackground = this-&gt;boxShadowShouldBeAppliedToBackground(bleedAvoidance, box);
</span><span class="cx">         if (boxShadowShouldBeAppliedToBackground || !shouldPaintBackgroundImage || !bgLayer-&gt;hasOpaqueImage(this) || !bgLayer-&gt;hasRepeatXY()) {
</span><span class="cx">             if (!boxShadowShouldBeAppliedToBackground)
</span><del>-                backgroundRect.intersect(pixelSnappedIntRect(paintInfo.rect));
</del><ins>+                backgroundRect.intersect(paintInfo.rect);
</ins><span class="cx"> 
</span><span class="cx">             // If we have an alpha and we are painting the root element, go ahead and blend with the base background color.
</span><span class="cx">             Color baseColor;
</span><span class="lines">@@ -792,16 +792,17 @@
</span><span class="cx">             if (boxShadowShouldBeAppliedToBackground)
</span><span class="cx">                 applyBoxShadowForBackground(context, &amp;style());
</span><span class="cx"> 
</span><ins>+            FloatRect backgroundRectForPainting = pixelSnappedForPainting(backgroundRect, deviceScaleFactor);
</ins><span class="cx">             if (baseColor.alpha()) {
</span><span class="cx">                 if (bgColor.alpha())
</span><span class="cx">                     baseColor = baseColor.blend(bgColor);
</span><span class="cx"> 
</span><del>-                context-&gt;fillRect(backgroundRect, baseColor, style().colorSpace(), CompositeCopy);
</del><ins>+                context-&gt;fillRect(backgroundRectForPainting, baseColor, style().colorSpace(), CompositeCopy);
</ins><span class="cx">             } else if (bgColor.alpha()) {
</span><span class="cx">                 CompositeOperator operation = shouldClearBackground ? CompositeCopy : context-&gt;compositeOperation();
</span><del>-                context-&gt;fillRect(backgroundRect, bgColor, style().colorSpace(), operation);
</del><ins>+                context-&gt;fillRect(backgroundRectForPainting, bgColor, style().colorSpace(), operation);
</ins><span class="cx">             } else if (shouldClearBackground)
</span><del>-                context-&gt;clearRect(backgroundRect);
</del><ins>+                context-&gt;clearRect(backgroundRectForPainting);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -809,7 +810,7 @@
</span><span class="cx">     if (shouldPaintBackgroundImage) {
</span><span class="cx">         BackgroundImageGeometry geometry;
</span><span class="cx">         calculateBackgroundImageGeometry(paintInfo.paintContainer, bgLayer, scrolledPaintRect, geometry, backgroundObject);
</span><del>-        geometry.clip(pixelSnappedIntRect(paintInfo.rect));
</del><ins>+        geometry.clip(LayoutRect(pixelSnappedRect));
</ins><span class="cx">         if (!geometry.destRect().isEmpty()) {
</span><span class="cx">             CompositeOperator compositeOp = op == CompositeSourceOver ? bgLayer-&gt;composite() : op;
</span><span class="cx">             auto clientForBackgroundImage = backgroundObject ? backgroundObject : this;
</span><span class="lines">@@ -818,8 +819,7 @@
</span><span class="cx">             bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.get(), bgLayer, geometry.tileSize());
</span><span class="cx">             if (image.get())
</span><span class="cx">                 image-&gt;setSpaceSize(geometry.spaceSize());
</span><del>-            context-&gt;drawTiledImage(image.get(), style().colorSpace(), geometry.destRect(), geometry.relativePhase(), geometry.tileSize(), 
-                compositeOp, useLowQualityScaling, bgLayer-&gt;blendMode());
</del><ins>+            context-&gt;drawTiledImage(image.get(), style().colorSpace(), geometry.destRect(), geometry.relativePhase(), geometry.tileSize(), compositeOp, useLowQualityScaling, bgLayer-&gt;blendMode());
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -829,60 +829,60 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline int resolveWidthForRatio(int height, const FloatSize&amp; intrinsicRatio)
</del><ins>+static inline int resolveWidthForRatio(LayoutUnit height, const FloatSize&amp; intrinsicRatio)
</ins><span class="cx"> {
</span><del>-    return ceilf(height * intrinsicRatio.width() / intrinsicRatio.height());
</del><ins>+    return height * intrinsicRatio.width() / intrinsicRatio.height();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline int resolveHeightForRatio(int width, const FloatSize&amp; intrinsicRatio)
</del><ins>+static inline int resolveHeightForRatio(LayoutUnit width, const FloatSize&amp; intrinsicRatio)
</ins><span class="cx"> {
</span><del>-    return ceilf(width * intrinsicRatio.height() / intrinsicRatio.width());
</del><ins>+    return width * intrinsicRatio.height() / intrinsicRatio.width();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline IntSize resolveAgainstIntrinsicWidthOrHeightAndRatio(const IntSize&amp; size, const FloatSize&amp; intrinsicRatio, int useWidth, int useHeight)
</del><ins>+static inline LayoutSize resolveAgainstIntrinsicWidthOrHeightAndRatio(const LayoutSize&amp; size, const FloatSize&amp; intrinsicRatio, LayoutUnit useWidth, LayoutUnit useHeight)
</ins><span class="cx"> {
</span><span class="cx">     if (intrinsicRatio.isEmpty()) {
</span><span class="cx">         if (useWidth)
</span><del>-            return IntSize(useWidth, size.height());
-        return IntSize(size.width(), useHeight);
</del><ins>+            return LayoutSize(useWidth, size.height());
+        return LayoutSize(size.width(), useHeight);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (useWidth)
</span><del>-        return IntSize(useWidth, resolveHeightForRatio(useWidth, intrinsicRatio));
-    return IntSize(resolveWidthForRatio(useHeight, intrinsicRatio), useHeight);
</del><ins>+        return LayoutSize(useWidth, resolveHeightForRatio(useWidth, intrinsicRatio));
+    return LayoutSize(resolveWidthForRatio(useHeight, intrinsicRatio), useHeight);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline IntSize resolveAgainstIntrinsicRatio(const IntSize&amp; size, const FloatSize&amp; intrinsicRatio)
</del><ins>+static inline LayoutSize resolveAgainstIntrinsicRatio(const LayoutSize&amp; size, const FloatSize&amp; intrinsicRatio)
</ins><span class="cx"> {
</span><span class="cx">     // Two possible solutions: (size.width(), solutionHeight) or (solutionWidth, size.height())
</span><span class="cx">     // &quot;... must be assumed to be the largest dimensions...&quot; = easiest answer: the rect with the largest surface area.
</span><span class="cx"> 
</span><del>-    int solutionWidth = resolveWidthForRatio(size.height(), intrinsicRatio);
-    int solutionHeight = resolveHeightForRatio(size.width(), intrinsicRatio);
</del><ins>+    LayoutUnit solutionWidth = resolveWidthForRatio(size.height(), intrinsicRatio);
+    LayoutUnit solutionHeight = resolveHeightForRatio(size.width(), intrinsicRatio);
</ins><span class="cx">     if (solutionWidth &lt;= size.width()) {
</span><span class="cx">         if (solutionHeight &lt;= size.height()) {
</span><span class="cx">             // If both solutions fit, choose the one covering the larger area.
</span><del>-            int areaOne = solutionWidth * size.height();
-            int areaTwo = size.width() * solutionHeight;
</del><ins>+            LayoutUnit areaOne = solutionWidth * size.height();
+            LayoutUnit areaTwo = size.width() * solutionHeight;
</ins><span class="cx">             if (areaOne &lt; areaTwo)
</span><del>-                return IntSize(size.width(), solutionHeight);
-            return IntSize(solutionWidth, size.height());
</del><ins>+                return LayoutSize(size.width(), solutionHeight);
+            return LayoutSize(solutionWidth, size.height());
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Only the first solution fits.
</span><del>-        return IntSize(solutionWidth, size.height());
</del><ins>+        return LayoutSize(solutionWidth, size.height());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Only the second solution fits, assert that.
</span><span class="cx">     ASSERT(solutionHeight &lt;= size.height());
</span><del>-    return IntSize(size.width(), solutionHeight);
</del><ins>+    return LayoutSize(size.width(), solutionHeight);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntSize RenderBoxModelObject::calculateImageIntrinsicDimensions(StyleImage* image, const IntSize&amp; positioningAreaSize, ScaleByEffectiveZoomOrNot shouldScaleOrNot) const
</del><ins>+LayoutSize RenderBoxModelObject::calculateImageIntrinsicDimensions(StyleImage* image, const LayoutSize&amp; positioningAreaSize, ScaleByEffectiveZoomOrNot shouldScaleOrNot) const
</ins><span class="cx"> {
</span><span class="cx">     // A generated image without a fixed size, will always return the container size as intrinsic size.
</span><span class="cx">     if (image-&gt;isGeneratedImage() &amp;&amp; image-&gt;usesImageContainerSize())
</span><del>-        return IntSize(positioningAreaSize.width(), positioningAreaSize.height());
</del><ins>+        return LayoutSize(positioningAreaSize.width(), positioningAreaSize.height());
</ins><span class="cx"> 
</span><span class="cx">     Length intrinsicWidth;
</span><span class="cx">     Length intrinsicHeight;
</span><span class="lines">@@ -895,13 +895,13 @@
</span><span class="cx">     // FIXME: Remove unnecessary rounding when layout is off ints: webkit.org/b/63656
</span><span class="cx">     if (intrinsicWidth.isPercent() &amp;&amp; intrinsicHeight.isPercent() &amp;&amp; intrinsicRatio.isEmpty()) {
</span><span class="cx">         // Resolve width/height percentages against positioningAreaSize, only if no intrinsic ratio is provided.
</span><del>-        int resolvedWidth = static_cast&lt;int&gt;(round(positioningAreaSize.width() * intrinsicWidth.percent() / 100));
-        int resolvedHeight = static_cast&lt;int&gt;(round(positioningAreaSize.height() * intrinsicHeight.percent() / 100));
-        return IntSize(resolvedWidth, resolvedHeight);
</del><ins>+        float resolvedWidth = positioningAreaSize.width() * intrinsicWidth.percent() / 100;
+        float resolvedHeight = positioningAreaSize.height() * intrinsicHeight.percent() / 100;
+        return LayoutSize(resolvedWidth, resolvedHeight);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    IntSize resolvedSize(intrinsicWidth.isFixed() ? intrinsicWidth.value() : 0, intrinsicHeight.isFixed() ? intrinsicHeight.value() : 0);
-    IntSize minimumSize(resolvedSize.width() &gt; 0 ? 1 : 0, resolvedSize.height() &gt; 0 ? 1 : 0);
</del><ins>+    LayoutSize resolvedSize(intrinsicWidth.isFixed() ? intrinsicWidth.value() : 0, intrinsicHeight.isFixed() ? intrinsicHeight.value() : 0);
+    LayoutSize minimumSize(resolvedSize.width() &gt; 0 ? 1 : 0, resolvedSize.height() &gt; 0 ? 1 : 0);
</ins><span class="cx">     if (shouldScaleOrNot == ScaleByEffectiveZoom)
</span><span class="cx">         resolvedSize.scale(style().effectiveZoom());
</span><span class="cx">     resolvedSize.clampToMinimumSize(minimumSize);
</span><span class="lines">@@ -927,18 +927,12 @@
</span><span class="cx">     return positioningAreaSize;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline void applySubPixelHeuristicForTileSize(LayoutSize&amp; tileSize, const IntSize&amp; positioningAreaSize)
</del><ins>+LayoutSize RenderBoxModelObject::calculateFillTileSize(const FillLayer* fillLayer, const LayoutSize&amp; positioningAreaSize) const
</ins><span class="cx"> {
</span><del>-    tileSize.setWidth(positioningAreaSize.width() - tileSize.width() &lt;= 1 ? tileSize.width().ceil() : tileSize.width().floor());
-    tileSize.setHeight(positioningAreaSize.height() - tileSize.height() &lt;= 1 ? tileSize.height().ceil() : tileSize.height().floor());
-}
-
-IntSize RenderBoxModelObject::calculateFillTileSize(const FillLayer* fillLayer, const IntSize&amp; positioningAreaSize) const
-{
</del><span class="cx">     StyleImage* image = fillLayer-&gt;image();
</span><span class="cx">     EFillSizeType type = fillLayer-&gt;size().type;
</span><span class="cx"> 
</span><del>-    IntSize imageIntrinsicSize = calculateImageIntrinsicDimensions(image, positioningAreaSize, ScaleByEffectiveZoom);
</del><ins>+    LayoutSize imageIntrinsicSize = calculateImageIntrinsicDimensions(image, positioningAreaSize, ScaleByEffectiveZoom);
</ins><span class="cx">     imageIntrinsicSize.scale(1 / image-&gt;imageScaleFactor(), 1 / image-&gt;imageScaleFactor());
</span><span class="cx">     switch (type) {
</span><span class="cx">         case SizeLength: {
</span><span class="lines">@@ -957,8 +951,6 @@
</span><span class="cx">             else if (layerHeight.isPercent() || layerHeight.isViewportPercentage())
</span><span class="cx">                 tileSize.setHeight(valueForLength(layerHeight, positioningAreaSize.height()));
</span><span class="cx"> 
</span><del>-            applySubPixelHeuristicForTileSize(tileSize, positioningAreaSize);
-
</del><span class="cx">             // If one of the values is auto we have to use the appropriate
</span><span class="cx">             // scale to maintain our aspect ratio.
</span><span class="cx">             if (layerWidth.isAuto() &amp;&amp; !layerHeight.isAuto()) {
</span><span class="lines">@@ -973,7 +965,7 @@
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             tileSize.clampNegativeToZero();
</span><del>-            return flooredIntSize(tileSize);
</del><ins>+            return tileSize;
</ins><span class="cx">         }
</span><span class="cx">         case SizeNone: {
</span><span class="cx">             // If both values are ‘auto’ then the intrinsic width and/or height of the image should be used, if any.
</span><span class="lines">@@ -986,46 +978,46 @@
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx">         case Contain:
</span><span class="cx">         case Cover: {
</span><del>-            float horizontalScaleFactor = imageIntrinsicSize.width()
-                ? static_cast&lt;float&gt;(positioningAreaSize.width()) / imageIntrinsicSize.width() : 1;
-            float verticalScaleFactor = imageIntrinsicSize.height()
-                ? static_cast&lt;float&gt;(positioningAreaSize.height()) / imageIntrinsicSize.height() : 1;
</del><ins>+            float horizontalScaleFactor = imageIntrinsicSize.width() ? (positioningAreaSize.width() / imageIntrinsicSize.width()).toFloat() : 1;
+            float verticalScaleFactor = imageIntrinsicSize.height() ? (positioningAreaSize.height() / imageIntrinsicSize.height()).toFloat() : 1;
</ins><span class="cx">             float scaleFactor = type == Contain ? std::min(horizontalScaleFactor, verticalScaleFactor) : std::max(horizontalScaleFactor, verticalScaleFactor);
</span><del>-            return IntSize(std::max(1, static_cast&lt;int&gt;(imageIntrinsicSize.width() * scaleFactor)), std::max(1, static_cast&lt;int&gt;(imageIntrinsicSize.height() * scaleFactor)));
</del><ins>+            float deviceScaleFactor = document().deviceScaleFactor();
+            return LayoutSize(std::max&lt;LayoutUnit&gt;(1 / deviceScaleFactor, imageIntrinsicSize.width() * scaleFactor),
+                std::max&lt;LayoutUnit&gt;(1 / deviceScaleFactor, imageIntrinsicSize.height() * scaleFactor));
</ins><span class="cx">        }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><del>-    return IntSize();
</del><ins>+    return LayoutSize();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX(int xOffset)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX(LayoutUnit xOffset)
</ins><span class="cx"> {
</span><del>-    m_destRect.move(std::max(xOffset, 0), 0);
-    m_phase.setX(-std::min(xOffset, 0));
-    m_destRect.setWidth(m_tileSize.width() + std::min(xOffset, 0));
</del><ins>+    m_destRect.move(std::max&lt;LayoutUnit&gt;(xOffset, 0), 0);
+    m_phase.setX(-std::min&lt;LayoutUnit&gt;(xOffset, 0));
+    m_destRect.setWidth(m_tileSize.width() + std::min&lt;float&gt;(xOffset, 0));
</ins><span class="cx"> }
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY(int yOffset)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY(LayoutUnit yOffset)
</ins><span class="cx"> {
</span><del>-    m_destRect.move(0, std::max(yOffset, 0));
-    m_phase.setY(-std::min(yOffset, 0));
-    m_destRect.setHeight(m_tileSize.height() + std::min(yOffset, 0));
</del><ins>+    m_destRect.move(0, std::max&lt;LayoutUnit&gt;(yOffset, 0));
+    m_phase.setY(-std::min&lt;LayoutUnit&gt;(yOffset, 0));
+    m_destRect.setHeight(m_tileSize.height() + std::min&lt;float&gt;(yOffset, 0));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment(const IntPoint&amp; attachmentPoint)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment(const LayoutPoint&amp; attachmentPoint)
</ins><span class="cx"> {
</span><del>-    IntPoint alignedPoint = attachmentPoint;
-    m_phase.move(std::max(alignedPoint.x() - m_destRect.x(), 0), std::max(alignedPoint.y() - m_destRect.y(), 0));
</del><ins>+    FloatPoint alignedPoint = attachmentPoint;
+    m_phase.move(std::max&lt;LayoutUnit&gt;(alignedPoint.x() - m_destRect.x(), 0), std::max&lt;LayoutUnit&gt;(alignedPoint.y() - m_destRect.y(), 0));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::clip(const IntRect&amp; clipRect)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::clip(const LayoutRect&amp; clipRect)
</ins><span class="cx"> {
</span><span class="cx">     m_destRect.intersect(clipRect);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntPoint RenderBoxModelObject::BackgroundImageGeometry::relativePhase() const
</del><ins>+LayoutPoint RenderBoxModelObject::BackgroundImageGeometry::relativePhase() const
</ins><span class="cx"> {
</span><del>-    IntPoint phase = m_phase;
</del><ins>+    LayoutPoint phase = m_phase;
</ins><span class="cx">     phase += m_destRect.location() - m_destOrigin;
</span><span class="cx">     return phase;
</span><span class="cx"> }
</span><span class="lines">@@ -1045,25 +1037,34 @@
</span><span class="cx">     return rootLayer-&gt;backing()-&gt;backgroundLayerPaintsFixedRootBackground();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline int getSpace(int areaSize, int tileSize)
</del><ins>+static inline LayoutUnit getSpace(LayoutUnit areaSize, LayoutUnit tileSize)
</ins><span class="cx"> {
</span><span class="cx">     int numberOfTiles = areaSize / tileSize;
</span><del>-    int space = -1;
</del><ins>+    LayoutUnit space = -1;
</ins><span class="cx"> 
</span><span class="cx">     if (numberOfTiles &gt; 1)
</span><del>-        space = roundedLayoutUnit((float)(areaSize - numberOfTiles * tileSize) / (numberOfTiles - 1));
</del><ins>+        space = (areaSize - numberOfTiles * tileSize) / (numberOfTiles - 1);
</ins><span class="cx"> 
</span><span class="cx">     return space;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting(BackgroundImageGeometry&amp; geometry) const
+{
+    float deviceScaleFactor = document().deviceScaleFactor();
+    // FIXME: We need a better rounding strategy to round/space out tiles.
+    geometry.setTileSize(LayoutSize(pixelSnappedForPainting(LayoutRect(geometry.destRect().location(), geometry.tileSize()), deviceScaleFactor).size()));
+    geometry.setSpaceSize(LayoutSize(pixelSnappedForPainting(LayoutRect(LayoutPoint(), geometry.spaceSize()), deviceScaleFactor).size()));
+    geometry.setDestOrigin(LayoutPoint(roundedForPainting(geometry.destOrigin(), deviceScaleFactor)));
+    geometry.setDestRect(LayoutRect(pixelSnappedForPainting(geometry.destRect(), deviceScaleFactor)));
+    geometry.setPhase(LayoutPoint(roundedForPainting(geometry.phase(), deviceScaleFactor)));
+}
+
</ins><span class="cx"> void RenderBoxModelObject::calculateBackgroundImageGeometry(const RenderLayerModelObject* paintContainer, const FillLayer* fillLayer, const LayoutRect&amp; paintRect,
</span><span class="cx">     BackgroundImageGeometry&amp; geometry, RenderElement* backgroundObject) const
</span><span class="cx"> {
</span><span class="cx">     LayoutUnit left = 0;
</span><span class="cx">     LayoutUnit top = 0;
</span><del>-    IntSize positioningAreaSize;
-    IntRect snappedPaintRect = pixelSnappedIntRect(paintRect);
-
</del><ins>+    LayoutSize positioningAreaSize;
</ins><span class="cx">     // Determine the background positioning area and set destRect to the background painting area.
</span><span class="cx">     // destRect will be adjusted later if the background is non-repeating.
</span><span class="cx">     // FIXME: transforms spec says that fixed backgrounds behave like scroll inside transforms. https://bugs.webkit.org/show_bug.cgi?id=15679
</span><span class="lines">@@ -1080,7 +1081,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (!fixedAttachment) {
</span><del>-        geometry.setDestRect(snappedPaintRect);
</del><ins>+        geometry.setDestRect(paintRect);
</ins><span class="cx"> 
</span><span class="cx">         LayoutUnit right = 0;
</span><span class="cx">         LayoutUnit bottom = 0;
</span><span class="lines">@@ -1102,14 +1103,14 @@
</span><span class="cx">         // its margins. Since those were added in already, we have to factor them out when computing
</span><span class="cx">         // the background positioning area.
</span><span class="cx">         if (isRoot()) {
</span><del>-            positioningAreaSize = pixelSnappedIntSize(toRenderBox(this)-&gt;size() - LayoutSize(left + right, top + bottom), toRenderBox(this)-&gt;location());
</del><ins>+            positioningAreaSize = toRenderBox(this)-&gt;size() - LayoutSize(left + right, top + bottom);
</ins><span class="cx">             if (view().frameView().hasExtendedBackgroundRectForPainting()) {
</span><del>-                IntRect extendedBackgroundRect = view().frameView().extendedBackgroundRectForPainting();
</del><ins>+                LayoutRect extendedBackgroundRect = view().frameView().extendedBackgroundRectForPainting();
</ins><span class="cx">                 left += (marginLeft() - extendedBackgroundRect.x());
</span><span class="cx">                 top += (marginTop() - extendedBackgroundRect.y());
</span><span class="cx">             }
</span><span class="cx">         } else
</span><del>-            positioningAreaSize = pixelSnappedIntSize(paintRect.size() - LayoutSize(left + right, top + bottom), paintRect.location());
</del><ins>+            positioningAreaSize = paintRect.size() - LayoutSize(left + right, top + bottom);
</ins><span class="cx">     } else {
</span><span class="cx">         geometry.setHasNonLocalGeometry();
</span><span class="cx"> 
</span><span class="lines">@@ -1119,107 +1120,102 @@
</span><span class="cx">         else
</span><span class="cx">             viewportRect.setLocation(toLayoutPoint(view().frameView().scrollOffsetForFixedPosition()));
</span><span class="cx"> 
</span><del>-        if (paintContainer) {
-            LayoutPoint absoluteContainerOffset = roundedLayoutPoint(paintContainer-&gt;localToAbsolute(FloatPoint()));
-            viewportRect.moveBy(-absoluteContainerOffset);
-        }
</del><ins>+        if (paintContainer)
+            viewportRect.moveBy(LayoutPoint(-paintContainer-&gt;localToAbsolute(FloatPoint())));
</ins><span class="cx"> 
</span><del>-        geometry.setDestRect(pixelSnappedIntRect(viewportRect));
</del><ins>+        geometry.setDestRect(viewportRect);
</ins><span class="cx">         positioningAreaSize = geometry.destRect().size();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     auto clientForBackgroundImage = backgroundObject ? backgroundObject : this;
</span><del>-    IntSize fillTileSize = calculateFillTileSize(fillLayer, positioningAreaSize);
</del><ins>+    LayoutSize fillTileSize = calculateFillTileSize(fillLayer, positioningAreaSize);
</ins><span class="cx">     fillLayer-&gt;image()-&gt;setContainerSizeForRenderer(clientForBackgroundImage, fillTileSize, style().effectiveZoom());
</span><span class="cx">     geometry.setTileSize(fillTileSize);
</span><span class="cx"> 
</span><span class="cx">     EFillRepeat backgroundRepeatX = fillLayer-&gt;repeatX();
</span><span class="cx">     EFillRepeat backgroundRepeatY = fillLayer-&gt;repeatY();
</span><del>-    int availableWidth = positioningAreaSize.width() - geometry.tileSize().width();
-    int availableHeight = positioningAreaSize.height() - geometry.tileSize().height();
</del><ins>+    LayoutUnit availableWidth = positioningAreaSize.width() - geometry.tileSize().width();
+    LayoutUnit availableHeight = positioningAreaSize.height() - geometry.tileSize().height();
</ins><span class="cx"> 
</span><span class="cx">     LayoutUnit computedXPosition = minimumValueForLength(fillLayer-&gt;xPosition(), availableWidth, true);
</span><span class="cx">     if (backgroundRepeatX == RoundFill &amp;&amp; positioningAreaSize.width() &gt; 0 &amp;&amp; fillTileSize.width() &gt; 0) {
</span><del>-        long nrTiles = lroundf((float)positioningAreaSize.width() / fillTileSize.width());
-        if (!nrTiles)
-            nrTiles = 1;
-
</del><ins>+        int numTiles = std::max(1, roundToInt(positioningAreaSize.width() / fillTileSize.width()));
</ins><span class="cx">         if (fillLayer-&gt;size().size.height().isAuto() &amp;&amp; backgroundRepeatY != RoundFill)
</span><del>-            fillTileSize.setHeight(fillTileSize.height() * positioningAreaSize.width() / (nrTiles * fillTileSize.width()));
</del><ins>+            fillTileSize.setHeight(fillTileSize.height() * positioningAreaSize.width() / (numTiles * fillTileSize.width()));
</ins><span class="cx"> 
</span><del>-        fillTileSize.setWidth(positioningAreaSize.width() / nrTiles);
</del><ins>+        fillTileSize.setWidth(positioningAreaSize.width() / numTiles);
</ins><span class="cx">         geometry.setTileSize(fillTileSize);
</span><del>-        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - roundToInt(computedXPosition + left) % geometry.tileSize().width() : 0);
-        geometry.setSpaceSize(FloatSize());
</del><ins>+        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - fmodf((computedXPosition + left), geometry.tileSize().width()) : 0);
+        geometry.setSpaceSize(LayoutSize());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     LayoutUnit computedYPosition = minimumValueForLength(fillLayer-&gt;yPosition(), availableHeight, true);
</span><span class="cx">     if (backgroundRepeatY == RoundFill &amp;&amp; positioningAreaSize.height() &gt; 0 &amp;&amp; fillTileSize.height() &gt; 0) {
</span><del>-        long nrTiles = lroundf((float)positioningAreaSize.height() / fillTileSize.height());
-        if (!nrTiles)
-            nrTiles = 1;
-
</del><ins>+        int numTiles = std::max(1, roundToInt(positioningAreaSize.height() / fillTileSize.height()));
</ins><span class="cx">         if (fillLayer-&gt;size().size.width().isAuto() &amp;&amp; backgroundRepeatX != RoundFill)
</span><del>-            fillTileSize.setWidth(fillTileSize.width() * positioningAreaSize.height() / (nrTiles * fillTileSize.height()));
</del><ins>+            fillTileSize.setWidth(fillTileSize.width() * positioningAreaSize.height() / (numTiles * fillTileSize.height()));
</ins><span class="cx"> 
</span><del>-        fillTileSize.setHeight(positioningAreaSize.height() / nrTiles);
</del><ins>+        fillTileSize.setHeight(positioningAreaSize.height() / numTiles);
</ins><span class="cx">         geometry.setTileSize(fillTileSize);
</span><del>-        geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - roundToInt(computedYPosition + top) % geometry.tileSize().height() : 0);
-        geometry.setSpaceSize(FloatSize());
</del><ins>+        geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - fmodf((computedYPosition + top), geometry.tileSize().height()) : 0);
+        geometry.setSpaceSize(LayoutSize());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (backgroundRepeatX == RepeatFill) {
</span><del>-        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - roundToInt(computedXPosition + left) % geometry.tileSize().width() : 0);
-        geometry.setSpaceSize(FloatSize(0, geometry.spaceSize().height()));
</del><ins>+        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() -  fmodf(computedXPosition + left, geometry.tileSize().width()): 0);
+        geometry.setSpaceSize(LayoutSize(0, geometry.spaceSize().height()));
</ins><span class="cx">     } else if (backgroundRepeatX == SpaceFill &amp;&amp; fillTileSize.width() &gt; 0) {
</span><del>-        int space = getSpace(positioningAreaSize.width(), geometry.tileSize().width());
-        int actualWidth = geometry.tileSize().width() + space;
</del><ins>+        LayoutUnit space = getSpace(positioningAreaSize.width(), geometry.tileSize().width());
+        LayoutUnit actualWidth = geometry.tileSize().width() + space;
</ins><span class="cx"> 
</span><span class="cx">         if (space &gt;= 0) {
</span><span class="cx">             computedXPosition = minimumValueForLength(Length(), availableWidth, true);
</span><del>-            geometry.setSpaceSize(FloatSize(space, 0));
-            geometry.setPhaseX(actualWidth ? actualWidth - roundToInt(computedXPosition + left) % actualWidth : 0);
</del><ins>+            geometry.setSpaceSize(LayoutSize(space, 0));
+            geometry.setPhaseX(actualWidth ? actualWidth - fmodf((computedXPosition + left), actualWidth) : 0);
</ins><span class="cx">         } else
</span><span class="cx">             backgroundRepeatX = NoRepeatFill;
</span><span class="cx">     }
</span><span class="cx">     if (backgroundRepeatX == NoRepeatFill) {
</span><del>-        int xOffset = fillLayer-&gt;backgroundXOrigin() == RightEdge ? availableWidth - computedXPosition : computedXPosition;
</del><ins>+        LayoutUnit xOffset = fillLayer-&gt;backgroundXOrigin() == RightEdge ? availableWidth - computedXPosition : computedXPosition;
</ins><span class="cx">         geometry.setNoRepeatX(left + xOffset);
</span><del>-        geometry.setSpaceSize(FloatSize(0, geometry.spaceSize().height()));
</del><ins>+        geometry.setSpaceSize(LayoutSize(0, geometry.spaceSize().height()));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (backgroundRepeatY == RepeatFill) {
</span><del>-        geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - roundToInt(computedYPosition + top) % geometry.tileSize().height() : 0);
-        geometry.setSpaceSize(FloatSize(geometry.spaceSize().width(), 0));
</del><ins>+        geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - fmodf(computedYPosition + top, geometry.tileSize().height()) : 0);
+        geometry.setSpaceSize(LayoutSize(geometry.spaceSize().width(), 0));
</ins><span class="cx">     } else if (backgroundRepeatY == SpaceFill &amp;&amp; fillTileSize.height() &gt; 0) {
</span><del>-        int space = getSpace(positioningAreaSize.height(), geometry.tileSize().height());
-        int actualHeight = geometry.tileSize().height() + space;
</del><ins>+        LayoutUnit space = getSpace(positioningAreaSize.height(), geometry.tileSize().height());
+        LayoutUnit actualHeight = geometry.tileSize().height() + space;
</ins><span class="cx"> 
</span><span class="cx">         if (space &gt;= 0) {
</span><span class="cx">             computedYPosition = minimumValueForLength(Length(), availableHeight, true);
</span><del>-            geometry.setSpaceSize(FloatSize(geometry.spaceSize().width(), space));
-            geometry.setPhaseY(actualHeight ? actualHeight - roundToInt(computedYPosition + top) % actualHeight : 0);
</del><ins>+            geometry.setSpaceSize(LayoutSize(geometry.spaceSize().width(), space));
+            geometry.setPhaseY(actualHeight ? actualHeight - fmodf((computedYPosition + top), actualHeight) : 0);
</ins><span class="cx">         } else
</span><span class="cx">             backgroundRepeatY = NoRepeatFill;
</span><span class="cx">     }
</span><span class="cx">     if (backgroundRepeatY == NoRepeatFill) {
</span><del>-        int yOffset = fillLayer-&gt;backgroundYOrigin() == BottomEdge ? availableHeight - computedYPosition : computedYPosition;
</del><ins>+        LayoutUnit yOffset = fillLayer-&gt;backgroundYOrigin() == BottomEdge ? availableHeight - computedYPosition : computedYPosition;
</ins><span class="cx">         geometry.setNoRepeatY(top + yOffset);
</span><del>-        geometry.setSpaceSize(FloatSize(geometry.spaceSize().width(), 0));
</del><ins>+        geometry.setSpaceSize(LayoutSize(geometry.spaceSize().width(), 0));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (fixedAttachment)
</span><del>-        geometry.useFixedAttachment(snappedPaintRect.location());
</del><ins>+        geometry.useFixedAttachment(paintRect.location());
</ins><span class="cx"> 
</span><del>-    geometry.clip(snappedPaintRect);
</del><ins>+    geometry.clip(paintRect);
</ins><span class="cx">     geometry.setDestOrigin(geometry.destRect().location());
</span><ins>+
+    pixelSnapBackgroundImageGeometryForPainting(geometry);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBoxModelObject::getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, IntRect&amp; destRect, IntPoint&amp; phase, IntSize&amp; tileSize) const
</del><ins>+void RenderBoxModelObject::getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, FloatRect&amp; destRect, FloatPoint&amp; phase, FloatSize&amp; tileSize) const
</ins><span class="cx"> {
</span><span class="cx">     const FillLayer* backgroundLayer = style().backgroundLayers();
</span><span class="cx">     BackgroundImageGeometry geometry;
</span><del>-    calculateBackgroundImageGeometry(paintContainer, backgroundLayer, destRect, geometry);
</del><ins>+    LayoutRect paintRect = LayoutRect(destRect);
+    calculateBackgroundImageGeometry(paintContainer, backgroundLayer, paintRect, geometry);
</ins><span class="cx">     phase = geometry.phase();
</span><span class="cx">     tileSize = geometry.tileSize();
</span><span class="cx">     destRect = geometry.destRect();
</span><span class="lines">@@ -1253,7 +1249,7 @@
</span><span class="cx">     rectWithOutsets.expand(style.imageOutsets(ninePieceImage));
</span><span class="cx">     IntRect borderImageRect = pixelSnappedIntRect(rectWithOutsets);
</span><span class="cx"> 
</span><del>-    IntSize imageSize = calculateImageIntrinsicDimensions(styleImage, borderImageRect.size(), DoNotScaleByEffectiveZoom);
</del><ins>+    LayoutSize imageSize = calculateImageIntrinsicDimensions(styleImage, borderImageRect.size(), DoNotScaleByEffectiveZoom);
</ins><span class="cx"> 
</span><span class="cx">     // If both values are ‘auto’ then the intrinsic width and/or height of the image should be used, if any.
</span><span class="cx">     styleImage-&gt;setContainerSizeForRenderer(this, imageSize, style.effectiveZoom());
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxModelObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -183,7 +183,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool canHaveBoxInfoInRegion() const { return !isFloating() &amp;&amp; !isReplaced() &amp;&amp; !isInline() &amp;&amp; !hasColumns() &amp;&amp; !isTableCell() &amp;&amp; isRenderBlock() &amp;&amp; !isRenderSVGBlock(); }
</span><span class="cx"> 
</span><del>-    void getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, IntRect&amp; destRect, IntPoint&amp; phase, IntSize&amp; tileSize) const;
</del><ins>+    void getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, FloatRect&amp; destRect, FloatPoint&amp; phase, FloatSize&amp; tileSize) const;
</ins><span class="cx">     void contentChanged(ContentChangeType);
</span><span class="cx">     bool hasAcceleratedCompositing() const;
</span><span class="cx"> 
</span><span class="lines">@@ -208,57 +208,43 @@
</span><span class="cx">         BackgroundImageGeometry()
</span><span class="cx">             : m_hasNonLocalGeometry(false)
</span><span class="cx">         { }
</span><del>-        IntPoint destOrigin() const { return m_destOrigin; }
-        void setDestOrigin(const IntPoint&amp; destOrigin)
-        {
-            m_destOrigin = destOrigin;
-        }
</del><ins>+        LayoutPoint destOrigin() const { return m_destOrigin; }
+        void setDestOrigin(const LayoutPoint&amp; destOrigin) { m_destOrigin = destOrigin; }
</ins><span class="cx">         
</span><del>-        IntRect destRect() const { return m_destRect; }
-        void setDestRect(const IntRect&amp; destRect)
-        {
-            m_destRect = destRect;
-        }
</del><ins>+        LayoutRect destRect() const { return m_destRect; }
+        void setDestRect(const LayoutRect&amp; destRect) { m_destRect = destRect; }
</ins><span class="cx"> 
</span><span class="cx">         // Returns the phase relative to the destination rectangle.
</span><del>-        IntPoint relativePhase() const;
</del><ins>+        LayoutPoint relativePhase() const;
</ins><span class="cx">         
</span><del>-        IntPoint phase() const { return m_phase; }   
-        void setPhase(const IntPoint&amp; phase)
-        {
-            m_phase = phase;
-        }
</del><ins>+        LayoutPoint phase() const { return m_phase; }
+        void setPhase(const LayoutPoint&amp; phase) { m_phase = phase; }
</ins><span class="cx"> 
</span><del>-        IntSize tileSize() const { return m_tileSize; }    
-        void setTileSize(const IntSize&amp; tileSize)
-        {
-            m_tileSize = tileSize;
-        }
-        FloatSize spaceSize() const { return m_space; }
-        void setSpaceSize(const FloatSize&amp; space)
-        {
-            m_space = space;
-        }
</del><ins>+        LayoutSize tileSize() const { return m_tileSize; }
+        void setTileSize(const LayoutSize&amp; tileSize) { m_tileSize = tileSize; }
</ins><span class="cx"> 
</span><del>-        void setPhaseX(int x) { m_phase.setX(x); }
-        void setPhaseY(int y) { m_phase.setY(y); }
</del><ins>+        LayoutSize spaceSize() const { return m_space; }
+        void setSpaceSize(const LayoutSize&amp; space) { m_space = space; }
+
+        void setPhaseX(LayoutUnit  x) { m_phase.setX(x); }
+        void setPhaseY(LayoutUnit y) { m_phase.setY(y); }
</ins><span class="cx">         
</span><del>-        void setNoRepeatX(int xOffset);
-        void setNoRepeatY(int yOffset);
</del><ins>+        void setNoRepeatX(LayoutUnit xOffset);
+        void setNoRepeatY(LayoutUnit yOffset);
</ins><span class="cx">         
</span><del>-        void useFixedAttachment(const IntPoint&amp; attachmentPoint);
</del><ins>+        void useFixedAttachment(const LayoutPoint&amp; attachmentPoint);
</ins><span class="cx">         
</span><del>-        void clip(const IntRect&amp;);
</del><ins>+        void clip(const LayoutRect&amp;);
</ins><span class="cx">         
</span><span class="cx">         void setHasNonLocalGeometry(bool hasNonLocalGeometry = true) { m_hasNonLocalGeometry = hasNonLocalGeometry; }
</span><span class="cx">         bool hasNonLocalGeometry() const { return m_hasNonLocalGeometry; }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        IntRect m_destRect;
-        IntPoint m_destOrigin;
-        IntPoint m_phase;
-        IntSize m_tileSize;
-        FloatSize m_space;
</del><ins>+        LayoutRect m_destRect;
+        LayoutPoint m_destOrigin;
+        LayoutPoint m_phase;
+        LayoutSize m_tileSize;
+        LayoutSize m_space;
</ins><span class="cx">         bool m_hasNonLocalGeometry; // Has background-attachment: fixed. Implies that we can't always cheaply compute destRect.
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="lines">@@ -313,14 +299,14 @@
</span><span class="cx">     void moveChildrenTo(RenderBoxModelObject* toBoxModelObject, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, bool fullRemoveInsert = false);
</span><span class="cx"> 
</span><span class="cx">     enum ScaleByEffectiveZoomOrNot { ScaleByEffectiveZoom, DoNotScaleByEffectiveZoom };
</span><del>-    IntSize calculateImageIntrinsicDimensions(StyleImage*, const IntSize&amp; scaledPositioningAreaSize, ScaleByEffectiveZoomOrNot) const;
</del><ins>+    LayoutSize calculateImageIntrinsicDimensions(StyleImage*, const LayoutSize&amp; scaledPositioningAreaSize, ScaleByEffectiveZoomOrNot) const;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     LayoutUnit computedCSSPadding(const Length&amp;) const;
</span><span class="cx">     
</span><span class="cx">     virtual LayoutRect frameRectForStickyPositioning() const = 0;
</span><span class="cx"> 
</span><del>-    IntSize calculateFillTileSize(const FillLayer*, const IntSize&amp; scaledPositioningAreaSize) const;
</del><ins>+    LayoutSize calculateFillTileSize(const FillLayer*, const LayoutSize&amp; scaledPositioningAreaSize) const;
</ins><span class="cx"> 
</span><span class="cx">     RoundedRect getBackgroundRoundedRect(const LayoutRect&amp;, InlineFlowBox*, LayoutUnit inlineBoxWidth, LayoutUnit inlineBoxHeight,
</span><span class="cx">         bool includeLogicalLeftEdge, bool includeLogicalRightEdge) const;
</span><span class="lines">@@ -342,6 +328,8 @@
</span><span class="cx">         float thickness, float drawThickness, BoxSide, const RenderStyle&amp;,
</span><span class="cx">         Color, EBorderStyle, BackgroundBleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge);
</span><span class="cx">     void paintMaskForTextFillBox(ImageBuffer*, const IntRect&amp;, InlineFlowBox*, const LayoutRect&amp;, RenderNamedFlowFragment*);
</span><ins>+
+    void pixelSnapBackgroundImageGeometryForPainting(BackgroundImageGeometry&amp;) const;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> RENDER_OBJECT_TYPE_CASTS(RenderBoxModelObject, isBoxModelObject())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1615,9 +1615,9 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    IntRect destRect = pixelSnappedIntRect(LayoutRect(backgroundBoxForPainting()));
-    IntPoint phase;
-    IntSize tileSize;
</del><ins>+    FloatRect destRect = backgroundBoxForPainting();
+    FloatPoint phase;
+    FloatSize tileSize;
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;Image&gt; image = style.backgroundLayers()-&gt;image()-&gt;cachedImage()-&gt;image();
</span><span class="cx">     toRenderBox(renderer()).getGeometryForBackgroundImage(&amp;m_owningLayer.renderer(), destRect, phase, tileSize);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingshapesShapeOutsideInfocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -137,7 +137,7 @@
</span><span class="cx">     ASSERT(shapeValue-&gt;isImageValid());
</span><span class="cx">     StyleImage* styleImage = shapeValue-&gt;image();
</span><span class="cx"> 
</span><del>-    const IntSize&amp; imageSize = renderBox-&gt;calculateImageIntrinsicDimensions(styleImage, roundedIntSize(referenceBoxSize), RenderImage::ScaleByEffectiveZoom);
</del><ins>+    const LayoutSize&amp; imageSize = renderBox-&gt;calculateImageIntrinsicDimensions(styleImage, roundedIntSize(referenceBoxSize), RenderImage::ScaleByEffectiveZoom);
</ins><span class="cx">     styleImage-&gt;setContainerSizeForRenderer(renderBox, imageSize, renderBox-&gt;style().effectiveZoom());
</span><span class="cx"> 
</span><span class="cx">     image = styleImage-&gt;cachedImage()-&gt;imageForRenderer(renderBox);
</span></span></pre>
</div>
</div>

</body>
</html>