Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(717)

Unified Diff: third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp

Issue 2761673005: Optimize scroll adjustment for paint invalidation
Patch Set: - Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(&currentObject);
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(

Powered by Google App Engine
This is Rietveld 408576698