Source/WebCore/ChangeLog

 12012-08-13 Levi Weintraub <leviw@chromium.org>
 2
 3 Accumulate sub-pixel offsets through layers and transforms
 4 https://bugs.webkit.org/show_bug.cgi?id=89238
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Pixel snapping logic makes use of sub-pixel offsets accumulated when walking down
 9 the render tree. When we align RenderLayers to paint on pixel boundaries, we were
 10 also losing that accumulated value. This preserves the fractional offset and passes
 11 it to the RenderLayer's RenderObjects so they paint the proper size and offset.
 12
 13 This also necessitates a new mode of mapLocalToContainer whereby we pixel snap the
 14 offset used in transforms. Otherwise, they wouldn't account for the pixel snapping
 15 done elsewhere in the render tree.
 16
 17 Test: fast/sub-pixel/sub-pixel-accumulates-to-layers.html
 18
 19 * css/CSSComputedStyleDeclaration.cpp:
 20 (WebCore::pixelSnappedSizingBox): The LayoutUnit version of sizingBox returns a
 21 LayoutRect with the location zeroed out. This leads to incorrect pixel snapping, so
 22 we shouldn't put these numbers into a transform. Sadly, I couldn't figure out a
 23 test for this without the rest of the patch.
 24 (WebCore):
 25 (WebCore::computedTransform): Using pixel-snapped values when generating transforms.
 26 * rendering/RenderBox.cpp:
 27 (WebCore::RenderBox::mapLocalToContainer): Adding a mode whereby the values inputed
 28 into the transform are properly pixel snapped.
 29 (WebCore::RenderBox::computeRectForRepaint): Using pixel snapped values for the transform.
 30 * rendering/RenderBox.h:
 31 (RenderBox):
 32 * rendering/RenderGeometryMap.cpp:
 33 (WebCore::RenderGeometryMap::mapToAbsolute):
 34 * rendering/RenderInline.cpp:
 35 (WebCore::RenderInline::mapLocalToContainer):
 36 * rendering/RenderInline.h:
 37 (RenderInline):
 38 * rendering/RenderLayer.cpp:
 39 (WebCore::RenderLayer::updateTransform): Using pixel snapped values for the transform.
 40 (WebCore::RenderLayer::currentTransform): Ditto.
 41 (WebCore::RenderLayer::perspectiveTransform): Ditto.
 42 (WebCore::RenderLayer::paint): Support passing along the accumulated sub-pixel offset instead
 43 of rounding and use enclosingIntRect for the damageRect.
 44 (WebCore::RenderLayer::paintOverlayScrollbars): Updating to the new paintLayer contract
 45 (WebCore::RenderLayer::paintLayer): Adding a sub-pixel accumulation LayoutSize. We pass this
 46 delta to the Layer's RenderObject when we paint, but align the graphics context to the proper
 47 pixel value.
 48 (WebCore::RenderLayer::paintLayerContentsAndReflection): Ditto.
 49 (WebCore::RenderLayer::paintLayerContents): Ditto.
 50 (WebCore::RenderLayer::paintList): Ditto.
 51 (WebCore::RenderLayer::paintChildLayerIntoColumns): Ditto.
 52 (WebCore::RenderLayer::calculateClipRects): Avoid unnecessary rounding when sub-pixel is enabled.
 53 (WebCore::RenderLayer::calculateRects): Remove unnecessary pixel snapping.
 54 * rendering/RenderLayer.h:
 55 (RenderLayer):
 56 * rendering/RenderLayerBacking.cpp:
 57 (WebCore::RenderLayerBacking::updateLayerTransform): Use pixel-snapped values for transforms.
 58 (WebCore::RenderLayerBacking::paintIntoLayer): Update to new paintLayer contract.
 59 * rendering/RenderObject.cpp:
 60 (WebCore::RenderObject::localToContainerQuad): Adding a mode for optionally pixel snapping.
 61 (WebCore::RenderObject::localToContainerPoint): Ditto.
 62 * rendering/RenderObject.h:
 63 (WebCore::RenderObject::localToAbsoluteQuad): Ditto.
 64 (RenderObject):
 65 * rendering/RenderReplica.cpp:
 66 (WebCore::RenderReplica::paint): Updating to new paintLayer contract.
 67 * rendering/RenderView.h:
 68 (RenderView):
 69 * rendering/svg/RenderSVGForeignObject.cpp:
 70 (WebCore::RenderSVGForeignObject::mapLocalToContainer):
 71 * rendering/svg/RenderSVGForeignObject.h:
 72 (RenderSVGForeignObject):
 73 * rendering/svg/RenderSVGInline.cpp:
 74 (WebCore::RenderSVGInline::mapLocalToContainer):
 75 * rendering/svg/RenderSVGInline.h:
 76 (RenderSVGInline):
 77 * rendering/svg/RenderSVGModelObject.cpp:
 78 (WebCore::RenderSVGModelObject::mapLocalToContainer):
 79 * rendering/svg/RenderSVGModelObject.h:
 80 (RenderSVGModelObject):
 81 * rendering/svg/RenderSVGRoot.h:
 82 (RenderSVGRoot):
 83 * rendering/svg/RenderSVGText.cpp:
 84 (WebCore::RenderSVGText::mapLocalToContainer):
 85 * rendering/svg/RenderSVGText.h:
 86 (RenderSVGText):
 87 * rendering/svg/SVGRenderSupport.cpp:
 88 (WebCore::SVGRenderSupport::mapLocalToContainer):
 89 * rendering/svg/SVGRenderSupport.h:
 90 (SVGRenderSupport):
 91
1922012-08-13 Pavel Feldman <pfeldman@chromium.org>
293
394 Web Inspector: get rid of beforeTextChanged
125426

Source/WebCore/WebCore.exp.in

@@__ZNK7WebCore11RenderStyle21visitedDepen
11031103__ZNK7WebCore11ScriptValue9getStringEPN3JSC9ExecStateERN3WTF6StringE
11041104__ZNK7WebCore12RenderObject14enclosingLayerEv
11051105__ZNK7WebCore12RenderObject15localToAbsoluteERKNS_10FloatPointEbb
1106 __ZNK7WebCore12RenderObject20localToContainerQuadERKNS_9FloatQuadEPNS_20RenderBoxModelObjectEbPb
 1106__ZNK7WebCore12RenderObject20localToContainerQuadERKNS_9FloatQuadEPNS_20RenderBoxModelObjectEbbPb
11071107__ZNK7WebCore12RenderObject23absoluteBoundingBoxRectEb
11081108__ZNK7WebCore12RenderObject39pixelSnappedAbsoluteClippedOverflowRectEv
11091109__ZNK7WebCore12RenderObject7childAtEj
125426

Source/WebCore/css/CSSComputedStyleDeclaration.cpp

