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 2499b0365de08b2b19824780c8af16bcf705f6f5..b8d65b7f480d8e5b8a55f30451ddfa60ae3fde97 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp |
| @@ -3388,6 +3388,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 { |
| @@ -3395,10 +3407,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; |
| @@ -3425,6 +3435,16 @@ void LayoutObject::setShouldDoFullPaintInvalidationIncludingNonCompositingDescen |
| traverseNonCompositingDescendants(*this, Functor()); |
| } |
| +void LayoutObject::invalidatePaintIncludingNonSelfPaintingLayerDescendants(const LayoutBoxModelObject& paintInvalidationContainer) |
| +{ |
| + invalidatePaintOfPreviousPaintInvalidationRect(paintInvalidationContainer, PaintInvalidationLayer); |
| + setPreviousPaintInvalidationRect(LayoutRect()); |
|
Xianzhu
2015/10/14 18:17:48
I removed this line (and line 3411 above) because
|
| + for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibling()) { |
| + if (!child->hasLayer() || !toLayoutBoxModelObject(child)->layer()->isSelfPaintingLayer()) |
|
chrishtr
2015/10/14 17:43:00
Also non-compositing right? Non-self-painting pain
Xianzhu
2015/10/14 18:17:48
I think all composited layers are self-painting, o
|
| + child->invalidatePaintIncludingNonSelfPaintingLayerDescendants(paintInvalidationContainer); |
| + } |
| +} |
| + |
| void LayoutObject::setIsSlowRepaintObject(bool isSlowRepaintObject) |
| { |
| ASSERT(frameView()); |