Chromium Code Reviews| 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()); |