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

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

Issue 2080593002: Revert of Let FrameView track object paint invalidations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@TrackInvalidation
Patch Set: Created 4 years, 6 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/LayoutObject.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
index 8263e0f5cc9c0c04a24028dcb2cd0b6b6eaa4481..1445a3e8b26d844bb5c739a877530e62c221fd67 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -1230,54 +1230,62 @@
paintInvalidationContainer.setBackingNeedsPaintInvalidationInRect(dirtyRect, invalidationReason, *this);
}
-void LayoutObject::invalidateDisplayItemClient(const DisplayItemClient& client, PaintInvalidationReason reason) const
+void LayoutObject::invalidateDisplayItemClient(const DisplayItemClient& displayItemClient) const
+{
+ if (PaintLayer* paintingLayer = this->paintingLayer()) {
+ paintingLayer->setNeedsRepaint();
+
+#if !ENABLE(ASSERT)
+ // This is a fast path when we don't need to inform the GraphicsLayer about this paint invalidation.
+ FrameView* frameView = this->frameView();
+ if (!frameView || !frameView->isTrackingPaintInvalidations()) {
+ displayItemClient.setDisplayItemsUncached();
+ return;
+ }
+#endif
+ // This is valid because we want to invalidate the client in the display item list of the current backing.
+ DisableCompositingQueryAsserts disabler;
+ if (const PaintLayer* paintInvalidationLayer = paintingLayer->enclosingLayerForPaintInvalidationCrossingFrameBoundaries())
+ paintInvalidationLayer->layoutObject()->invalidateDisplayItemClientOnBacking(displayItemClient, PaintInvalidationFull);
+ }
+}
+
+void LayoutObject::setPaintingLayerNeedsRepaint() const
+{
+ if (PaintLayer* paintingLayer = this->paintingLayer())
+ paintingLayer->setNeedsRepaint();
+}
+
+void LayoutObject::invalidateDisplayItemClients(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason invalidationReason) const
{
// It's caller's responsibility to ensure enclosingSelfPaintingLayer's needsRepaint is set.
// Don't set the flag here because getting enclosingSelfPaintLayer has cost and the caller can use
// various ways (e.g. PaintInvalidatinState::enclosingSelfPaintingLayer()) to reduce the cost.
- client.setDisplayItemsUncached();
-
- if (FrameView* frameView = this->frameView())
- frameView->trackObjectPaintInvalidation(client, reason);
-}
-
-void LayoutObject::setPaintingLayerNeedsRepaintAndInvalidateDisplayItemClient(const PaintInvalidationState& paintInvalidationState, const DisplayItemClient& client, PaintInvalidationReason reason) const
+ ASSERT(!paintingLayer() || paintingLayer()->needsRepaint());
+ paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*this, invalidationReason, this);
+}
+
+void LayoutObject::invalidateDisplayItemClientsWithPaintInvalidationState(const LayoutBoxModelObject& paintInvalidationContainer, const PaintInvalidationState& paintInvalidationState, PaintInvalidationReason invalidationReason) const
{
paintInvalidationState.paintingLayer().setNeedsRepaint();
- invalidateDisplayItemClient(client, reason);
-}
-
-void LayoutObject::slowSetPaintingLayerNeedsRepaint() const
-{
- if (PaintLayer* paintingLayer = this->paintingLayer())
- paintingLayer->setNeedsRepaint();
-}
-
-void LayoutObject::invalidateDisplayItemClients(PaintInvalidationReason reason) const
-{
- invalidateDisplayItemClient(*this, reason);
-}
-
-void LayoutObject::invalidateDisplayItemClientsWithPaintInvalidationState(const PaintInvalidationState& paintInvalidationState, PaintInvalidationReason reason) const
-{
- paintInvalidationState.paintingLayer().setNeedsRepaint();
- invalidateDisplayItemClients(reason);
-}
+ invalidateDisplayItemClients(paintInvalidationContainer, invalidationReason);
+}
+
bool LayoutObject::compositedScrollsWithRespectTo(const LayoutBoxModelObject& paintInvalidationContainer) const
{
return paintInvalidationContainer.usesCompositedScrolling() && this != &paintInvalidationContainer;
}
-void LayoutObject::invalidatePaintRectangle(const LayoutRect& dirtyRect) const
+const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const LayoutRect& dirtyRect) const
{
RELEASE_ASSERT(isRooted());
if (dirtyRect.isEmpty())
- return;
+ return nullptr;
if (view()->document().printing())
- return; // Don't invalidate paints if we're printing.
+ return nullptr; // Don't invalidate paints if we're printing.
const LayoutBoxModelObject& paintInvalidationContainer = containerForPaintInvalidation();
LayoutRect dirtyRectOnBacking = dirtyRect;
@@ -1290,9 +1298,20 @@
}
invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRectOnBacking, PaintInvalidationRectangle);
-
- slowSetPaintingLayerNeedsRepaint();
- invalidateDisplayItemClients(PaintInvalidationRectangle);
+ return &paintInvalidationContainer;
+}
+
+void LayoutObject::invalidatePaintRectangle(const LayoutRect& rect) const
+{
+ setPaintingLayerNeedsRepaint();
+ const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRectangleInternal(rect);
+ if (paintInvalidationContainer)
+ invalidateDisplayItemClients(*paintInvalidationContainer, PaintInvalidationRectangle);
+}
+
+void LayoutObject::invalidatePaintRectangleNotInvalidatingDisplayItemClients(const LayoutRect& r) const
+{
+ invalidatePaintRectangleInternal(r);
}
void LayoutObject::invalidateTreeIfNeeded(const PaintInvalidationState& paintInvalidationState)
@@ -1395,7 +1414,7 @@
if (!fullInvalidation)
fullyInvalidatePaint(paintInvalidationContainer, PaintInvalidationSelection, oldSelectionRect, newSelectionRect);
if (shouldInvalidateSelection())
- invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationState, PaintInvalidationSelection);
+ invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationContainer, paintInvalidationState, PaintInvalidationSelection);
}
PaintInvalidationReason LayoutObject::invalidatePaintIfNeeded(const PaintInvalidationState& paintInvalidationState)
@@ -1459,7 +1478,7 @@
// invalidation is issued. See crbug.com/508383 and crbug.com/515977.
// This is a workaround to force display items to update paint offset.
if (!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled() && paintInvalidationState.forcedSubtreeInvalidationCheckingWithinContainer())
- invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationState, invalidationReason);
+ invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationContainer, paintInvalidationState, invalidationReason);
return invalidationReason;
}
@@ -1469,7 +1488,7 @@
else
fullyInvalidatePaint(paintInvalidationContainer, invalidationReason, oldBounds, newBounds);
- invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationState, invalidationReason);
+ invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationContainer, paintInvalidationState, invalidationReason);
return invalidationReason;
}
@@ -3556,16 +3575,20 @@
} // unnamed namespace
-void LayoutObject::invalidateDisplayItemClientsIncludingNonCompositingDescendants(PaintInvalidationReason reason) const
+void LayoutObject::invalidateDisplayItemClientsIncludingNonCompositingDescendants(const LayoutBoxModelObject* paintInvalidationContainer, PaintInvalidationReason paintInvalidationReason) const
{
// This is valid because we want to invalidate the client in the display item list of the current backing.
DisableCompositingQueryAsserts disabler;
-
- slowSetPaintingLayerNeedsRepaint();
- traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [reason](LayoutObject& object) {
- if (object.hasLayer() && toLayoutBoxModelObject(object).hasSelfPaintingLayer())
+ if (!paintInvalidationContainer) {
+ paintInvalidationContainer = enclosingCompositedContainer();
+ if (!paintInvalidationContainer)
+ return;
+ }
+
+ traverseNonCompositingDescendants(const_cast<LayoutObject&>(*this), [&paintInvalidationContainer, paintInvalidationReason](LayoutObject& object) {
+ if (object.hasLayer())
toLayoutBoxModelObject(object).layer()->setNeedsRepaint();
- object.invalidateDisplayItemClients(reason);
+ object.invalidateDisplayItemClients(*paintInvalidationContainer, paintInvalidationReason);
});
}
@@ -3582,7 +3605,7 @@
LayoutRect invalidationRect = previousPaintInvalidationRect();
invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect, reason);
- invalidateDisplayItemClients(reason);
+ invalidateDisplayItemClients(paintInvalidationContainer, reason);
// This method may be used to invalidate paint of an object changing paint invalidation container.
// Clear previous paint invalidation rect on the original paint invalidation container to avoid
@@ -3613,6 +3636,8 @@
{
invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, PaintInvalidationSubtree);
for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibling()) {
+ if (child->hasLayer())
+ toLayoutBoxModelObject(child)->layer()->setNeedsRepaint();
if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSelfPaintingLayer())
child->invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(paintInvalidationContainer);
}
@@ -3620,7 +3645,7 @@
void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const LayoutBoxModelObject& paintInvalidationContainer)
{
- slowSetPaintingLayerNeedsRepaint();
+ setPaintingLayerNeedsRepaint();
invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(paintInvalidationContainer);
}
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutObject.h ('k') | third_party/WebKit/Source/core/layout/LayoutObjectChildList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698