Index: third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp |
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp |
index 086b5b51fe0577a335892660e0d1b486135072ab..db7c066603e031565dbc37c3a0b61422074c27e6 100644 |
--- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp |
+++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp |
@@ -43,6 +43,8 @@ PaintInvalidationState::PaintInvalidationState( |
m_cachedOffsetsEnabled(true), |
m_cachedOffsetsForAbsolutePositionEnabled(true), |
m_paintInvalidationContainer(&layoutView.containerForPaintInvalidation()), |
+ m_scrollAdjustment( |
+ m_paintInvalidationContainer->scrollAdjustmentForPaintInvalidation()), |
m_paintInvalidationContainerForStackedContents( |
m_paintInvalidationContainer), |
m_containerForAbsolutePosition(layoutView), |
@@ -85,6 +87,7 @@ PaintInvalidationState::PaintInvalidationState( |
m_cachedOffsetsForAbsolutePositionEnabled( |
parentState.m_cachedOffsetsForAbsolutePositionEnabled), |
m_paintInvalidationContainer(parentState.m_paintInvalidationContainer), |
+ m_scrollAdjustment(parentState.m_scrollAdjustment), |
m_paintInvalidationContainerForStackedContents( |
parentState.m_paintInvalidationContainerForStackedContents), |
m_containerForAbsolutePosition( |
@@ -120,6 +123,7 @@ PaintInvalidationState::PaintInvalidationState( |
DCHECK(parentState.m_didUpdateForChildren); |
#endif |
+ const auto* oldPaintInvalidationContainer = m_paintInvalidationContainer; |
if (currentObject.isPaintInvalidationContainer()) { |
m_paintInvalidationContainer = toLayoutBoxModelObject(¤tObject); |
if (currentObject.styleRef().isStackingContext()) |
@@ -167,6 +171,15 @@ PaintInvalidationState::PaintInvalidationState( |
PaintInvalidatorContext::ForcedSubtreeFullInvalidation; |
} |
+ if (m_paintInvalidationContainer != oldPaintInvalidationContainer) { |
+ m_scrollAdjustment = |
+ m_paintInvalidationContainer->scrollAdjustmentForPaintInvalidation(); |
+ } else { |
+ DCHECK( |
+ m_scrollAdjustment == |
+ m_paintInvalidationContainer->scrollAdjustmentForPaintInvalidation()); |
+ } |
+ |
if (!currentObject.isBoxModelObject() && !currentObject.isSVG()) |
return; |
@@ -442,14 +455,13 @@ LayoutPoint PaintInvalidationState::computeLocationInBacking( |
point = slowLocalToAncestorPoint( |
m_currentObject, *m_paintInvalidationContainer, FloatPoint()); |
} |
+ |
+ point.move(m_scrollAdjustment); |
} |
PaintLayer::mapPointInPaintInvalidationContainerToBacking( |
*m_paintInvalidationContainer, point); |
- point.move(m_currentObject.scrollAdjustmentForPaintInvalidation( |
- *m_paintInvalidationContainer)); |
- |
return LayoutPoint(point); |
} |
@@ -493,8 +505,8 @@ LayoutRect PaintInvalidationState::computeVisualRectInBackingForSVG() const { |
m_currentObject.adjustVisualRectForRasterEffects(rect); |
- rect.move(m_currentObject.scrollAdjustmentForPaintInvalidation( |
- *m_paintInvalidationContainer)); |
+ if (m_currentObject != m_paintInvalidationContainer) |
+ rect.move(m_scrollAdjustment); |
return rect; |
} |
@@ -551,8 +563,8 @@ void PaintInvalidationState::mapLocalRectToVisualRectInBacking( |
m_currentObject.adjustVisualRectForRasterEffects(rect); |
- rect.move(m_currentObject.scrollAdjustmentForPaintInvalidation( |
- *m_paintInvalidationContainer)); |
+ if (m_currentObject != m_paintInvalidationContainer) |
+ rect.move(m_scrollAdjustment); |
} |
void PaintInvalidationState::addClipRectRelativeToPaintOffset( |