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()); |