@@static LayoutRect sizingBox(RenderObject
708708 return box->style()->boxSizing() == BORDER_BOX ? box->borderBoxRect() : box->computedCSSContentBoxRect();
709709}
710710
 711static IntRect pixelSnappedSizingBox(RenderObject* renderer)
 712{
 713 if (!renderer->isBox())
 714 return IntRect();
 715
 716 RenderBox* box = toRenderBox(renderer);
 717 return box->style()->boxSizing() == BORDER_BOX ? box->pixelSnappedBorderBoxRect() : pixelSnappedIntRect(box->computedCSSContentBoxRect());
 718}
 719
711720static PassRefPtr<CSSValue> computedTransform(RenderObject* renderer, const RenderStyle* style)
712721{
713722 if (!renderer || style->transform().operations().isEmpty())
714723 return cssValuePool().createIdentifierValue(CSSValueNone);
715724
716  LayoutRect box = sizingBox(renderer);
 725 IntRect box = pixelSnappedSizingBox(renderer);
717726
718727 TransformationMatrix transform;
719728 style->applyTransform(transform, box.size(), RenderStyle::ExcludeTransformOrigin);
125426

Source/WebCore/rendering/RenderBox.cpp

@@void RenderBox::mapLocalToContainer(Rend
12821282 *wasFixed = mode & IsFixed;
12831283
12841284 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(transformState.mappedPoint()));
 1285 if (mode & SnapOffsetForTransforms)
 1286 containerOffset = roundedIntSize(containerOffset);
12851287
12861288 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || style()->preserves3D());
12871289 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {

@@void RenderBox::computeRectForRepaint(Re
15081510 LayoutState* layoutState = v->layoutState();
15091511
15101512 if (layer() && layer()->transform())
1511  rect = layer()->transform()->mapRect(rect);
 1513 rect = layer()->transform()->mapRect(pixelSnappedIntRect(rect));
15121514
15131515 if (styleToUse->position() == RelativePosition && layer())
15141516 rect.move(layer()->relativePositionOffset());

@@void RenderBox::computeRectForRepaint(Re
15471549 // in the parent's coordinate space that encloses us.
15481550 if (layer() && layer()->transform()) {
15491551 fixed = position == FixedPosition;
1550  rect = layer()->transform()->mapRect(rect);
 1552 rect = layer()->transform()->mapRect(pixelSnappedIntRect(rect));
15511553 topLeft = rect.location();
15521554 topLeft.move(locationOffset());
15531555 } else if (position == FixedPosition)
125426

Source/WebCore/rendering/RenderBox.h

@@protected:
519519
520520 virtual bool shouldComputeSizeAsReplaced() const { return isReplaced() && !isInlineBlockOrInlineTable(); }
521521
522  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 522 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
523523 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject*, RenderGeometryMap&) const;
524524 virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const;
525525
125426

Source/WebCore/rendering/RenderGeometryMap.cpp

@@void RenderGeometryMap::mapToAbsolute(Tr
9292{
9393 // If the mapping includes something like columns, we have to go via renderers.
9494 if (hasNonUniformStep()) {
95  m_mapping.last().m_renderer->mapLocalToContainer(0, transformState, UseTransforms | ApplyContainerFlip);
 95 m_mapping.last().m_renderer->mapLocalToContainer(0, transformState, UseTransforms | ApplyContainerFlip | SnapOffsetForTransforms);
9696 return;
9797 }
9898
125426

Source/WebCore/rendering/RenderInline.cpp

@@void RenderInline::mapLocalToContainer(R
11451145 }
11461146
11471147 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(transformState.mappedPoint()));
 1148 if (mode & SnapOffsetForTransforms)
 1149 containerOffset = roundedIntSize(containerOffset);
11481150
11491151 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || style()->preserves3D());
11501152 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {
125426

Source/WebCore/rendering/RenderInline.h

@@private:
135135 virtual LayoutRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, LayoutUnit outlineWidth) const;
136136 virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, LayoutRect&, bool fixed) const;
137137
138  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 138 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
139139 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
140140
141141 virtual VisiblePosition positionForPoint(const LayoutPoint&);
125426

Source/WebCore/rendering/RenderLayer.cpp

@@void RenderLayer::updateTransform()
565565 RenderBox* box = renderBox();
566566 ASSERT(box);
567567 m_transform->makeIdentity();
568  box->style()->applyTransform(*m_transform, box->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
 568 box->style()->applyTransform(*m_transform, box->pixelSnappedBorderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
569569 makeMatrixRenderable(*m_transform, canRender3DTransforms());
570570 }
571571

@@TransformationMatrix RenderLayer::curren
582582 if (renderer()->style()->isRunningAcceleratedAnimation()) {
583583 TransformationMatrix currTransform;
584584 RefPtr<RenderStyle> style = renderer()->animation()->getAnimatedStyleForRenderer(renderer());
585  style->applyTransform(currTransform, renderBox()->borderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
 585 style->applyTransform(currTransform, renderBox()->pixelSnappedBorderBoxRect().size(), RenderStyle::IncludeTransformOrigin);
586586 makeMatrixRenderable(currTransform, canRender3DTransforms());
587587 return currTransform;
588588 }

@@TransformationMatrix RenderLayer::perspe
890890 return TransformationMatrix();
891891
892892 // Maybe fetch the perspective from the backing?
893  const LayoutRect borderBox = toRenderBox(renderer())->borderBoxRect();
 893 const IntRect borderBox = toRenderBox(renderer())->pixelSnappedBorderBoxRect();
894894 const float boxWidth = borderBox.width();
895895 const float boxHeight = borderBox.height();
896896

@@bool RenderLayer::scroll(ScrollDirection
28522852void RenderLayer::paint(GraphicsContext* context, const LayoutRect& damageRect, PaintBehavior paintBehavior, RenderObject* paintingRoot, RenderRegion* region, PaintLayerFlags paintFlags)
28532853{
28542854 OverlapTestRequestMap overlapTestRequests;
2855  paintLayer(this, context, damageRect, paintBehavior, paintingRoot, region, &overlapTestRequests, paintFlags);
 2855 paintLayer(this, context, enclosingIntRect(damageRect), LayoutSize(), paintBehavior, paintingRoot, region, &overlapTestRequests, paintFlags);
28562856 OverlapTestRequestMap::iterator end = overlapTestRequests.end();
28572857 for (OverlapTestRequestMap::iterator it = overlapTestRequests.begin(); it != end; ++it)
28582858 it->first->setOverlapTestResult(false);

@@void RenderLayer::paintOverlayScrollbars
28622862{
28632863 if (!m_containsDirtyOverlayScrollbars)
28642864 return;
2865  paintLayer(this, context, damageRect, paintBehavior, paintingRoot, 0, 0, PaintLayerHaveTransparency | PaintLayerTemporaryClipRects
 2865 paintLayer(this, context, damageRect, LayoutSize(), paintBehavior, paintingRoot, 0, 0, PaintLayerHaveTransparency | PaintLayerTemporaryClipRects
28662866 | PaintLayerPaintingOverlayScrollbars);
28672867 m_containsDirtyOverlayScrollbars = false;
28682868}

@@static inline bool shouldSuppressPaintin
29592959
29602960
29612961void RenderLayer::paintLayer(RenderLayer* rootLayer, GraphicsContext* context,
2962  const LayoutRect& paintDirtyRect, PaintBehavior paintBehavior,
 2962 const LayoutRect& paintDirtyRect, const LayoutSize& subPixelAccumulation, PaintBehavior paintBehavior,
29632963 RenderObject* paintingRoot, RenderRegion* region, OverlapTestRequestMap* overlapTestRequests,
29642964 PaintLayerFlags paintFlags)
29652965{

@@void RenderLayer::paintLayer(RenderLayer
30173017 }
30183018
30193019 // Adjust the transform such that the renderer's upper left corner will paint at (0,0) in user space.
3020  // This involves subtracting out the position of the layer in our current coordinate space.
 3020 // This involves subtracting out the position of the layer in our current coordinate space, but preserving
 3021 // the accumulated error for sub-pixel layout.
30213022 LayoutPoint delta;
30223023 convertToLayerCoords(rootLayer, delta);
30233024 TransformationMatrix transform(layerTransform);
3024  transform.translateRight(delta.x(), delta.y());
 3025 IntPoint roundedDelta = roundedIntPoint(delta);
 3026 transform.translateRight(roundedDelta.x(), roundedDelta.y());
 3027 LayoutSize adjustedSubPixelAccumulation = subPixelAccumulation + (delta - roundedDelta);
30253028
30263029 // Apply the transform.
30273030 {

@@void RenderLayer::paintLayer(RenderLayer
30293032 context->concatCTM(transform.toAffineTransform());
30303033
30313034 // Now do a paint with the root layer shifted to be us.
3032  paintLayerContentsAndReflection(this, context, transform.inverse().mapRect(paintDirtyRect), paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
 3035 paintLayerContentsAndReflection(this, context, enclosingIntRect(transform.inverse().mapRect(paintDirtyRect)), adjustedSubPixelAccumulation, paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
30333036 }
30343037
30353038 // Restore the clip.

@@void RenderLayer::paintLayer(RenderLayer
30393042 return;
30403043 }
30413044
3042  paintLayerContentsAndReflection(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
 3045 paintLayerContentsAndReflection(rootLayer, context, paintDirtyRect, subPixelAccumulation, paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
30433046}
30443047
30453048void RenderLayer::paintLayerContentsAndReflection(RenderLayer* rootLayer, GraphicsContext* context,
3046  const LayoutRect& paintDirtyRect, PaintBehavior paintBehavior,
 3049 const LayoutRect& paintDirtyRect, const LayoutSize& subPixelAccumulation, PaintBehavior paintBehavior,
30473050 RenderObject* paintingRoot, RenderRegion* region, OverlapTestRequestMap* overlapTestRequests,
30483051 PaintLayerFlags paintFlags)
30493052{

@@void RenderLayer::paintLayerContentsAndR
30553058 if (m_reflection && !m_paintingInsideReflection) {
30563059 // Mark that we are now inside replica painting.
30573060 m_paintingInsideReflection = true;
3058  reflectionLayer()->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags | PaintLayerPaintingReflection);
 3061 reflectionLayer()->paintLayer(rootLayer, context, paintDirtyRect, subPixelAccumulation, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags | PaintLayerPaintingReflection);
30593062 m_paintingInsideReflection = false;
30603063 }
30613064
30623065 localPaintFlags |= PaintLayerPaintingCompositingAllPhases;
3063  paintLayerContents(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
 3066 paintLayerContents(rootLayer, context, paintDirtyRect, subPixelAccumulation, paintBehavior, paintingRoot, region, overlapTestRequests, localPaintFlags);
30643067}
30653068
30663069void RenderLayer::paintLayerContents(RenderLayer* rootLayer, GraphicsContext* context,
3067  const LayoutRect& parentPaintDirtyRect, PaintBehavior paintBehavior,
 3070 const LayoutRect& parentPaintDirtyRect, const LayoutSize& subPixelAccumulation, PaintBehavior paintBehavior,
30683071 RenderObject* paintingRoot, RenderRegion* region, OverlapTestRequestMap* overlapTestRequests,
30693072 PaintLayerFlags paintFlags)
30703073{

@@void RenderLayer::paintLayerContents(Ren
31233126
31243127 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) {
31253128 calculateRects(rootLayer, region, (localPaintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : PaintingClipRects, paintDirtyRect, layerBounds, damageRect, clipRectToApply, outlineRect);
3126  paintOffset = toPoint(layerBounds.location() - renderBoxLocation());
 3129 paintOffset = toPoint(layerBounds.location() - renderBoxLocation() + subPixelAccumulation);
31273130 }
31283131
31293132 bool forceBlackText = paintBehavior & PaintBehaviorForceBlackText;

@@void RenderLayer::paintList(Vector<Rende
32743277 for (size_t i = 0; i < list->size(); ++i) {
32753278 RenderLayer* childLayer = list->at(i);
32763279 if (!childLayer->isPaginated())
3277  childLayer->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
 3280 childLayer->paintLayer(rootLayer, context, paintDirtyRect, LayoutSize(), paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
32783281 else
32793282 paintPaginatedChildLayer(childLayer, rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
32803283 }

@@void RenderLayer::paintChildLayerIntoCol
33653368 newTransform.translateRight(roundToInt(offset.width()), roundToInt(offset.height()));
33663369
33673370 childLayer->m_transform = adoptPtr(new TransformationMatrix(newTransform));
3368  childLayer->paintLayer(rootLayer, context, localDirtyRect, paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
 3371 childLayer->paintLayer(rootLayer, context, localDirtyRect, LayoutSize(), paintBehavior, paintingRoot, region, overlapTestRequests, paintFlags);
33693372 if (oldHasTransform)
33703373 childLayer->m_transform = adoptPtr(new TransformationMatrix(oldTransform));
33713374 else

@@void RenderLayer::calculateClipRects(con
39613964 // some transformed layer boundary, for example, in the RenderLayerCompositor overlapMap, where
39623965 // clipRects are needed in view space.
39633966 LayoutPoint offset;
3964  offset = roundedIntPoint(renderer()->localToContainerPoint(FloatPoint(), rootLayer->renderer()));
 3967 offset = roundedLayoutPoint(renderer()->localToContainerPoint(FloatPoint(), rootLayer->renderer(), false, false, 0));
39653968 RenderView* view = renderer()->view();
39663969 ASSERT(view);
39673970 if (view && clipRects.fixed() && rootLayer->renderer() == view) {

@@void RenderLayer::calculateRects(const R
40694072 backgroundRect.intersect(layerBoundsWithVisualOverflow);
40704073 } else {
40714074 // Shift the bounds to be for our region only.
4072  LayoutRect bounds = pixelSnappedIntRect(renderBox()->borderBoxRectInRegion(region));
 4075 LayoutRect bounds = renderBox()->borderBoxRectInRegion(region);
40734076 bounds.moveBy(offset);
40744077 backgroundRect.intersect(bounds);
40754078 }
125426

Source/WebCore/rendering/RenderLayer.h

@@private:
710710
711711 void updateCompositingAndLayerListsIfNeeded();
712712
713  void paintLayer(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect,
 713 void paintLayer(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const LayoutSize& subPixelAccumulation,
714714 PaintBehavior, RenderObject* paintingRoot, RenderRegion* = 0, OverlapTestRequestMap* = 0,
715715 PaintLayerFlags = 0);
716  void paintLayerContentsAndReflection(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect,
 716 void paintLayerContentsAndReflection(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const LayoutSize& subPixelAccumulation,
717717 PaintBehavior, RenderObject* paintingRoot, RenderRegion* = 0, OverlapTestRequestMap* = 0,
718718 PaintLayerFlags = 0);
719  void paintLayerContents(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect,
 719 void paintLayerContents(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const LayoutSize& subPixelAccumulation,
720720 PaintBehavior, RenderObject* paintingRoot, RenderRegion* = 0, OverlapTestRequestMap* = 0,
721721 PaintLayerFlags = 0);
722722 void paintList(Vector<RenderLayer*>*, RenderLayer* rootLayer, GraphicsContext* p,
125426

Source/WebCore/rendering/RenderLayerBacking.cpp

@@void RenderLayerBacking::updateLayerTran
228228 // baked into it, and we don't want that.
229229 TransformationMatrix t;
230230 if (m_owningLayer->hasTransform()) {
231  style->applyTransform(t, toRenderBox(renderer())->borderBoxRect().size(), RenderStyle::ExcludeTransformOrigin);
 231 style->applyTransform(t, toRenderBox(renderer())->pixelSnappedBorderBoxRect().size(), RenderStyle::ExcludeTransformOrigin);
232232 makeMatrixRenderable(t, compositor()->canRender3DTransforms());
233233 }
234234

@@void RenderLayerBacking::paintIntoLayer(
12421242 paintFlags |= RenderLayer::PaintLayerPaintingCompositingMaskPhase;
12431243
12441244 // FIXME: GraphicsLayers need a way to split for RenderRegions.
1245  m_owningLayer->paintLayerContents(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0, paintFlags);
 1245 m_owningLayer->paintLayerContents(rootLayer, context, paintDirtyRect, LayoutSize(), paintBehavior, paintingRoot, 0, 0, paintFlags);
12461246
12471247 if (m_owningLayer->containsDirtyOverlayScrollbars())
12481248 m_owningLayer->paintOverlayScrollbars(context, paintDirtyRect, paintBehavior, paintingRoot);
125426

Source/WebCore/rendering/RenderObject.cpp

@@void RenderObject::getTransformFromConta
20982098#endif
20992099}
21002100
2101 FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, RenderBoxModelObject* repaintContainer, bool fixed, bool* wasFixed) const
 2101FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, RenderBoxModelObject* repaintContainer, bool snapOffsetForTransforms, bool fixed, bool* wasFixed) const
21022102{
21032103 // Track the point at the center of the quad's bounding box. As mapLocalToContainer() calls offsetFromContainer(),
21042104 // it will use that point as the reference point to decide which column's transform to apply in multiple-column blocks.

@@FloatQuad RenderObject::localToContainer
21062106 MapLocalToContainerFlags mode = ApplyContainerFlip | UseTransforms;
21072107 if (fixed)
21082108 mode |= IsFixed;
 2109 if (snapOffsetForTransforms)
 2110 mode |= SnapOffsetForTransforms;
21092111 mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
21102112 transformState.flatten();
21112113
21122114 return transformState.lastPlanarQuad();
21132115}
21142116
2115 FloatPoint RenderObject::localToContainerPoint(const FloatPoint& localPoint, RenderBoxModelObject* repaintContainer, bool fixed, bool* wasFixed) const
 2117FloatPoint RenderObject::localToContainerPoint(const FloatPoint& localPoint, RenderBoxModelObject* repaintContainer, bool snapOffsetForTransforms, bool fixed, bool* wasFixed) const
21162118{
21172119 TransformState transformState(TransformState::ApplyTransformDirection, localPoint);
21182120 MapLocalToContainerFlags mode = ApplyContainerFlip | UseTransforms;
21192121 if (fixed)
21202122 mode |= IsFixed;
 2123 if (snapOffsetForTransforms)
 2124 mode |= SnapOffsetForTransforms;
21212125 mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
21222126 transformState.flatten();
21232127
125426

Source/WebCore/rendering/RenderObject.h

@@enum PlaceGeneratedRunInFlag {
110110enum MapLocalToContainerMode {
111111 IsFixed = 1 << 0,
112112 UseTransforms = 1 << 1,
113  ApplyContainerFlip = 1 << 2
 113 ApplyContainerFlip = 1 << 2,
 114 SnapOffsetForTransforms = 1 << 3
114115};
115116typedef unsigned MapLocalToContainerFlags;
116117

@@public:
683684 // Convert a local quad to absolute coordinates, taking transforms into account.
684685 FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false, bool* wasFixed = 0) const
685686 {
686  return localToContainerQuad(quad, 0, fixed, wasFixed);
 687 return localToContainerQuad(quad, 0, false, fixed, wasFixed);
687688 }
688689
689690 // Convert a local quad into the coordinate system of container, taking transforms into account.
690  FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObject* repaintContainer, bool fixed = false, bool* wasFixed = 0) const;
691  FloatPoint localToContainerPoint(const FloatPoint&, RenderBoxModelObject* repaintContainer, bool fixed = false, bool* wasFixed = 0) const;
 691 FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObject* repaintContainer, bool snapOffsetForTransforms = true, bool fixed = false, bool* wasFixed = 0) const;
 692 FloatPoint localToContainerPoint(const FloatPoint&, RenderBoxModelObject* repaintContainer, bool snapOffsetForTransforms = true, bool fixed = false, bool* wasFixed = 0) const;
692693
693694 // Return the offset from the container() renderer (excluding transforms). In multi-column layout,
694695 // different offsets apply at different points, so return the offset that applies to the given point.
125426

Source/WebCore/rendering/RenderReplica.cpp

@@void RenderReplica::paint(PaintInfo& pai
7171 // Turn around and paint the parent layer. Use temporary clipRects, so that the layer doesn't end up caching clip rects
7272 // computing using the wrong rootLayer
7373 layer()->parent()->paintLayer(layer()->transform() ? layer()->parent() : layer()->enclosingTransformedAncestor(),
74  paintInfo.context, paintInfo.rect,
 74 paintInfo.context, paintInfo.rect, LayoutSize(),
7575 PaintBehaviorNormal, 0, paintInfo.renderRegion, 0,
7676 RenderLayer::PaintLayerHaveTransparency | RenderLayer::PaintLayerAppliedTransform | RenderLayer::PaintLayerTemporaryClipRects | RenderLayer::PaintLayerPaintingReflection);
7777 else if (paintInfo.phase == PaintPhaseMask)
125426

Source/WebCore/rendering/RenderView.h

@@public:
207207 bool hasRenderCounters() { return m_renderCounterCount; }
208208
209209protected:
210  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 210 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
211211 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
212212 virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const;
213213 virtual bool requiresColumns(int desiredColumnCount) const OVERRIDE;
125426

Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp

@@bool RenderSVGForeignObject::nodeAtPoint
190190 return false;
191191}
192192
193 void RenderSVGForeignObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags, bool* wasFixed) const
 193void RenderSVGForeignObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags mode, bool* wasFixed) const
194194{
195  SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, wasFixed);
 195 SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, mode & SnapOffsetForTransforms, wasFixed);
196196}
197197
198198const RenderObject* RenderSVGForeignObject::pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
125426

Source/WebCore/rendering/svg/RenderSVGForeignObject.h

@@public:
5454 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestPoint& pointInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE;
5555 virtual bool isSVGForeignObject() const { return true; }
5656
57  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 57 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
5858 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
5959 virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; }
6060
125426

Source/WebCore/rendering/svg/RenderSVGInline.cpp

@@void RenderSVGInline::computeFloatRectFo
7979 SVGRenderSupport::computeFloatRectForRepaint(this, repaintContainer, repaintRect, fixed);
8080}
8181
82 void RenderSVGInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags, bool* wasFixed) const
 82void RenderSVGInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags mode, bool* wasFixed) const
8383{
84  SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, wasFixed);
 84 SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, mode & SnapOffsetForTransforms, wasFixed);
8585}
8686
8787const RenderObject* RenderSVGInline::pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
125426

Source/WebCore/rendering/svg/RenderSVGInline.h

@@public:
4747
4848 virtual LayoutRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) const;
4949 virtual void computeFloatRectForRepaint(RenderBoxModelObject* repaintContainer, FloatRect&, bool fixed = false) const;
50  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 50 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
5151 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
5252 virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed) const;
5353
125426

Source/WebCore/rendering/svg/RenderSVGModelObject.cpp

@@void RenderSVGModelObject::computeFloatR
5555 SVGRenderSupport::computeFloatRectForRepaint(this, repaintContainer, repaintRect, fixed);
5656}
5757
58 void RenderSVGModelObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags, bool* wasFixed) const
 58void RenderSVGModelObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags mode, bool* wasFixed) const
5959{
60  SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, wasFixed);
 60 SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, mode & SnapOffsetForTransforms, wasFixed);
6161}
6262
6363const RenderObject* RenderSVGModelObject::pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
125426

Source/WebCore/rendering/svg/RenderSVGModelObject.h

@@public:
5858 virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint& accumulatedOffset) const;
5959 virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed) const;
6060
61  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 61 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
6262 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
6363 virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);
6464 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
125426

