Chromium Code Reviews| Index: Source/core/layout/LayoutObject.cpp |
| diff --git a/Source/core/layout/LayoutObject.cpp b/Source/core/layout/LayoutObject.cpp |
| index 0892709745635288d2a7b1efe0030c0615333d8e..8b278ff0d07ea5e3b0942f2289aa478ffa85b9b7 100644 |
| --- a/Source/core/layout/LayoutObject.cpp |
| +++ b/Source/core/layout/LayoutObject.cpp |
| @@ -1164,7 +1164,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; |
| @@ -1178,12 +1192,65 @@ 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()); |
|
pdr.
2015/08/20 22:45:05
Can we assert that we're in the appropriate docume
Xianzhu
2015/08/21 00:31:38
Done. The condition will change in next steps for
|
| + if (!selfNeedsRepaint()) { |
| + m_bitfields.setSelfNeedsRepaint(true); |
| + markContainerChainForRepaint(); |
| + } |
| +} |
| + |
| +void LayoutObject::setChildNeedsRepaint() |
| +{ |
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
| + if (!childNeedsRepaint()) { |
| + m_bitfields.setChildNeedsRepaint(true); |
| + markContainerChainForRepaint(); |
| + } |
| +} |
| + |
| +void LayoutObject::markContainerChainForRepaint() |
|
pdr.
2015/08/20 22:45:05
markContainerChainForChildNeedsRepaint?
Xianzhu
2015/08/21 00:31:38
Done.
|
| +{ |
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
| + for (LayoutObject* container = this->containerCrossingFrameBoundaries(); container && !container->childNeedsRepaint(); container = container->containerCrossingFrameBoundaries()) |
| + container->m_bitfields.setChildNeedsRepaint(true); |
|
trchen
2015/08/21 00:37:29
I think we need to special case fixed-pos elements
Xianzhu
2015/08/21 04:54:51
container() is actually equivalent to paintingAnce
Xianzhu
2015/08/21 05:52:45
Scratch the above. Perhaps I misunderstood paintin
|
| +} |
| + |
| +bool LayoutObject::clearRepaintFlagsRecursively() |
| +{ |
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
| + m_bitfields.setSelfNeedsRepaint(false); |
| + |
| + if (!m_bitfields.childNeedsRepaint()) |
| + return true; |
| + |
| + if (clearRepaintFlagsOfSubtrees()) { |
| + m_bitfields.setChildNeedsRepaint(false); |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| +bool LayoutObject::clearRepaintFlagsOfSubtrees() |
| +{ |
| + ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
| + bool result = true; |
| + for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibling()) { |
| + if (!child->isOutOfFlowPositioned()) |
| + result &= child->clearRepaintFlagsRecursively(); |
| + } |
| + return result; |
| +} |
| + |
| LayoutRect LayoutObject::boundsRectForPaintInvalidation(const LayoutBoxModelObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalidationState) const |
| { |
| if (!paintInvalidationContainer) |
| @@ -1191,7 +1258,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()); |
| @@ -1209,7 +1276,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()) |
| @@ -3286,7 +3353,7 @@ void traverseNonCompositingDescendants(LayoutObject& object, const LayoutObjectT |
| } // unnamed namespace |
| -void LayoutObject::invalidateDisplayItemClientForNonCompositingDescendantsOf(const LayoutObject& object) const |
| +void LayoutObject::invalidateDisplayItemClientForNonCompositingDescendantsOf(LayoutObject& object) |
| { |
| ASSERT(RuntimeEnabledFeatures::slimmingPaintEnabled()); |