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

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

Issue 1813383002: Move all fast-path paint invalidation mapping into PaintInvalidationState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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/LayoutView.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.cpp b/third_party/WebKit/Source/core/layout/LayoutView.cpp
index 7df99b4f73a07bd936ade3e848a9ac99304f0a9c..6be4f7502fd4aad85a41b7a0cdd73c107b85ac50 100644
--- a/third_party/WebKit/Source/core/layout/LayoutView.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutView.cpp
@@ -323,7 +323,7 @@ LayoutRect LayoutView::visualOverflowRect() const
return LayoutRect(documentRect());
}
-void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
+void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
{
ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == static_cast<bool>(mode & IsFixed));
@@ -346,10 +346,11 @@ void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, Transf
if (mode & TraverseDocumentBoundaries) {
if (LayoutPart* parentDocLayoutObject = frame()->ownerLayoutObject()) {
- transformState.move(-frame()->view()->scrollOffset());
+ if (!(mode & DontApplyFrameScrollOffsetAndClip))
+ transformState.move(-frame()->view()->scrollOffset());
transformState.move(parentDocLayoutObject->contentBoxOffset());
- parentDocLayoutObject->mapLocalToAncestor(ancestor, transformState, mode, wasFixed, paintInvalidationState);
+ parentDocLayoutObject->mapLocalToAncestor(ancestor, transformState, mode, wasFixed);
}
}
}
@@ -444,7 +445,7 @@ void LayoutView::invalidateTreeIfNeeded(const PaintInvalidationState& paintInval
LayoutRect dirtyRect = viewRect();
if (doingFullPaintInvalidation() && !dirtyRect.isEmpty()) {
const LayoutBoxModelObject& paintInvalidationContainer = paintInvalidationState.paintInvalidationContainer();
- PaintLayer::mapRectToPaintInvalidationBacking(this, &paintInvalidationContainer, dirtyRect, &paintInvalidationState);
+ paintInvalidationState.mapLocalRectToPaintInvalidationBacking(dirtyRect);
invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRect, PaintInvalidationFull);
invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationContainer, paintInvalidationState, PaintInvalidationFull);
}
@@ -475,19 +476,16 @@ void LayoutView::invalidatePaintForViewAndCompositedLayers()
compositor()->fullyInvalidatePaint();
}
-void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, const PaintInvalidationState* invalidationState) const
+void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect) const
{
- mapToVisibleRectInAncestorSpace(ancestor, rect, IsNotFixedPosition, invalidationState);
+ mapToVisibleRectInAncestorSpace(ancestor, rect, 0);
}
-void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, ViewportConstrainedPosition viewportConstraint,
- const PaintInvalidationState* paintInvalidationState) const
+void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, MapCoordinatesFlags mode) const
{
if (document().printing())
return;
- // TODO(chrishtr): fix PaintInvalidationState offsets for LayoutViews.
-
if (style()->isFlippedBlocksWritingMode()) {
// We have to flip by hand since the view's logical height has not been determined. We
// can use the viewport width and height.
@@ -497,7 +495,8 @@ void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* anc
rect.setX(viewWidth() - rect.maxX());
}
- adjustViewportConstrainedOffset(rect, viewportConstraint);
+ if (mode & IsFixed)
+ adjustOffsetForFixedPosition(rect);
// Apply our transform if we have one (because of full page zooming).
if (!ancestor && layer() && layer()->transform())
@@ -512,7 +511,7 @@ void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* anc
return;
if (LayoutBox* obj = owner->layoutBox()) {
- if (!paintInvalidationState || !paintInvalidationState->viewClippingAndScrollOffsetDisabled()) {
+ if (!(mode & DontApplyFrameScrollOffsetAndClip)) {
// Intersect the viewport with the paint invalidation rect.
LayoutRect viewRectangle = viewRect();
rect.intersect(viewRectangle);
@@ -523,15 +522,12 @@ void LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* anc
// Adjust for frame border.
rect.move(obj->contentBoxOffset());
- obj->mapToVisibleRectInAncestorSpace(ancestor, rect, 0);
+ obj->mapToVisibleRectInAncestorSpace(ancestor, rect);
}
}
-void LayoutView::adjustViewportConstrainedOffset(LayoutRect& rect, ViewportConstrainedPosition viewportConstraint) const
+void LayoutView::adjustOffsetForFixedPosition(LayoutRect& rect) const
{
- if (viewportConstraint != IsFixedPosition)
- return;
-
if (m_frameView) {
rect.move(toIntSize(m_frameView->scrollPosition()));
if (hasOverflowClip())

Powered by Google App Engine
This is Rietveld 408576698