Source/WebCore/rendering/svg/RenderSVGRoot.h

@@private:
9595 virtual LayoutRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) const;
9696 virtual void computeFloatRectForRepaint(RenderBoxModelObject* repaintContainer, FloatRect& repaintRect, bool fixed) const;
9797
98  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 98 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
9999 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
100100
101101 virtual bool canBeSelectionLeaf() const { return false; }
125426

Source/WebCore/rendering/svg/RenderSVGText.cpp

@@void RenderSVGText::computeFloatRectForR
111111 SVGRenderSupport::computeFloatRectForRepaint(this, repaintContainer, repaintRect, fixed);
112112}
113113
114 void RenderSVGText::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags, bool* wasFixed) const
 114void RenderSVGText::mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState& transformState, MapLocalToContainerFlags mode, bool* wasFixed) const
115115{
116  SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, wasFixed);
 116 SVGRenderSupport::mapLocalToContainer(this, repaintContainer, transformState, mode & SnapOffsetForTransforms, wasFixed);
117117}
118118
119119const RenderObject* RenderSVGText::pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
125426

Source/WebCore/rendering/svg/RenderSVGText.h

@@private:
7575 virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, LayoutRect&, bool fixed = false) const;
7676 virtual void computeFloatRectForRepaint(RenderBoxModelObject* repaintContainer, FloatRect&, bool fixed = false) const;
7777
78  virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip, bool* wasFixed = 0) const OVERRIDE;
 78 virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, TransformState&, MapLocalToContainerFlags mode = ApplyContainerFlip | SnapOffsetForTransforms, bool* wasFixed = 0) const OVERRIDE;
