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

Unified Diff: third_party/WebKit/Source/core/paint/PaintInvalidator.cpp

Issue 2614093002: Combine LayoutObject::previousPaintOffset and paintOffset in paint properties (Closed)
Patch Set: - Created 3 years, 11 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/paint/PaintInvalidator.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
index 64ef222d9b55c431bfa187e31fc6f6188c78b019..c06872338305f38627e16ca68b46f5110cef77b9 100644
--- a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
@@ -74,7 +74,7 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
// For SVG, the input rect is in local SVG coordinates in which paint
// offset doesn't apply.
if (!object.isSVGChild())
- rect.moveBy(FloatPoint(context.treeBuilderContext.current.paintOffset));
+ rect.moveBy(FloatPoint(object.paintOffset()));
Xianzhu 2017/01/06 17:24:39 This is just changed to a shorter form. They are a
// Use enclosingIntRect to ensure the final visual rect will cover the
// rect in source coordinates no matter if the painting will use pixel
// snapping.
@@ -92,7 +92,7 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
// For non-root SVG, the input rect is in local SVG coordinates in which
// paint offset doesn't apply.
if (!object.isSVGChild()) {
- rect.moveBy(FloatPoint(context.treeBuilderContext.current.paintOffset));
+ rect.moveBy(FloatPoint(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.
@@ -111,12 +111,11 @@ static LayoutRect mapLocalRectToPaintInvalidationBacking(
bool success = false;
result = LayoutRect(geometryMapper.mapToVisualRectInDestinationSpace(
- rect, currentTreeState, containerContentsProperties.propertyTreeState,
- success));
+ rect, currentTreeState, containerContentsProperties, success));
DCHECK(success);
// Convert the result to the container's contents space.
- result.moveBy(-containerContentsProperties.paintOffset);
+ result.moveBy(-context.paintInvalidationContainer->paintOffset());
}
object.adjustVisualRectForRasterEffects(result);
@@ -165,7 +164,7 @@ LayoutPoint PaintInvalidator::computeLocationInBacking(
FloatPoint point;
if (object != context.paintInvalidationContainer) {
- point.moveBy(FloatPoint(context.treeBuilderContext.current.paintOffset));
+ point.moveBy(FloatPoint(object.paintOffset()));
PropertyTreeState currentTreeState(
context.treeBuilderContext.current.transform,
@@ -179,14 +178,14 @@ LayoutPoint PaintInvalidator::computeLocationInBacking(
bool success = false;
point = m_geometryMapper
- .mapRectToDestinationSpace(
- FloatRect(point, FloatSize()), currentTreeState,
- containerContentsProperties.propertyTreeState, success)
+ .mapRectToDestinationSpace(FloatRect(point, FloatSize()),
+ currentTreeState,
+ containerContentsProperties, success)
.location();
DCHECK(success);
// Convert the result to the container's contents space.
- point.moveBy(-containerContentsProperties.paintOffset);
+ point.moveBy(-context.paintInvalidationContainer->paintOffset());
}
PaintLayer::mapPointInPaintInvalidationContainerToBacking(
@@ -339,8 +338,6 @@ void PaintInvalidator::updateContext(const LayoutObject& object,
context.oldLocation = objectPaintInvalidator.previousLocationInBacking();
context.newVisualRect = computeVisualRectInBacking(object, context);
context.newLocation = computeLocationInBacking(object, context);
- context.oldPaintOffset = object.previousPaintOffset();
- context.newPaintOffset = context.treeBuilderContext.current.paintOffset;
IntSize adjustment = object.scrollAdjustmentForPaintInvalidation(
*context.paintInvalidationContainer);
@@ -349,7 +346,6 @@ void PaintInvalidator::updateContext(const LayoutObject& object,
object.getMutableForPainting().setPreviousVisualRect(context.newVisualRect);
objectPaintInvalidator.setPreviousLocationInBacking(context.newLocation);
- object.getMutableForPainting().setPreviousPaintOffset(context.newPaintOffset);
}
void PaintInvalidator::invalidatePaintIfNeeded(
@@ -374,9 +370,18 @@ void PaintInvalidator::invalidatePaintIfNeeded(
void PaintInvalidator::invalidatePaintIfNeeded(
const LayoutObject& object,
+ const LayoutPoint& oldPaintOffset,
PaintInvalidatorContext& context) {
object.getMutableForPainting().ensureIsReadyForPaintInvalidation();
+ DCHECK(context.treeBuilderContext.current.paintOffset ==
+ object.paintOffset());
+ if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() &&
+ object.paintOffset() != oldPaintOffset) {
+ object.getMutableForPainting().setShouldDoFullPaintInvalidation(
+ PaintInvalidationLocationChange);
+ }
+
if (!context.forcedSubtreeInvalidationFlags &&
!object
.shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState())
@@ -421,9 +426,7 @@ void PaintInvalidator::invalidatePaintIfNeeded(
break;
}
- if (context.oldLocation != context.newLocation ||
- (RuntimeEnabledFeatures::slimmingPaintV2Enabled() &&
- context.oldPaintOffset != context.newPaintOffset)) {
+ if (context.oldLocation != context.newLocation) {
context.forcedSubtreeInvalidationFlags |=
PaintInvalidatorContext::ForcedSubtreeInvalidationChecking;
}

Powered by Google App Engine
This is Rietveld 408576698