Index: Source/core/layout/LayoutObject.h |
diff --git a/Source/core/layout/LayoutObject.h b/Source/core/layout/LayoutObject.h |
index c045fc528054a209c40b805334411db8bb5fefc9..06e8d0270fba1af8f836169364b4e2f30ebf0d3b 100644 |
--- a/Source/core/layout/LayoutObject.h |
+++ b/Source/core/layout/LayoutObject.h |
@@ -1018,19 +1018,11 @@ public: |
virtual void clearPaintInvalidationState(const PaintInvalidationState&); |
- // Indicates whether this layout object was re-laid-out since the last frame. |
- // The flag will be cleared during invalidateTreeIfNeeded. |
- bool layoutDidGetCalledSinceLastFrame() const { return m_bitfields.layoutDidGetCalledSinceLastFrame(); } |
- |
bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInvalidation(); } |
void setMayNeedPaintInvalidation(); |
bool shouldInvalidateSelection() const { return m_bitfields.shouldInvalidateSelection(); } |
void setShouldInvalidateSelection(); |
- void clearShouldInvalidateSelection() { m_bitfields.setShouldInvalidateSelection(false); } |
- |
- bool neededLayoutBecauseOfChildren() const { return m_bitfields.neededLayoutBecauseOfChildren(); } |
- void setNeededLayoutBecauseOfChildren(bool b) { m_bitfields.setNeededLayoutBecauseOfChildren(b); } |
bool shouldCheckForPaintInvalidation(const PaintInvalidationState& paintInvalidationState) const |
{ |
@@ -1042,7 +1034,7 @@ public: |
bool shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState() const |
{ |
- return layoutDidGetCalledSinceLastFrame() || mayNeedPaintInvalidation() || shouldDoFullPaintInvalidation() || shouldInvalidateSelection(); |
+ return mayNeedPaintInvalidation() || shouldDoFullPaintInvalidation() || shouldInvalidateSelection() || m_bitfields.childShouldCheckForPaintInvalidation(); |
} |
virtual bool supportsPaintInvalidationStateCachedOffsets() const { return !hasTransformRelatedProperty() && !hasReflection() && !style()->isFlippedBlocksWritingMode(); } |
@@ -1144,8 +1136,6 @@ protected: |
virtual void updateAnonymousChildStyle(const LayoutObject& child, ComputedStyle& style) const { } |
protected: |
- void setSelfMayNeedPaintInvalidation(); |
- |
virtual void willBeDestroyed(); |
virtual void insertedIntoTree(); |
@@ -1178,7 +1168,7 @@ protected: |
#if ENABLE(ASSERT) |
virtual bool paintInvalidationStateIsDirty() const |
{ |
- return neededLayoutBecauseOfChildren() || shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); |
+ return m_bitfields.neededLayoutBecauseOfChildren() || shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); |
} |
#endif |
@@ -1224,11 +1214,6 @@ private: |
inline void invalidateContainerPreferredLogicalWidths(); |
- void clearMayNeedPaintInvalidation(); |
- |
- void setLayoutDidGetCalledSinceLastFrame(); |
- void clearLayoutDidGetCalledSinceLastFrame() { m_bitfields.setLayoutDidGetCalledSinceLastFrame(false); } |
- |
void invalidatePaintIncludingNonCompositingDescendantsInternal(const LayoutBoxModelObject& repaintContainer); |
LayoutRect previousSelectionRectForPaintInvalidation() const; |
@@ -1291,8 +1276,7 @@ private: |
LayoutObjectBitfields(Node* node) |
: m_selfNeedsLayout(false) |
, m_shouldInvalidateOverflowForPaint(false) |
- // FIXME: We should remove mayNeedPaintInvalidation once we are able to |
- // use the other layout flags to detect the same cases. crbug.com/370118 |
+ , m_childShouldCheckForPaintInvalidation(false) |
, m_mayNeedPaintInvalidation(false) |
, m_shouldInvalidateSelection(false) |
, m_neededLayoutBecauseOfChildren(false) |
@@ -1318,7 +1302,6 @@ private: |
, m_hasCounterNodeMap(false) |
, m_everHadLayout(false) |
, m_ancestorLineBoxDirty(false) |
- , m_layoutDidGetCalledSinceLastFrame(false) |
, m_hasPendingResourceUpdate(false) |
, m_isInsideFlowThread(false) |
, m_subtreeChangeListenerRegistered(false) |
@@ -1337,10 +1320,11 @@ private: |
// 32 bits have been used in the first word, and 16 in the second. |
ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); |
- ADD_BOOLEAN_BITFIELD(shouldInvalidateOverflowForPaint, ShouldInvalidateOverflowForPaint); |
+ ADD_BOOLEAN_BITFIELD(shouldInvalidateOverflowForPaint, ShouldInvalidateOverflowForPaint); // TODO(wangxianzhu): Remove for slimming paint v2. |
+ ADD_BOOLEAN_BITFIELD(childShouldCheckForPaintInvalidation, ChildShouldCheckForPaintInvalidation); |
ADD_BOOLEAN_BITFIELD(mayNeedPaintInvalidation, MayNeedPaintInvalidation); |
- ADD_BOOLEAN_BITFIELD(shouldInvalidateSelection, ShouldInvalidateSelection); |
- ADD_BOOLEAN_BITFIELD(neededLayoutBecauseOfChildren, NeededLayoutBecauseOfChildren); |
+ ADD_BOOLEAN_BITFIELD(shouldInvalidateSelection, ShouldInvalidateSelection); // TODO(wangxianzhu): Remove for slimming paint v2. |
+ ADD_BOOLEAN_BITFIELD(neededLayoutBecauseOfChildren, NeededLayoutBecauseOfChildren); // TODO(wangxianzhu): Remove for slimming paint v2. |
ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovementLayout); |
ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); |
ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout); |
@@ -1367,8 +1351,6 @@ private: |
ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout); |
ADD_BOOLEAN_BITFIELD(ancestorLineBoxDirty, AncestorLineBoxDirty); |
- ADD_BOOLEAN_BITFIELD(layoutDidGetCalledSinceLastFrame, LayoutDidGetCalledSinceLastFrame); |
- |
ADD_BOOLEAN_BITFIELD(hasPendingResourceUpdate, HasPendingResourceUpdate); |
ADD_BOOLEAN_BITFIELD(isInsideFlowThread, IsInsideFlowThread); |
@@ -1529,15 +1511,19 @@ inline void LayoutObject::setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidat |
inline void LayoutObject::clearNeedsLayout() |
{ |
- setNeededLayoutBecauseOfChildren(needsLayoutBecauseOfChildren()); |
- setLayoutDidGetCalledSinceLastFrame(); |
- setSelfNeedsLayout(false); |
+ // Set flags for later stages/cycles. |
setEverHadLayout(true); |
+ setMayNeedPaintInvalidation(); |
+ m_bitfields.setNeededLayoutBecauseOfChildren(needsLayoutBecauseOfChildren()); |
+ |
+ // Clear needsLayout flags. |
+ setSelfNeedsLayout(false); |
setPosChildNeedsLayout(false); |
setNeedsSimplifiedNormalFlowLayout(false); |
setNormalChildNeedsLayout(false); |
setNeedsPositionedMovementLayout(false); |
setAncestorLineBoxDirty(false); |
+ |
#if ENABLE(ASSERT) |
checkBlockPositionedObjectsNeedLayout(); |
#endif |