7979 virtual const RenderObject* pushMappingToContainer(const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&) const;
8080 virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
8181 virtual void removeChild(RenderObject*) OVERRIDE;
125426

Source/WebCore/rendering/svg/SVGRenderSupport.cpp

@@void SVGRenderSupport::computeFloatRectF
7171 object->parent()->computeFloatRectForRepaint(repaintContainer, repaintRect, fixed);
7272}
7373
74 void SVGRenderSupport::mapLocalToContainer(const RenderObject* object, RenderBoxModelObject* repaintContainer, TransformState& transformState, bool* wasFixed)
 74void SVGRenderSupport::mapLocalToContainer(const RenderObject* object, RenderBoxModelObject* repaintContainer, TransformState& transformState, bool snapOffsetForTransforms, bool* wasFixed)
7575{
7676 transformState.applyTransform(object->localToParentTransform());
7777

@@void SVGRenderSupport::mapLocalToContain
8282 // RenderSVGRoot's mapLocalToContainer method expects CSS box coordinates.
8383 if (parent->isSVGRoot())
8484 transformState.applyTransform(toRenderSVGRoot(parent)->localToBorderBoxTransform());
85 
86  parent->mapLocalToContainer(repaintContainer, transformState, UseTransforms, wasFixed);
 85
 86 MapLocalToContainerFlags mode = UseTransforms;
 87 if (snapOffsetForTransforms)
 88 mode |= SnapOffsetForTransforms;
 89 parent->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
8790}
8891
8992const RenderObject* SVGRenderSupport::pushMappingToContainer(const RenderObject* object, const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap)
125426

