| Index: third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| index 85469ef8baeb70befcdbb797f57ebe3e3d300a91..cf65d3481606f8f83cf0fd38d607e5bac1e3a658 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| @@ -1484,12 +1484,6 @@ PaintInvalidationReason LayoutObject::getPaintInvalidationReason(const LayoutBox
|
| const LayoutRect& oldBounds, const LayoutPoint& oldPositionFromPaintInvalidationBacking,
|
| const LayoutRect& newBounds, const LayoutPoint& newPositionFromPaintInvalidationBacking) const
|
| {
|
| - // First check for InvalidationLocationChange to avoid it from being hidden by other
|
| - // invalidation reasons because we'll need to force check for paint invalidation for
|
| - // children when location of this object changed.
|
| - if (newPositionFromPaintInvalidationBacking != oldPositionFromPaintInvalidationBacking)
|
| - return PaintInvalidationLocationChange;
|
| -
|
| if (shouldDoFullPaintInvalidation())
|
| return m_bitfields.fullPaintInvalidationReason();
|
|
|
| @@ -1499,11 +1493,12 @@ PaintInvalidationReason LayoutObject::getPaintInvalidationReason(const LayoutBox
|
| if (styleRef().hasOutline())
|
| return PaintInvalidationOutline;
|
|
|
| + bool locationChanged = newPositionFromPaintInvalidationBacking != oldPositionFromPaintInvalidationBacking;
|
| +
|
| // If the bounds are the same then we know that none of the statements below
|
| - // can match, so we can early out since we will not need to do any
|
| - // invalidation.
|
| + // can match, so we can early out.
|
| if (oldBounds == newBounds)
|
| - return PaintInvalidationNone;
|
| + return locationChanged && !oldBounds.isEmpty() ? PaintInvalidationLocationChange : PaintInvalidationNone;
|
|
|
| // If we shifted, we don't know the exact reason so we are conservative and trigger a full invalidation. Shifting could
|
| // be caused by some layout property (left / top) or some in-flow layoutObject inserted / removed before us in the tree.
|
| @@ -1526,6 +1521,9 @@ PaintInvalidationReason LayoutObject::getPaintInvalidationReason(const LayoutBox
|
| if (newBounds.isEmpty())
|
| return PaintInvalidationBecameInvisible;
|
|
|
| + if (locationChanged)
|
| + return PaintInvalidationLocationChange;
|
| +
|
| return PaintInvalidationIncremental;
|
| }
|
|
|
|
|