| 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..a64be041d6dba1cd0c8b6d66435760978b5e1021 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,16 @@ void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen
|
| traverseNonCompositingDescendants(*this, Functor());
|
| }
|
|
|
| +void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const LayoutBoxModelObject& paintInvalidationContainer)
|
| +{
|
| + invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, PaintInvalidationLayer);
|
| + setPreviousPaintInvalidationRect(LayoutRect());
|
| + for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibling()) {
|
| + if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSelfPaintingLayer())
|
| + child->invalidatePaintIncludingNonSelfPaintingLayerDescendants(paintInvalidationContainer);
|
| + }
|
| +}
|
| +
|
| void LayoutObject::setIsSlowRepaintObject(bool isSlowRepaintObject)
|
| {
|
| ASSERT(frameView());
|
|
|