Source/WebCore/rendering/svg/SVGRenderSupport.h

@@public:
6464 // Important functions used by nearly all SVG renderers centralizing coordinate transformations / repaint rect calculations
6565 static LayoutRect clippedOverflowRectForRepaint(const RenderObject*, RenderBoxModelObject* repaintContainer);
6666 static void computeFloatRectForRepaint(const RenderObject*, RenderBoxModelObject* repaintContainer, FloatRect&, bool fixed);
67  static void mapLocalToContainer(const RenderObject*, RenderBoxModelObject* repaintContainer, TransformState&, bool* wasFixed = 0);
 67 static void mapLocalToContainer(const RenderObject*, RenderBoxModelObject* repaintContainer, TransformState&, bool snapOffsetForTransforms = true, bool* wasFixed = 0);
6868 static const RenderObject* pushMappingToContainer(const RenderObject*, const RenderBoxModelObject* ancestorToStopAt, RenderGeometryMap&);
6969
7070 // Shared between SVG renderers and resources.
125426

LayoutTests/ChangeLog

 12012-08-13 Levi Weintraub <leviw@chromium.org>
 2
 3 Accumulate sub-pixel offsets through layers and transforms
 4 https://bugs.webkit.org/show_bug.cgi?id=89238
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * fast/sub-pixel/sub-pixel-accumulates-to-layers.html: Added.
 9 * platform/chromium-mac/compositing/shadows/shadow-drawing-expected.png:
 10 * platform/chromium-mac/fast/repaint/scroll-fixed-layer-with-transformed-parent-layer-expected.png:
 11 * platform/chromium-mac/fast/sub-pixel/sub-pixel-accumulates-to-layers-expected.png: Added.
 12 * platform/chromium-mac/fast/sub-pixel/sub-pixel-accumulates-to-layers-expected.txt: Added.
 13 * platform/chromium-mac/fast/transforms/transformed-document-element-expected.png:
 14 * platform/chromium-mac/media/audio-repaint-expected.png:
 15 * platform/chromium-mac/svg/transforms/svg-css-transforms-expected.png:
 16 * platform/chromium/TestExpectations:
 17 * platform/efl/Skipped:
 18 * platform/gtk/TestExpectations:
 19 * platform/mac-lion/Skipped:
 20 * platform/mac-snowleopard/Skipped:
 21 * platform/mac-wk2/Skipped:
 22 * platform/mac/Skipped:
 23 * platform/qt-4.8/Skipped:
 24 * platform/qt/Skipped:
 25 * platform/win-wk2/Skipped:
 26 * platform/win-xp/Skipped:
 27 * platform/win/Skipped:
 28 * platform/wincairo/Skipped:
 29 * platform/wk2/Skipped:
 30
