| Index: third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
|
| index 1aeca106f4747a34c6b96f6cab09c9375ebdb3b4..1f5b571c5218aa8c8354299d8716c93302cd752f 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
|
| @@ -20,14 +20,15 @@
|
|
|
| namespace blink {
|
|
|
| +template <typename Rect>
|
| static LayoutRect slowMapToVisualRectInAncestorSpace(
|
| const LayoutObject& object,
|
| const LayoutBoxModelObject& ancestor,
|
| - const FloatRect& rect) {
|
| + const Rect& rect) {
|
| if (object.isSVGChild()) {
|
| LayoutRect result;
|
| - SVGLayoutSupport::mapToVisualRectInAncestorSpace(object, &ancestor, rect,
|
| - result);
|
| + SVGLayoutSupport::mapToVisualRectInAncestorSpace(object, &ancestor,
|
| + FloatRect(rect), result);
|
| return result;
|
| }
|
|
|
| @@ -43,10 +44,13 @@ static LayoutRect slowMapToVisualRectInAncestorSpace(
|
| // TODO(wangxianzhu): Combine this into
|
| // PaintInvalidator::mapLocalRectToBacking() when removing
|
| // PaintInvalidationState.
|
| +// This function is templatized to avoid FloatRect<->LayoutRect conversions
|
| +// which affect performance.
|
| +template <typename Rect, typename Point>
|
| static LayoutRect mapLocalRectToPaintInvalidationBacking(
|
| GeometryMapper& geometryMapper,
|
| const LayoutObject& object,
|
| - const FloatRect& localRect,
|
| + const Rect& localRect,
|
| const PaintInvalidatorContext& context) {
|
| bool isSVGChild = object.isSVGChild();
|
|
|
| @@ -54,7 +58,7 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
|
| // currently in "physical coordinates with flipped block-flow direction"
|
| // (see LayoutBoxModelObject.h) but we need them to be in physical
|
| // coordinates.
|
| - FloatRect rect = localRect;
|
| + Rect rect = localRect;
|
| // Writing-mode flipping doesn't apply to non-root SVG.
|
| if (!isSVGChild) {
|
| if (object.isBox()) {
|
| @@ -76,7 +80,7 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
|
| // For SVG, the input rect is in local SVG coordinates in which paint
|
| // offset doesn't apply.
|
| if (!isSVGChild)
|
| - rect.moveBy(FloatPoint(object.paintOffset()));
|
| + rect.moveBy(Point(object.paintOffset()));
|
| // Use enclosingIntRect to ensure the final visual rect will cover the
|
| // rect in source coordinates no matter if the painting will use pixel
|
| // snapping.
|
| @@ -94,11 +98,11 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
|
| // For non-root SVG, the input rect is in local SVG coordinates in which
|
| // paint offset doesn't apply.
|
| if (!isSVGChild) {
|
| - rect.moveBy(FloatPoint(object.paintOffset()));
|
| + rect.moveBy(Point(object.paintOffset()));
|
| // Use enclosingIntRect to ensure the final visual rect will cover the
|
| // rect in source coordinates no matter if the painting will use pixel
|
| // snapping.
|
| - rect = enclosingIntRect(rect);
|
| + rect = Rect(enclosingIntRect(rect));
|
| }
|
|
|
| const auto* containerContentsProperties =
|
| @@ -114,7 +118,7 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
|
| context.treeBuilderContext.current.transform,
|
| context.treeBuilderContext.current.clip, nullptr, nullptr);
|
| result = LayoutRect(geometryMapper.sourceToDestinationVisualRect(
|
| - rect, currentTreeState, *containerContentsProperties));
|
| + FloatRect(rect), currentTreeState, *containerContentsProperties));
|
| }
|
|
|
| // Convert the result to the container's contents space.
|
| @@ -133,28 +137,20 @@ void PaintInvalidatorContext::mapLocalRectToPaintInvalidationBacking(
|
| const LayoutObject& object,
|
| LayoutRect& rect) const {
|
| GeometryMapper geometryMapper;
|
| - rect = blink::mapLocalRectToPaintInvalidationBacking(geometryMapper, object,
|
| - FloatRect(rect), *this);
|
| -}
|
| -
|
| -LayoutRect PaintInvalidator::mapLocalRectToPaintInvalidationBacking(
|
| - const LayoutObject& object,
|
| - const FloatRect& localRect,
|
| - const PaintInvalidatorContext& context) {
|
| - return blink::mapLocalRectToPaintInvalidationBacking(m_geometryMapper, object,
|
| - localRect, context);
|
| + rect = blink::mapLocalRectToPaintInvalidationBacking<LayoutRect, LayoutPoint>(
|
| + geometryMapper, object, rect, *this);
|
| }
|
|
|
| LayoutRect PaintInvalidator::computeVisualRectInBacking(
|
| const LayoutObject& object,
|
| const PaintInvalidatorContext& context) {
|
| - FloatRect localRect;
|
| - if (object.isSVGChild())
|
| - localRect = SVGLayoutSupport::localVisualRect(object);
|
| - else
|
| - localRect = FloatRect(object.localVisualRect());
|
| -
|
| - return mapLocalRectToPaintInvalidationBacking(object, localRect, context);
|
| + if (object.isSVGChild()) {
|
| + FloatRect localRect = SVGLayoutSupport::localVisualRect(object);
|
| + return mapLocalRectToPaintInvalidationBacking<FloatRect, FloatPoint>(
|
| + m_geometryMapper, object, localRect, context);
|
| + }
|
| + return mapLocalRectToPaintInvalidationBacking<LayoutRect, LayoutPoint>(
|
| + m_geometryMapper, object, object.localVisualRect(), context);
|
| }
|
|
|
| LayoutPoint PaintInvalidator::computeLocationInBacking(
|
|
|