Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(961)

Unified Diff: Source/core/layout/LayoutObject.cpp

Issue 1294233004: Subtree caching implementation in blink-core (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: s/setSelfNeedsRepaint/setNeedsRepaint/ Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698