1312012-08-13 Pavel Feldman <pfeldman@chromium.org>
232
333 Web Inspector: get rid of beforeTextChanged
125426

LayoutTests/fast/sub-pixel/sub-pixel-accumulates-to-layers.html

 1
 2<!DOCTYPE html>
 3<html>
 4<head>
 5<style>
 6body {
 7 margin: 0;
 8 zoom: 0.9;
 9 -webkit-transform: scale(40);
 10 -webkit-transform-origin: 0 0;
 11}
 12
 13.container {
 14 position: absolute;
 15 top: 0px;
 16 left: 0px;
 17 width: 16px;
 18 height: 16px;
 19}
 20
 21.container > div {
 22 position: absolute;
 23 top: 0;
 24 left: 50%;
 25 width: 1.6px;
 26 height: 8px;
 27 margin-left: -0.8px;
 28
 29 background-color: red;
 30}
 31.rotated > div {
 32 background-color: green !important;
 33 -webkit-transform: rotateZ(0);
 34}
 35</style>
 36</head>
 37<body>
 38 <div class="container"><div></div></div>
 39 <div class="container rotated"><div></div></div>
 40</body>
 41</html>
0

LayoutTests/platform/chromium-mac-snowleopard/fast/sub-pixel/sub-pixel-accumulates-to-layers-expected.txt

 1layer at (0,0) size 32000x585
 2 RenderView at (0,0) size 800x585
 3layer at (0,0) size 800x0
 4 RenderBlock {HTML} at (0,0) size 800x0
 5layer at (0,0) size 14x14
 6 RenderBlock (positioned) {DIV} at (0,0) size 15x15
 7layer at (6,0) size 2x7
 8 RenderBlock (positioned) {DIV} at (6,0) size 2x8 [bgcolor=#FF0000]
 9layer at (0,0) size 14x14
 10 RenderBlock (positioned) {DIV} at (0,0) size 15x15
 11layer at (6,0) size 2x7
 12 RenderBlock (positioned) {DIV} at (6,0) size 2x8 [bgcolor=#008000]
0

LayoutTests/platform/chromium-mac/fast/clip/overflow-border-radius-composited-expected.txt

@@layer at (0,0) size 800x600
1616 text run at (240,178) width 4: " "
1717 RenderBR {BR} at (244,192) size 0x0
1818 RenderText {#text} at (0,0) size 0x0
19 layer at (18,36) size 220x120 clip at (28,46) size 200x100 scrollWidth 206 scrollHeight 156
 19layer at (18,36) size 220x120 clip at (28,46) size 200x100 scrollWidth 207 scrollHeight 157
2020 RenderBlock {DIV} at (10,28) size 220x120 [border: (10px solid #000000)]
21 layer at (262,36) size 220x120 clip at (272,46) size 200x100 scrollWidth 206 scrollHeight 156
 21layer at (262,36) size 220x120 clip at (272,46) size 200x100 scrollWidth 207 scrollHeight 157
2222 RenderBlock {DIV} at (254,28) size 220x120 [border: (10px solid #000000)]
2323layer at (28,46) size 200x100
2424 RenderBlock {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]

@@layer at (272,46) size 200x100
2828 RenderBlock (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
2929 RenderText {#text} at (0,0) size 95x18
3030 text run at (0,0) width 95: "static > relative"
31 layer at (506,36) size 220x120 clip at (516,46) size 200x100 scrollWidth 206 scrollHeight 156
 31layer at (506,36) size 220x120 clip at (516,46) size 200x100 scrollWidth 207 scrollHeight 157
3232 RenderBlock (relative positioned) {DIV} at (498,28) size 220x120 [border: (10px solid #000000)]
3333layer at (516,46) size 200x100
3434 RenderBlock {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
3535 RenderText {#text} at (0,0) size 95x18
3636 text run at (0,0) width 95: "relative > static"
37 layer at (18,176) size 220x120 clip at (28,186) size 200x100 scrollWidth 206 scrollHeight 156
 37layer at (18,176) size 220x120 clip at (28,186) size 200x100 scrollWidth 207 scrollHeight 157
3838 RenderBlock (relative positioned) {DIV} at (10,168) size 220x120 [border: (10px solid #000000)]
3939layer at (28,186) size 200x100
4040 RenderBlock (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
4141 RenderText {#text} at (0,0) size 109x18
4242 text run at (0,0) width 109: "relative > relative"
43 layer at (18,316) size 220x120 clip at (28,326) size 200x100 scrollWidth 206 scrollHeight 156
 43layer at (18,316) size 220x120 clip at (28,326) size 200x100 scrollWidth 207 scrollHeight 157
4444 RenderBlock (relative positioned) {DIV} at (10,308) size 220x120 [border: (10px solid #000000)]
4545layer at (28,326) size 200x100
4646 RenderBlock (positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
125426

LayoutTests/platform/chromium-mac/fast/clip/overflow-border-radius-transformed-expected.txt

@@layer at (0,0) size 800x600
1616 text run at (240,178) width 4: " "
1717 RenderBR {BR} at (244,192) size 0x0
1818 RenderText {#text} at (0,0) size 0x0
19 layer at (18,36) size 220x120 clip at (28,46) size 200x100 scrollWidth 206 scrollHeight 156
 19layer at (18,36) size 220x120 clip at (28,46) size 200x100 scrollWidth 207 scrollHeight 157
2020 RenderBlock {DIV} at (10,28) size 220x120 [border: (10px solid #000000)]
21 layer at (262,36) size 220x120 clip at (272,46) size 200x100 scrollWidth 206 scrollHeight 156
 21layer at (262,36) size 220x120 clip at (272,46) size 200x100 scrollWidth 207 scrollHeight 157
2222 RenderBlock {DIV} at (254,28) size 220x120 [border: (10px solid #000000)]
2323layer at (28,46) size 200x100
2424 RenderBlock {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]

@@layer at (272,46) size 200x100
2828 RenderBlock (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
2929 RenderText {#text} at (0,0) size 95x18
3030 text run at (0,0) width 95: "static > relative"
31 layer at (506,36) size 220x120 clip at (516,46) size 200x100 scrollWidth 206 scrollHeight 156
 31layer at (506,36) size 220x120 clip at (516,46) size 200x100 scrollWidth 207 scrollHeight 157
3232 RenderBlock (relative positioned) {DIV} at (498,28) size 220x120 [border: (10px solid #000000)]
3333layer at (516,46) size 200x100
3434 RenderBlock {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
3535 RenderText {#text} at (0,0) size 95x18
3636 text run at (0,0) width 95: "relative > static"
37 layer at (18,176) size 220x120 clip at (28,186) size 200x100 scrollWidth 206 scrollHeight 156
 37layer at (18,176) size 220x120 clip at (28,186) size 200x100 scrollWidth 207 scrollHeight 157
3838 RenderBlock (relative positioned) {DIV} at (10,168) size 220x120 [border: (10px solid #000000)]
3939layer at (28,186) size 200x100
4040 RenderBlock (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
4141 RenderText {#text} at (0,0) size 109x18
4242 text run at (0,0) width 109: "relative > relative"
43 layer at (18,316) size 220x120 clip at (28,326) size 200x100 scrollWidth 206 scrollHeight 156
 43layer at (18,316) size 220x120 clip at (28,326) size 200x100 scrollWidth 207 scrollHeight 157
4444 RenderBlock (relative positioned) {DIV} at (10,308) size 220x120 [border: (10px solid #000000)]
4545layer at (28,326) size 200x100
4646 RenderBlock (positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080]
125426

LayoutTests/platform/chromium-mac/fast/forms/validation-message-appearance-expected.txt

@@layer at (13,13) size 117x13
1616 RenderBlock {DIV} at (3,3) size 117x13
1717layer at (10,29) size 310x73
1818 RenderBlock (positioned) zI: 2147483647 {DIV} at (10,29) size 311x73
19 layer at (10,29) size 310x13 scrollHeight 25
 19layer at (10,29) size 310x13 scrollHeight 26
2020 RenderBlock {DIV} at (0,0) size 311x13
2121layer at (10,41) size 310x60
2222 RenderDeprecatedFlexibleBox (relative positioned) zI: 2147483644 {DIV} at (0,13) size 311x60 [bgcolor=#FFFFFF] [border: (1px solid #CCCCCC) (1px solid #AAAAAA) (1px solid #888888) (1px solid #AAAAAA)]
125426

LayoutTests/platform/chromium-mac/fast/sub-pixel/sub-pixel-accumulates-to-layers-expected.txt

 1layer at (0,0) size 32000x585
 2 RenderView at (0,0) size 800x585
 3layer at (0,0) size 800x0
 4 RenderBlock {HTML} at (0,0) size 800x0
 5layer at (0,0) size 14x14
 6 RenderBlock (positioned) {DIV} at (0,0) size 15x15
 7layer at (6,0) size 2x7
 8 RenderBlock (positioned) {DIV} at (6,0) size 2x8 [bgcolor=#FF0000]
 9layer at (0,0) size 14x14
 10 RenderBlock (positioned) {DIV} at (0,0) size 15x15
 11layer at (6,0) size 2x7
 12 RenderBlock (positioned) {DIV} at (6,0) size 2x8 [bgcolor=#008000]
0

LayoutTests/platform/chromium/TestExpectations

@@BUGWK92570 WIN DEBUG : inspector/timelin
34203420
34213421BUGCR139493 DEBUG : media/track/track-cues-sorted-before-dispatch.html = PASS CRASH
34223422
 3423// Needs update after bots cycle
 3424BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : fast/sub-pixel/sub-pixel-accumulates-to-layers.html = PASS FAIL MISSING
 3425BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : transforms/svg-cs-css.xhtml = PASS FAIL
 3426BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : svg/transforms/svg-css-transforms.xhtml = PASS FAIL
 3427BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : media/audio-repaint.html = PASS FAIL
 3428BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : compositing/shadows/shadow-drawing.html = PASS FAIL
 3429BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : fast/repaint/transform-absolute-child.html = PASS FAIL
 3430BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : fast/repaint/transform-repaint-descendants.html = PASS FAIL
 3431BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : fast/repaint/transform-translate.html = PASS FAIL
 3432BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : fast/repaint/scroll-fixed-layer-with-transformed-parent-layer.html = PASS FAIL
 3433BUGLEVIW LEOPARD SNOWLEOPARD WIN LINUX : fast/transforms/transformed-document-element.html = PASS FAIL
 3434
34233435// Supposedly started failing between CR r140760 and CR r141216. The failures
34243436// look like they involve antialiasing; the fact that the test clearly expects
34253437// these pixels not to be antialiased means these shouldn't just be rebaselined
125426

LayoutTests/platform/gtk/TestExpectations

@@BUGWK85532 : fast/sub-pixel/table-cells-
346346BUGWK85532 SKIP : fast/sub-pixel/table-rows-have-stable-height.html = CRASH TEXT
347347BUGWK85532 : fast/sub-pixel/table-rows-no-gaps.html = PASS
348348BUGWK85532 : fast/sub-pixel/vertical-align-middle-overflow.html = PASS
 349BUGWK85532 : fast/sub-pixel/sub-pixel-accumulates-to-layers.html = PASS FAIL
349350
350351// Mediastream implementation is not complete yet.
351352BUGWK79203 SKIP : fast/mediastream = TEXT
125426

LayoutTests/platform/mac-lion/Skipped

@@fast/sub-pixel/position-right-aligns-wit
116116fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
117117fast/sub-pixel/size-of-box-with-zoom.html
118118fast/sub-pixel/table-rows-no-gaps.html
 119fast/sub-pixel/sub-pixel-accumulates-to-layers.html
119120
120121# This media test always failed on Lion
121122# https://bugs.webkit.org/show_bug.cgi?id=86527 and <rdar://problem/11458493>
125426

LayoutTests/platform/mac-snowleopard/Skipped

@@fast/sub-pixel/position-right-aligns-wit
210210fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
211211fast/sub-pixel/size-of-box-with-zoom.html
212212fast/sub-pixel/table-rows-no-gaps.html
 213fast/sub-pixel/sub-pixel-accumulates-to-layers.html
213214
214215# Frame::findString does nothing on pages that prevent selection
215216# https://bugs.webkit.org/show_bug.cgi?id=40361
125426

LayoutTests/platform/mac-wk2/Skipped

@@fast/sub-pixel/position-right-aligns-wit
216216fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
217217fast/sub-pixel/size-of-box-with-zoom.html
218218fast/sub-pixel/table-rows-no-gaps.html
 219fast/sub-pixel/sub-pixel-accumulates-to-layers.html
219220
220221# fast/events/pagehide-timeout.html, pageshow-pagehide-on-back-cached-with-frames.html, and
221222# pageshow-pagehide-on-back-cached.html flakey on Lion Intel Debug WebKit testers.
125426

LayoutTests/platform/mac/Skipped

@@fast/sub-pixel/position-right-aligns-wit
831831fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
832832fast/sub-pixel/size-of-box-with-zoom.html
833833fast/sub-pixel/table-rows-no-gaps.html
 834fast/sub-pixel/sub-pixel-accumulates-to-layers.html
834835
835836# No CORS support for media elements is implemented yet.
836837http/tests/security/video-cross-origin-readback.html
125426

LayoutTests/platform/qt-4.8/Skipped

@@fast/sub-pixel/position-right-aligns-wit
103103fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
104104fast/sub-pixel/size-of-box-with-zoom.html
105105fast/sub-pixel/table-rows-no-gaps.html
 106fast/sub-pixel/sub-pixel-accumulates-to-layers.html
106107
107108# SVG Fonts are only supported when using QRawFont, which is not
108109# supported with Qt 4.
125426

LayoutTests/platform/qt/Skipped

@@fast/sub-pixel/position-right-aligns-wit
289289fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
290290fast/sub-pixel/size-of-box-with-zoom.html
291291fast/sub-pixel/table-rows-no-gaps.html
 292fast/sub-pixel/sub-pixel-accumulates-to-layers.html
292293
293294# CSS Regions support not yet enabled. http://webkit.org/b/57312
294295fast/regions
125426

LayoutTests/platform/win-wk2/Skipped

@@fast/sub-pixel/position-right-aligns-wit
949949fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
950950fast/sub-pixel/size-of-box-with-zoom.html
951951fast/sub-pixel/table-rows-no-gaps.html
 952fast/sub-pixel/sub-pixel-accumulates-to-layers.html
952953
953954# HiDPI tests require test infrastructure enhancements
954955fast/hidpi
125426

LayoutTests/platform/win-xp/Skipped

@@fast/sub-pixel/position-right-aligns-wit
4949fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
5050fast/sub-pixel/size-of-box-with-zoom.html
5151fast/sub-pixel/table-rows-no-gaps.html
 52fast/sub-pixel/sub-pixel-accumulates-to-layers.html
5253
5354# REGRESSION (r83928 or before): Some tests failing assertions in MarkStack::internalAppend / MarkStack::drain
5455# https://bugs.webkit.org/show_bug.cgi?id=58657
125426

LayoutTests/platform/win/Skipped

@@fast/sub-pixel/position-right-aligns-wit
17461746fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
17471747fast/sub-pixel/size-of-box-with-zoom.html
17481748fast/sub-pixel/table-rows-no-gaps.html
 1749fast/sub-pixel/sub-pixel-accumulates-to-layers.html
17491750
17501751# No CORS support for media elements is implemented yet.
17511752http/tests/security/video-cross-origin-readback.html
125426

LayoutTests/platform/wincairo/Skipped

@@fast/sub-pixel/position-right-aligns-wit
21342134fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
21352135fast/sub-pixel/size-of-box-with-zoom.html
21362136fast/sub-pixel/table-rows-no-gaps.html
 2137fast/sub-pixel/sub-pixel-accumulates-to-layers.html
21372138
21382139#Battery Status API is not implemented.
21392140batterystatus
125426

LayoutTests/platform/wk2/Skipped

@@fast/sub-pixel/position-right-aligns-wit
9999fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
100100fast/sub-pixel/size-of-box-with-zoom.html
101101fast/sub-pixel/table-rows-no-gaps.html
 102fast/sub-pixel/sub-pixel-accumulates-to-layers.html
102103
103104# CONSOLE MESSAGE: line 0: SVG animation pause API missing!
104105# [WK2] SVG animation pause API missing
125426

LayoutTests/platform/chromium-mac/compositing/shadows/shadow-drawing-expected.png

aa9cddf458a729785f5cc127a69898e9

LayoutTests/platform/chromium-mac/fast/repaint/scroll-fixed-layer-with-transformed-parent-layer-expected.png

da192e76e164d9ae7e62d09b78090bf6

LayoutTests/platform/chromium-mac/fast/repaint/transform-translate-expected.png

c5aeca7f341a58a4adc5cd39c02ba377

LayoutTests/platform/chromium-mac/fast/sub-pixel/sub-pixel-accumulates-to-layers-expected.png

c286ab37380a90e8cf37de2be9aaad67

LayoutTests/platform/chromium-mac/fast/transforms/transformed-document-element-expected.png

97d625b8080cc9c15f871352a2bd8d68

LayoutTests/platform/chromium-mac/media/audio-repaint-expected.png

80a183ca74f8c7c0add9fab2a72e0073

LayoutTests/platform/chromium-mac/svg/transforms/svg-css-transforms-expected.png

41842715c4a8a5a38597d182a8fe104c

LayoutTests/platform/chromium-mac/transforms/svg-vs-css-expected.png

efd08e3d0a36ecd622798ccf0f015ba7