| Index: Source/core/layout/LayoutObject.cpp
|
| diff --git a/Source/core/layout/LayoutObject.cpp b/Source/core/layout/LayoutObject.cpp
|
| index fb0062c7711f8310c7700117e88d6e360ffe14e5..0969c25548316aaaa0ab283065f1134249558b8c 100644
|
| --- a/Source/core/layout/LayoutObject.cpp
|
| +++ b/Source/core/layout/LayoutObject.cpp
|
| @@ -1165,7 +1165,21 @@ void LayoutObject::invalidatePaintUsingContainer(const LayoutBoxModelObject& pai
|
| }
|
| }
|
|
|
| -void LayoutObject::invalidateDisplayItemClient(const DisplayItemClientWrapper& displayItemClient) const
|
| +void LayoutObject::invalidateDisplayItemClient(const NonLayoutObjectDisplayItemClientWrapper& displayItemClient)
|
| +{
|
| + if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
|
| + setChildNeedsRepaint();
|
| + invalidateDisplayItemClientInternal(displayItemClient);
|
| +}
|
| +
|
| +void LayoutObject::invalidateDisplayItemClient(LayoutObject& object)
|
| +{
|
| + if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
|
| + object.setNeedsRepaint();
|
| + invalidateDisplayItemClientInternal(object);
|
| +}
|
| +
|
| +void LayoutObject::invalidateDisplayItemClientInternal(const DisplayItemClientWrapper& displayItemClient)
|
| {
|
| if (!RuntimeEnabledFeatures::slimmingPaintEnabled())
|
| return;
|
| @@ -1179,12 +1193,70 @@ void LayoutObject::invalidateDisplayItemClient(const DisplayItemClientWrapper& d
|
| }
|
| }
|
|
|
| -void LayoutObject::invalidateDisplayItemClients(const LayoutBoxModelObject& paintInvalidationContainer) const
|
| +void LayoutObject::invalidateDisplayItemClients(const LayoutBoxModelObject& paintInvalidationContainer)
|
| {
|
| ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled());
|
| + if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
|
| + setNeedsRepaint();
|
| paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*this);
|
| }
|
|
|
| +void LayoutObject::setNeedsRepaint()
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| + ASSERT(document().lifecycle().state() <= DocumentLifecycle::InPaintInvalidation);
|
| +
|
| + if (!selfNeedsRepaint()) {
|
| + m_bitfields.setSelfNeedsRepaint(true);
|
| + markContainerChainForChildNeedsRepaint();
|
| + }
|
| +}
|
| +
|
| +void LayoutObject::setChildNeedsRepaint()
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| + ASSERT(document().lifecycle().state() <= DocumentLifecycle::InPaintInvalidation);
|
| +
|
| + if (!childNeedsRepaint()) {
|
| + m_bitfields.setChildNeedsRepaint(true);
|
| + markContainerChainForChildNeedsRepaint();
|
| + }
|
| +}
|
| +
|
| +void LayoutObject::markContainerChainForChildNeedsRepaint()
|
| +{
|
| + // TODO(wangxianzhu): This should be "markPaintContainerChainForChildNeedsRepaint"
|
| + // (which returns the painting container instead of positioning container for fixed-pos)
|
| + // when we remove DeprecatedPaintLayer. Currently DeprecatedPaintLayer paints fixed-pos
|
| + // object which is not fully controlled by normal LayoutBlock subtree repaint flags.
|
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| + for (LayoutObject* container = this->containerCrossingFrameBoundaries(); container && !container->childNeedsRepaint(); container = container->containerCrossingFrameBoundaries())
|
| + container->m_bitfields.setChildNeedsRepaint(true);
|
| +}
|
| +
|
| +void LayoutObject::clearRepaintFlagsRecursively()
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| + ASSERT(document().lifecycle().state() == DocumentLifecycle::InPaintForSlimmingPaintV2);
|
| +
|
| + m_bitfields.setSelfNeedsRepaint(false);
|
| +
|
| + if (!m_bitfields.childNeedsRepaint())
|
| + return;
|
| +
|
| + clearRepaintFlagsOfSubtrees();
|
| + m_bitfields.setChildNeedsRepaint(false);
|
| +}
|
| +
|
| +void LayoutObject::clearRepaintFlagsOfSubtrees()
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled());
|
| + for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibling()) {
|
| + if (!child->isOutOfFlowPositioned())
|
| + child->clearRepaintFlagsRecursively();
|
| + }
|
| +}
|
| +
|
| LayoutRect LayoutObject::boundsRectForPaintInvalidation(const LayoutBoxModelObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| if (!paintInvalidationContainer)
|
| @@ -1192,7 +1264,7 @@ LayoutRect LayoutObject::boundsRectForPaintInvalidation(const LayoutBoxModelObje
|
| return DeprecatedPaintLayer::computePaintInvalidationRect(this, paintInvalidationContainer->layer(), paintInvalidationState);
|
| }
|
|
|
| -const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const LayoutRect& r) const
|
| +const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const LayoutRect& r)
|
| {
|
| RELEASE_ASSERT(isRooted());
|
|
|
| @@ -1210,7 +1282,7 @@ const LayoutBoxModelObject* LayoutObject::invalidatePaintRectangleInternal(const
|
| return &paintInvalidationContainer;
|
| }
|
|
|
| -void LayoutObject::invalidatePaintRectangle(const LayoutRect& r) const
|
| +void LayoutObject::invalidatePaintRectangle(const LayoutRect& r)
|
| {
|
| if (const LayoutBoxModelObject* paintInvalidationContainer = invalidatePaintRectangleInternal(r)) {
|
| if (RuntimeEnabledFeatures::slimmingPaintEnabled())
|
| @@ -3273,7 +3345,7 @@ void traverseNonCompositingDescendants(LayoutObject& object, const LayoutObjectT
|
|
|
| } // unnamed namespace
|
|
|
| -void LayoutObject::invalidateDisplayItemClientForNonCompositingDescendantsOf(const LayoutObject& object) const
|
| +void LayoutObject::invalidateDisplayItemClientForNonCompositingDescendantsOf(LayoutObject& object)
|
| {
|
| ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled());
|
|
|
|
|