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

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

Issue 1403963002: Invalidate non-self-painting-layer descendants when creating a layer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 dd976b77bff4aa2411b104588939d6ac91b35734..795ede1ea958bbdf151eae2e95328cfd61300286 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -3391,6 +3391,18 @@ void LayoutObject::invalidateDisplayItemClientForNonCompositingDescendantsOf(con
traverseNonCompositingDescendants(const_cast<LayoutObject&>(object), Functor(paintInvalidationContainer));
}
+void LayoutObject::invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason reason) const
+{
+ // These disablers are valid because we want to use the current compositing/invalidation status.
+ DisablePaintInvalidationStateAsserts invalidationDisabler;
+ DisableCompositingQueryAsserts compositingDisabler;
+
+ LayoutRect invalidationRect = previousPaintInvalidationRect();
+ adjustInvalidationRectForCompositedScrolling(invalidationRect, paintInvalidationContainer);
+ invalidatePaintUsingContainer(paintInvalidationContainer, invalidationRect, PaintInvalidationLayer);
+ invalidateDisplayItemClients(paintInvalidationContainer, PaintInvalidationLayer, invalidationRect, invalidationRect);
+}
+
void LayoutObject::invalidatePaintIncludingNonCompositingDescendants()
{
class Functor : public LayoutObjectTraversalFunctor {
@@ -3398,10 +3410,8 @@ void LayoutObject::invalidatePaintIncludingNonCompositingDescendants()
explicit Functor(const LayoutBoxModelObject& paintInvalidationContainer) : m_paintInvalidationContainer(paintInvalidationContainer) { }
void operator()(LayoutObject& object) const override
{
- LayoutRect invalidationRect = object.previousPaintInvalidationRect();
- object.adjustInvalidationRectForCompositedScrolling(invalidationRect, m_paintInvalidationContainer);
- object.invalidatePaintUsingContainer(m_paintInvalidationContainer, invalidationRect, PaintInvalidationLayer);
- object.invalidateDisplayItemClients(m_paintInvalidationContainer, PaintInvalidationLayer, invalidationRect, invalidationRect);
+ object.invalidatePaintOfPreviousPaintInvalidationRect(m_paintInvalidationContainer, PaintInvalidationLayer);
+ object.setPreviousPaintInvalidationRect(LayoutRect());
}
private:
const LayoutBoxModelObject& m_paintInvalidationContainer;
@@ -3428,6 +3438,21 @@ void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen
traverseNonCompositingDescendants(*this, Functor());
}
+void LayoutObject::invalidatePaintIncludingNonLayerDescendantsInternal(const LayoutBoxModelObject& paintInvalidationContainer)
chrishtr 2015/10/13 17:49:01 NonPaintLayer
Xianzhu 2015/10/13 23:58:12 Changed to invalidatePaintIncludingNonSelfPainting
+{
+ invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, PaintInvalidationLayer);
+ setPreviousPaintInvalidationRect(LayoutRect());
+ for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibling()) {
+ if (!child->hasLayer())
chrishtr 2015/10/13 17:49:00 What about non-self-painting layers?
Xianzhu 2015/10/13 23:58:12 We should also invalidate them. Done.
+ child->invalidatePaintIncludingNonLayerDescendantsInternal(paintInvalidationContainer);
+ }
+}
+
+void LayoutObject::invalidatePaintIncludingNonLayerDescendants()
+{
+ invalidatePaintIncludingNonLayerDescendantsInternal(containerForPaintInvalidationOnRootedTree());
+}
+
void LayoutObject::setIsSlowRepaintObject(bool isSlowRepaintObject)
{
ASSERT(frameView());
« 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