| Index: Source/core/rendering/RenderLayer.cpp | 
| diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp | 
| index fc7e403521b5952bc8e76dd717fc6049fa074bf2..28dedfaf4f47e12641e3a95dee8c8185b997ac05 100644 | 
| --- a/Source/core/rendering/RenderLayer.cpp | 
| +++ b/Source/core/rendering/RenderLayer.cpp | 
| @@ -3617,7 +3617,7 @@ void RenderLayer::paintLayerContents(GraphicsContext* context, const LayerPainti | 
| LayoutPoint offsetFromRoot; | 
| convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); | 
|  | 
| -    IntRect rootRelativeBounds; | 
| +    LayoutRect rootRelativeBounds; | 
| bool rootRelativeBoundsComputed = false; | 
|  | 
| // Apply clip-path to context. | 
| @@ -3718,7 +3718,7 @@ void RenderLayer::paintLayerContents(GraphicsContext* context, const LayerPainti | 
| // fragment should paint. | 
| collectFragments(layerFragments, localPaintingInfo.rootLayer, localPaintingInfo.region, localPaintingInfo.paintDirtyRect, | 
| (localPaintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : PaintingClipRects, IgnoreOverlayScrollbarSize, | 
| -            (isPaintingOverflowContents) ? IgnoreOverflowClip : RespectOverflowClip, &offsetFromRoot); | 
| +            (isPaintingOverflowContents) ? IgnoreOverflowClip : RespectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation); | 
| updatePaintingInfoForFragments(layerFragments, localPaintingInfo, localPaintFlags, shouldPaintContent, &offsetFromRoot); | 
| } | 
|  | 
| @@ -3826,12 +3826,12 @@ void RenderLayer::paintList(Vector<RenderLayer*>* list, GraphicsContext* context | 
|  | 
| void RenderLayer::collectFragments(LayerFragments& fragments, const RenderLayer* rootLayer, RenderRegion* region, const LayoutRect& dirtyRect, | 
| ClipRectsType clipRectsType, OverlayScrollbarSizeRelevancy inOverlayScrollbarSizeRelevancy, ShouldRespectOverflowClip respectOverflowClip, const LayoutPoint* offsetFromRoot, | 
| -    const LayoutRect* layerBoundingBox) | 
| +    const LayoutSize& subPixelAccumulation, const LayoutRect* layerBoundingBox) | 
| { | 
| if (!enclosingPaginationLayer() || hasTransform()) { | 
| // For unpaginated layers, there is only one fragment. | 
| LayerFragment fragment; | 
| -        ClipRectsContext clipRectsContext(rootLayer, region, clipRectsType, inOverlayScrollbarSizeRelevancy, respectOverflowClip); | 
| +        ClipRectsContext clipRectsContext(rootLayer, region, clipRectsType, inOverlayScrollbarSizeRelevancy, respectOverflowClip, subPixelAccumulation); | 
| calculateRects(clipRectsContext, dirtyRect, fragment.layerBounds, fragment.backgroundRect, fragment.foregroundRect, fragment.outlineRect, offsetFromRoot); | 
| fragments.append(fragment); | 
| return; | 
| @@ -3917,7 +3917,7 @@ void RenderLayer::paintTransformedLayerIntoFragments(GraphicsContext* context, c | 
| LayoutRect transformedExtent = transparencyClipBox(this, enclosingPaginationLayer(), PaintingTransparencyClipBox, RootOfTransparencyClipBox, paintingInfo.paintBehavior); | 
| enclosingPaginationLayer()->collectFragments(enclosingPaginationFragments, paintingInfo.rootLayer, paintingInfo.region, paintingInfo.paintDirtyRect, | 
| (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : PaintingClipRects, IgnoreOverlayScrollbarSize, | 
| -        (paintFlags & PaintLayerPaintingOverflowContents) ? IgnoreOverflowClip : RespectOverflowClip, &offsetOfPaginationLayerFromRoot, &transformedExtent); | 
| +        (paintFlags & PaintLayerPaintingOverflowContents) ? IgnoreOverflowClip : RespectOverflowClip, &offsetOfPaginationLayerFromRoot, paintingInfo.subPixelAccumulation, &transformedExtent); | 
|  | 
| for (size_t i = 0; i < enclosingPaginationFragments.size(); ++i) { | 
| const LayerFragment& fragment = enclosingPaginationFragments.at(i); | 
| @@ -4550,7 +4550,7 @@ RenderLayer* RenderLayer::hitTestTransformedLayerInFragments(RenderLayer* rootLa | 
| LayoutPoint offsetOfPaginationLayerFromRoot; | 
| LayoutRect transformedExtent = transparencyClipBox(this, enclosingPaginationLayer(), HitTestingTransparencyClipBox, RootOfTransparencyClipBox); | 
| enclosingPaginationLayer()->collectFragments(enclosingPaginationFragments, rootLayer, hitTestLocation.region(), hitTestRect, | 
| -        RootRelativeClipRects, IncludeOverlayScrollbarSize, RespectOverflowClip, &offsetOfPaginationLayerFromRoot, &transformedExtent); | 
| +        RootRelativeClipRects, IncludeOverlayScrollbarSize, RespectOverflowClip, &offsetOfPaginationLayerFromRoot, LayoutSize(), &transformedExtent); | 
|  | 
| for (int i = enclosingPaginationFragments.size() - 1; i >= 0; --i) { | 
| const LayerFragment& fragment = enclosingPaginationFragments.at(i); | 
| @@ -4982,7 +4982,7 @@ void RenderLayer::calculateRects(const ClipRectsContext& clipRectsContext, const | 
| if (renderer()->hasOverflowClip()) { | 
| // This layer establishes a clip of some kind. | 
| if (this != clipRectsContext.rootLayer || clipRectsContext.respectOverflowClip == RespectOverflowClip) { | 
| -            foregroundRect.intersect(toRenderBox(renderer())->overflowClipRect(offset, clipRectsContext.region, clipRectsContext.overlayScrollbarSizeRelevancy)); | 
| +            foregroundRect.intersect(toRenderBox(renderer())->overflowClipRect(offset + clipRectsContext.subPixelAccumulation, clipRectsContext.region, clipRectsContext.overlayScrollbarSizeRelevancy)); | 
| if (renderer()->style()->hasBorderRadius()) | 
| foregroundRect.setHasRadius(true); | 
| } | 
| @@ -4997,13 +4997,13 @@ void RenderLayer::calculateRects(const ClipRectsContext& clipRectsContext, const | 
| // individual region boxes as overflow. | 
| LayoutRect layerBoundsWithVisualOverflow = renderBox()->visualOverflowRect(); | 
| renderBox()->flipForWritingMode(layerBoundsWithVisualOverflow); // Layers are in physical coordinates, so the overflow has to be flipped. | 
| -            layerBoundsWithVisualOverflow.moveBy(offset); | 
| +            layerBoundsWithVisualOverflow.moveBy(offset + clipRectsContext.subPixelAccumulation); | 
| if (this != clipRectsContext.rootLayer || clipRectsContext.respectOverflowClip == RespectOverflowClip) | 
| backgroundRect.intersect(layerBoundsWithVisualOverflow); | 
| } else { | 
| // Shift the bounds to be for our region only. | 
| LayoutRect bounds = renderBox()->borderBoxRectInRegion(clipRectsContext.region); | 
| -            bounds.moveBy(offset); | 
| +            bounds.moveBy(offset + clipRectsContext.subPixelAccumulation); | 
| if (this != clipRectsContext.rootLayer || clipRectsContext.respectOverflowClip == RespectOverflowClip) | 
| backgroundRect.intersect(bounds); | 
| } | 
| @@ -5012,7 +5012,7 @@ void RenderLayer::calculateRects(const ClipRectsContext& clipRectsContext, const | 
| // CSS clip (different than clipping due to overflow) can clip to any box, even if it falls outside of the border box. | 
| if (renderer()->hasClip()) { | 
| // Clip applies to *us* as well, so go ahead and update the damageRect. | 
| -        LayoutRect newPosClip = toRenderBox(renderer())->clipRect(offset, clipRectsContext.region); | 
| +        LayoutRect newPosClip = toRenderBox(renderer())->clipRect(offset + clipRectsContext.subPixelAccumulation, clipRectsContext.region); | 
| backgroundRect.intersect(newPosClip); | 
| foregroundRect.intersect(newPosClip); | 
| outlineRect.intersect(newPosClip); | 
| @@ -5211,14 +5211,14 @@ IntRect RenderLayer::absoluteBoundingBox() const | 
| return pixelSnappedIntRect(boundingBox(root())); | 
| } | 
|  | 
| -IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, const LayoutPoint* offsetFromRoot, CalculateLayerBoundsFlags flags) const | 
| +LayoutRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, const LayoutPoint* offsetFromRoot, CalculateLayerBoundsFlags flags) const | 
| { | 
| if (!isSelfPaintingLayer()) | 
| -        return IntRect(); | 
| +        return LayoutRect(); | 
|  | 
| // FIXME: This could be improved to do a check like hasVisibleNonCompositingDescendantLayers() (bug 92580). | 
| if ((flags & ExcludeHiddenDescendants) && this != ancestorLayer && !hasVisibleContent() && !hasVisibleDescendant()) | 
| -        return IntRect(); | 
| +        return LayoutRect(); | 
|  | 
| RenderLayerModelObject* renderer = this->renderer(); | 
|  | 
| @@ -5258,7 +5258,7 @@ IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons | 
| LayoutPoint ancestorRelOffset; | 
| convertToLayerCoords(ancestorLayer, ancestorRelOffset); | 
| localClipRect.moveBy(ancestorRelOffset); | 
| -            return pixelSnappedIntRect(localClipRect); | 
| +            return localClipRect; | 
| } | 
| } | 
|  | 
| @@ -5269,7 +5269,7 @@ IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons | 
|  | 
| if (RenderLayer* reflection = reflectionLayer()) { | 
| if (!reflection->isComposited()) { | 
| -            IntRect childUnionBounds = reflection->calculateLayerBounds(this, 0, descendantFlags); | 
| +            LayoutRect childUnionBounds = reflection->calculateLayerBounds(this, 0, descendantFlags); | 
| unionBounds.unite(childUnionBounds); | 
| } | 
| } | 
| @@ -5285,7 +5285,7 @@ IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons | 
| for (size_t i = 0; i < listSize; ++i) { | 
| RenderLayer* curLayer = negZOrderList->at(i); | 
| if (flags & IncludeCompositedDescendants || !curLayer->isComposited()) { | 
| -                IntRect childUnionBounds = curLayer->calculateLayerBounds(this, 0, descendantFlags); | 
| +                LayoutRect childUnionBounds = curLayer->calculateLayerBounds(this, 0, descendantFlags); | 
| unionBounds.unite(childUnionBounds); | 
| } | 
| } | 
| @@ -5296,7 +5296,7 @@ IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons | 
| for (size_t i = 0; i < listSize; ++i) { | 
| RenderLayer* curLayer = posZOrderList->at(i); | 
| if (flags & IncludeCompositedDescendants || !curLayer->isComposited()) { | 
| -                IntRect childUnionBounds = curLayer->calculateLayerBounds(this, 0, descendantFlags); | 
| +                LayoutRect childUnionBounds = curLayer->calculateLayerBounds(this, 0, descendantFlags); | 
| unionBounds.unite(childUnionBounds); | 
| } | 
| } | 
| @@ -5307,7 +5307,7 @@ IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons | 
| for (size_t i = 0; i < listSize; ++i) { | 
| RenderLayer* curLayer = normalFlowList->at(i); | 
| if (flags & IncludeCompositedDescendants || !curLayer->isComposited()) { | 
| -                IntRect curAbsBounds = curLayer->calculateLayerBounds(this, 0, descendantFlags); | 
| +                LayoutRect curAbsBounds = curLayer->calculateLayerBounds(this, 0, descendantFlags); | 
| unionBounds.unite(curAbsBounds); | 
| } | 
| } | 
| @@ -5332,7 +5332,7 @@ IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons | 
| convertToLayerCoords(ancestorLayer, ancestorRelOffset); | 
| unionBounds.moveBy(ancestorRelOffset); | 
|  | 
| -    return pixelSnappedIntRect(unionBounds); | 
| +    return unionBounds; | 
| } | 
|  | 
| void RenderLayer::clearClipRectsIncludingDescendants(ClipRectsType typeToClear) | 
|  |