Index: third_party/WebKit/Source/core/layout/LayoutObject.h |
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.h b/third_party/WebKit/Source/core/layout/LayoutObject.h |
index 24d0de5a637d374eb96825d9339f2475ed226889..8e84628dbd7e12b484001d25ee925081db45035f 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutObject.h |
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.h |
@@ -68,6 +68,7 @@ class PseudoStyleRequest; |
class TransformState; |
struct PaintInfo; |
+struct PaintInvalidatorContext; |
enum CursorDirective { |
SetCursorBasedOnStyle, |
@@ -1306,16 +1307,8 @@ public: |
void adjustPreviousPaintInvalidationForScrollIfNeeded(const DoubleSize& scrollDelta); |
// The previous position of the top-left corner of the object in its previous paint backing. |
- const LayoutPoint& previousPositionFromPaintInvalidationBacking() const |
- { |
- ASSERT(!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()); |
- return m_previousPositionFromPaintInvalidationBacking; |
- } |
- void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& positionFromPaintInvalidationBacking) |
- { |
- ASSERT(!RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()); |
- m_previousPositionFromPaintInvalidationBacking = positionFromPaintInvalidationBacking; |
- } |
+ const LayoutPoint& previousPositionFromPaintInvalidationBacking() const { return m_previousPositionFromPaintInvalidationBacking; } |
+ void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& positionFromPaintInvalidationBacking) { m_previousPositionFromPaintInvalidationBacking = positionFromPaintInvalidationBacking; } |
bool paintOffsetChanged(const LayoutPoint& newPaintOffset) const |
{ |
@@ -1333,7 +1326,7 @@ public: |
void setShouldDoFullPaintInvalidation(PaintInvalidationReason = PaintInvalidationFull); |
void clearShouldDoFullPaintInvalidation() { m_bitfields.setFullPaintInvalidationReason(PaintInvalidationNone); } |
- virtual void clearPaintInvalidationFlags(const PaintInvalidationState&); |
+ virtual void clearPaintInvalidationFlags(); |
bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInvalidation(); } |
void setMayNeedPaintInvalidation(); |
@@ -1377,6 +1370,20 @@ public: |
void invalidateDisplayItemClientsIncludingNonCompositingDescendants(PaintInvalidationReason) const; |
+ // New version to replace the above old version. |
+ virtual PaintInvalidationReason invalidatePaintIfNeeded(const PaintInvalidatorContext&) const; |
+ |
+ // When this object is invalidated for paint, this method is called to invalidate any DisplayItemClients |
+ // owned by this object, including the object itself, LayoutText/LayoutInline line boxes, etc., |
+ // not including children which will be invalidated normally during invalidateTreeIfNeeded() and |
+ // parts which are invalidated separately (e.g. scrollbars). |
+ // The caller should ensure the painting layer has been setNeedsRepaint before calling this function. |
+ virtual void invalidateDisplayItemClients(PaintInvalidationReason) const; |
+ |
+ const LayoutRect& previousPaintInvalidationRect() const { return m_previousPaintInvalidationRect; } |
+ |
+ virtual bool hasNonCompositedScrollbars() const { return false; } |
+ |
// Called before anonymousChild.setStyle(). Override to set custom styles for the child. |
virtual void updateAnonymousChildStyle(const LayoutObject& anonymousChild, ComputedStyle& style) const { } |
@@ -1384,9 +1391,12 @@ public: |
class MutableForPainting { |
public: |
void setPreviousPaintOffset(const LayoutPoint& paintOffset) { m_layoutObject.setPreviousPaintOffset(paintOffset); } |
- PaintInvalidationReason invalidatePaintIfNeeded(const PaintInvalidationState& paintInvalidationState) { return m_layoutObject.invalidatePaintIfNeeded(paintInvalidationState); } |
- void clearPaintInvalidationFlags(const PaintInvalidationState& paintInvalidationState) { m_layoutObject.clearPaintInvalidationFlags(paintInvalidationState); } |
- void setShouldDoDelayedFullPaintInvalidation() { m_layoutObject.setShouldDoFullPaintInvalidation(PaintInvalidationDelayedFull); } |
+ void clearPaintInvalidationFlags() { m_layoutObject.clearPaintInvalidationFlags(); } |
+ void setShouldDoFullPaintInvalidation(PaintInvalidationReason reason) { m_layoutObject.setShouldDoFullPaintInvalidation(reason); } |
+ |
+ void setPreviousPaintInvalidationRect(const LayoutRect& r) { m_layoutObject.setPreviousPaintInvalidationRect(r); } |
+ void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& p) { m_layoutObject.setPreviousPositionFromPaintInvalidationBacking(p); } |
+ void setPreviousBoxDecorationBackgroundObscured(bool b) { m_layoutObject.setPreviousBoxDecorationBackgroundObscured(b); } |
private: |
friend class PaintPropertyTreeBuilder; |
@@ -1410,6 +1420,9 @@ public: |
bool compositedScrollsWithRespectTo(const LayoutBoxModelObject& paintInvalidationContainer) const; |
IntSize scrollAdjustmentForPaintInvalidation(const LayoutBoxModelObject& paintInvalidationContainer) const; |
+ bool previousBoxDecorationBackgroundObscured() const { return m_bitfields.previousBoxDecorationBackgroundObscured(); } |
+ void setPreviousBoxDecorationBackgroundObscured(bool b) { m_bitfields.setPreviousBoxDecorationBackgroundObscured(b); } |
+ |
protected: |
enum LayoutObjectType { |
LayoutObjectBr, |
@@ -1530,25 +1543,6 @@ protected: |
void setPreviousPaintInvalidationRect(const LayoutRect& rect) { m_previousPaintInvalidationRect = rect; } |
- virtual PaintInvalidationReason getPaintInvalidationReason(const PaintInvalidationState&, |
- const LayoutRect& oldPaintInvalidationRect, const LayoutPoint& oldPositionFromPaintInvalidationBacking, |
- const LayoutRect& newPaintInvalidationRect, const LayoutPoint& newPositionFromPaintInvalidationBacking) const; |
- |
- // This function tries to minimize the amount of invalidation |
- // generated by invalidating the "difference" between |oldBounds| |
- // and |newBounds|. This means invalidating the union of the |
- // previous rectangles but not their intersection. |
- // |
- // The use case is when an element only requires a paint |
- // invalidation (which means that its content didn't change) |
- // and its bounds changed but its location didn't. |
- // |
- // If we don't meet the criteria for an incremental paint, the |
- // alternative is a full paint invalidation. |
- virtual void incrementallyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds, const LayoutPoint& positionFromPaintInvalidationBacking); |
- |
- virtual bool hasNonCompositedScrollbars() const { return false; } |
- |
#if ENABLE(ASSERT) |
virtual bool paintInvalidationStateIsDirty() const |
{ |
@@ -1572,17 +1566,6 @@ protected: |
// by invalidatePaintOfSubtreesIfNeeded. |
virtual PaintInvalidationReason invalidatePaintIfNeeded(const PaintInvalidationState&); |
- // When this object is invalidated for paint, this method is called to invalidate any DisplayItemClients |
- // owned by this object, including the object itself, LayoutText/LayoutInline line boxes, etc., |
- // not including children which will be invalidated normally during invalidateTreeIfNeeded() and |
- // parts which are invalidated separately (e.g. scrollbars). |
- // The caller should ensure the painting layer has been setNeedsRepaint before calling this function. |
- virtual void invalidateDisplayItemClients(PaintInvalidationReason) const; |
- |
- // Sets painting layer needsRepaint, then calls invalidateDisplayItemClients(). |
- // Should use this version when PaintInvalidationState is available. |
- void invalidateDisplayItemClientsWithPaintInvalidationState(const PaintInvalidationState&, PaintInvalidationReason) const; |
- |
void setIsBackgroundAttachmentFixedObject(bool); |
void clearSelfNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setSelfNeedsOverflowRecalcAfterStyleChange(false); } |
@@ -1594,16 +1577,7 @@ protected: |
bool containsInlineWithOutlineAndContinuation() const { return m_bitfields.containsInlineWithOutlineAndContinuation(); } |
void setContainsInlineWithOutlineAndContinuation(bool b) { m_bitfields.setContainsInlineWithOutlineAndContinuation(b); } |
- const LayoutRect& previousPaintInvalidationRect() const { return m_previousPaintInvalidationRect; } |
- |
private: |
- // This function generates a full invalidation, which |
- // means invalidating both |oldBounds| and |newBounds|. |
- // |
- // This is the default choice when generating an invalidation, |
- // as it is always correct, albeit it may force some extra painting. |
- void fullyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason, const LayoutRect& oldBounds, const LayoutRect& newBounds); |
- |
// Adjusts a paint invalidation rect in the space of |m_previousPaintInvalidationRect| and |m_previousPositionFromPaintInvalidationBacking| |
// to be in the space of the |paintInvalidationContainer|, |
// if needed. They can be different only if |paintInvalidationContainer| is a composited scroller. |
@@ -1629,8 +1603,6 @@ private: |
inline void markAncestorsForPaintInvalidation(); |
- inline void invalidateSelectionIfNeeded(const LayoutBoxModelObject& paintInvalidationContainer, const PaintInvalidationState&, PaintInvalidationReason); |
- |
inline void invalidateContainerPreferredLogicalWidths(); |
void invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(const LayoutBoxModelObject& paintInvalidationContainer); |
@@ -1638,9 +1610,6 @@ private: |
// The caller should ensure the painting layer has been setNeedsRepaint before calling this function. |
void invalidatePaintOfPreviousPaintInvalidationRect(const LayoutBoxModelObject& paintInvalidationContainer, PaintInvalidationReason); |
- LayoutRect previousSelectionRectForPaintInvalidation() const; |
- void setPreviousSelectionRectForPaintInvalidation(const LayoutRect&); |
- |
LayoutObject* containerForAbsolutePosition(const LayoutBoxModelObject* ancestor = nullptr, bool* ancestorSkipped = nullptr, bool* filterOrReflectionSkipped = nullptr) const; |
const LayoutBoxModelObject* enclosingCompositedContainer() const; |
@@ -1757,7 +1726,7 @@ private: |
, m_childrenInline(false) |
, m_containsInlineWithOutlineAndContinuation(false) |
, m_alwaysCreateLineBoxesForLayoutInline(false) |
- , m_lastBoxDecorationBackgroundObscured(false) |
+ , m_previousBoxDecorationBackgroundObscured(false) |
, m_isBackgroundAttachmentFixedObject(false) |
, m_isScrollAnchorObject(false) |
, m_positionedState(IsStaticallyPositioned) |
@@ -1892,7 +1861,7 @@ private: |
ADD_BOOLEAN_BITFIELD(alwaysCreateLineBoxesForLayoutInline, AlwaysCreateLineBoxesForLayoutInline); |
// For slimming-paint. |
- ADD_BOOLEAN_BITFIELD(lastBoxDecorationBackgroundObscured, LastBoxDecorationBackgroundObscured); |
+ ADD_BOOLEAN_BITFIELD(previousBoxDecorationBackgroundObscured, PreviousBoxDecorationBackgroundObscured); |
ADD_BOOLEAN_BITFIELD(isBackgroundAttachmentFixedObject, IsBackgroundAttachmentFixedObject); |
ADD_BOOLEAN_BITFIELD(isScrollAnchorObject, IsScrollAnchorObject); |