| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef PaintInvalidationState_h | 5 #ifndef PaintInvalidationState_h | 
| 6 #define PaintInvalidationState_h | 6 #define PaintInvalidationState_h | 
| 7 | 7 | 
| 8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" | 
| 9 #include "core/paint/PaintInvalidator.h" | 9 #include "core/paint/PaintInvalidator.h" | 
| 10 #include "platform/geometry/LayoutRect.h" | 10 #include "platform/geometry/LayoutRect.h" | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 36 // See Source/core/paint/README.md#Paint-invalidation for more details. | 36 // See Source/core/paint/README.md#Paint-invalidation for more details. | 
| 37 | 37 | 
| 38 class CORE_EXPORT PaintInvalidationState { | 38 class CORE_EXPORT PaintInvalidationState { | 
| 39   DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 39   DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 
| 40   WTF_MAKE_NONCOPYABLE(PaintInvalidationState); | 40   WTF_MAKE_NONCOPYABLE(PaintInvalidationState); | 
| 41 | 41 | 
| 42  public: | 42  public: | 
| 43   PaintInvalidationState(const PaintInvalidationState& parentState, | 43   PaintInvalidationState(const PaintInvalidationState& parentState, | 
| 44                          const LayoutObject&); | 44                          const LayoutObject&); | 
| 45 | 45 | 
| 46   // For root LayoutView, or when sub-frame LayoutView's invalidateTreeIfNeeded(
     ) is called directly from | 46   // For root LayoutView, or when sub-frame LayoutView's | 
| 47   // FrameView::invalidateTreeIfNeededRecursive() instead of the owner LayoutPar
     t. | 47   // invalidateTreeIfNeeded() is called directly from | 
|  | 48   // FrameView::invalidateTreeIfNeededRecursive() instead of the owner | 
|  | 49   // LayoutPart. | 
| 48   // TODO(wangxianzhu): Eliminate the latter case. | 50   // TODO(wangxianzhu): Eliminate the latter case. | 
| 49   PaintInvalidationState( | 51   PaintInvalidationState( | 
| 50       const LayoutView&, | 52       const LayoutView&, | 
| 51       Vector<const LayoutObject*>& pendingDelayedPaintInvalidations); | 53       Vector<const LayoutObject*>& pendingDelayedPaintInvalidations); | 
| 52 | 54 | 
| 53   // When a PaintInvalidationState is constructed, it can be used to map points/
     rects in the object's | 55   // When a PaintInvalidationState is constructed, it can be used to map | 
| 54   // local space (border box space for LayoutBoxes). After invalidation of the c
     urrent object, | 56   // points/rects in the object's local space (border box space for | 
| 55   // before invalidation of the subtrees, this method must be called to apply cl
     ip and scroll offset | 57   // LayoutBoxes). After invalidation of the current object, before invalidation | 
|  | 58   // of the subtrees, this method must be called to apply clip and scroll offset | 
| 56   // etc. for creating child PaintInvalidationStates. | 59   // etc. for creating child PaintInvalidationStates. | 
| 57   void updateForChildren(PaintInvalidationReason); | 60   void updateForChildren(PaintInvalidationReason); | 
| 58 | 61 | 
| 59   bool hasForcedSubtreeInvalidationFlags() const { | 62   bool hasForcedSubtreeInvalidationFlags() const { | 
| 60     return m_forcedSubtreeInvalidationFlags; | 63     return m_forcedSubtreeInvalidationFlags; | 
| 61   } | 64   } | 
| 62 | 65 | 
| 63   bool forcedSubtreeInvalidationCheckingWithinContainer() const { | 66   bool forcedSubtreeInvalidationCheckingWithinContainer() const { | 
| 64     return m_forcedSubtreeInvalidationFlags & | 67     return m_forcedSubtreeInvalidationFlags & | 
| 65            PaintInvalidatorContext::ForcedSubtreeInvalidationChecking; | 68            PaintInvalidatorContext::ForcedSubtreeInvalidationChecking; | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 80   } | 83   } | 
| 81   void setForceSubtreeInvalidationRectUpdateWithinContainer() { | 84   void setForceSubtreeInvalidationRectUpdateWithinContainer() { | 
| 82     m_forcedSubtreeInvalidationFlags |= | 85     m_forcedSubtreeInvalidationFlags |= | 
| 83         PaintInvalidatorContext::ForcedSubtreeInvalidationRectUpdate; | 86         PaintInvalidatorContext::ForcedSubtreeInvalidationRectUpdate; | 
| 84   } | 87   } | 
| 85 | 88 | 
| 86   const LayoutBoxModelObject& paintInvalidationContainer() const { | 89   const LayoutBoxModelObject& paintInvalidationContainer() const { | 
| 87     return *m_paintInvalidationContainer; | 90     return *m_paintInvalidationContainer; | 
| 88   } | 91   } | 
| 89 | 92 | 
| 90   // Computes the position of the current object ((0,0) in the space of the obje
     ct) | 93   // Computes the position of the current object ((0,0) in the space of the | 
| 91   // in the space of paint invalidation backing. | 94   // object) in the space of paint invalidation backing. | 
| 92   LayoutPoint computePositionFromPaintInvalidationBacking() const; | 95   LayoutPoint computePositionFromPaintInvalidationBacking() const; | 
| 93 | 96 | 
| 94   // Returns the rect bounds needed to invalidate paint of this object, | 97   // Returns the rect bounds needed to invalidate paint of this object, | 
| 95   // in the space of paint invalidation backing. | 98   // in the space of paint invalidation backing. | 
| 96   LayoutRect computePaintInvalidationRectInBacking() const; | 99   LayoutRect computePaintInvalidationRectInBacking() const; | 
| 97 | 100 | 
| 98   void mapLocalRectToPaintInvalidationBacking(LayoutRect&) const; | 101   void mapLocalRectToPaintInvalidationBacking(LayoutRect&) const; | 
| 99 | 102 | 
| 100   PaintLayer& paintingLayer() const; | 103   PaintLayer& paintingLayer() const; | 
| 101 | 104 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 114 | 117 | 
| 115   void addClipRectRelativeToPaintOffset(const LayoutRect& localClipRect); | 118   void addClipRectRelativeToPaintOffset(const LayoutRect& localClipRect); | 
| 116 | 119 | 
| 117   const LayoutObject& m_currentObject; | 120   const LayoutObject& m_currentObject; | 
| 118 | 121 | 
| 119   unsigned m_forcedSubtreeInvalidationFlags; | 122   unsigned m_forcedSubtreeInvalidationFlags; | 
| 120 | 123 | 
| 121   bool m_clipped; | 124   bool m_clipped; | 
| 122   bool m_clippedForAbsolutePosition; | 125   bool m_clippedForAbsolutePosition; | 
| 123 | 126 | 
| 124   // Clip rect from paintInvalidationContainer if m_cachedOffsetsEnabled is true
     . | 127   // Clip rect from paintInvalidationContainer if m_cachedOffsetsEnabled is | 
|  | 128   // true. | 
| 125   LayoutRect m_clipRect; | 129   LayoutRect m_clipRect; | 
| 126   LayoutRect m_clipRectForAbsolutePosition; | 130   LayoutRect m_clipRectForAbsolutePosition; | 
| 127 | 131 | 
| 128   // x/y offset from the paintInvalidationContainer if m_cachedOffsetsEnabled is
      true. | 132   // x/y offset from the paintInvalidationContainer if m_cachedOffsetsEnabled is | 
|  | 133   // true. | 
| 129   // It includes relative positioning and scroll offsets. | 134   // It includes relative positioning and scroll offsets. | 
| 130   LayoutSize m_paintOffset; | 135   LayoutSize m_paintOffset; | 
| 131   LayoutSize m_paintOffsetForAbsolutePosition; | 136   LayoutSize m_paintOffsetForAbsolutePosition; | 
| 132 | 137 | 
| 133   // Whether m_paintOffset[XXX] and m_clipRect[XXX] are valid and can be used | 138   // Whether m_paintOffset[XXX] and m_clipRect[XXX] are valid and can be used | 
| 134   // to map a rect from space of the current object to space of paintInvalidatio
     nContainer. | 139   // to map a rect from space of the current object to space of | 
|  | 140   // paintInvalidationContainer. | 
| 135   bool m_cachedOffsetsEnabled; | 141   bool m_cachedOffsetsEnabled; | 
| 136   bool m_cachedOffsetsForAbsolutePositionEnabled; | 142   bool m_cachedOffsetsForAbsolutePositionEnabled; | 
| 137 | 143 | 
| 138   // The following two fields are never null. Declare them as pointers because w
     e need some | 144   // The following two fields are never null. Declare them as pointers because | 
| 139   // logic to initialize them in the body of the constructor. | 145   // we need some logic to initialize them in the body of the constructor. | 
| 140 | 146 | 
| 141   // The current paint invalidation container for normal flow objects. | 147   // The current paint invalidation container for normal flow objects. | 
| 142   // It is the enclosing composited object. | 148   // It is the enclosing composited object. | 
| 143   const LayoutBoxModelObject* m_paintInvalidationContainer; | 149   const LayoutBoxModelObject* m_paintInvalidationContainer; | 
| 144 | 150 | 
| 145   // The current paint invalidation container for stacked contents (stacking con
     texts or positioned objects). | 151   // The current paint invalidation container for stacked contents (stacking | 
| 146   // It is the nearest ancestor composited object which establishes a stacking c
     ontext. | 152   // contexts or positioned objects).  It is the nearest ancestor composited | 
| 147   // See Source/core/paint/README.md ### PaintInvalidationState for details on h
     ow stacked contents' | 153   // object which establishes a stacking context.  See | 
| 148   // paint invalidation containers differ. | 154   // Source/core/paint/README.md ### PaintInvalidationState for details on how | 
|  | 155   // stacked contents' paint invalidation containers differ. | 
| 149   const LayoutBoxModelObject* m_paintInvalidationContainerForStackedContents; | 156   const LayoutBoxModelObject* m_paintInvalidationContainerForStackedContents; | 
| 150 | 157 | 
| 151   const LayoutObject& m_containerForAbsolutePosition; | 158   const LayoutObject& m_containerForAbsolutePosition; | 
| 152 | 159 | 
| 153   // Transform from the initial viewport coordinate system of an outermost | 160   // Transform from the initial viewport coordinate system of an outermost | 
| 154   // SVG root to the userspace _before_ the relevant element. Combining this | 161   // SVG root to the userspace _before_ the relevant element. Combining this | 
| 155   // with |m_paintOffset| yields the "final" offset. | 162   // with |m_paintOffset| yields the "final" offset. | 
| 156   AffineTransform m_svgTransform; | 163   AffineTransform m_svgTransform; | 
| 157 | 164 | 
| 158   // Records objects needing paint invalidation on the next frame. See the defin
     ition of PaintInvalidationDelayedFull for more details. | 165   // Records objects needing paint invalidation on the next frame. See the | 
|  | 166   // definition of PaintInvalidationDelayedFull for more details. | 
| 159   Vector<const LayoutObject*>& m_pendingDelayedPaintInvalidations; | 167   Vector<const LayoutObject*>& m_pendingDelayedPaintInvalidations; | 
| 160 | 168 | 
| 161   PaintLayer& m_paintingLayer; | 169   PaintLayer& m_paintingLayer; | 
| 162 | 170 | 
| 163 #if ENABLE(ASSERT) | 171 #if ENABLE(ASSERT) | 
| 164   bool m_didUpdateForChildren; | 172   bool m_didUpdateForChildren; | 
| 165 #endif | 173 #endif | 
| 166 | 174 | 
| 167 #if ENABLE(ASSERT) && !defined(NDEBUG) | 175 #if ENABLE(ASSERT) && !defined(NDEBUG) | 
| 168 // #define CHECK_FAST_PATH_SLOW_PATH_EQUALITY | 176 // #define CHECK_FAST_PATH_SLOW_PATH_EQUALITY | 
| 169 #endif | 177 #endif | 
| 170 | 178 | 
| 171 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY | 179 #ifdef CHECK_FAST_PATH_SLOW_PATH_EQUALITY | 
| 172   void assertFastPathAndSlowPathRectsEqual( | 180   void assertFastPathAndSlowPathRectsEqual( | 
| 173       const LayoutRect& fastPathRect, | 181       const LayoutRect& fastPathRect, | 
| 174       const LayoutRect& slowPathRect) const; | 182       const LayoutRect& slowPathRect) const; | 
| 175   bool m_canCheckFastPathSlowPathEquality; | 183   bool m_canCheckFastPathSlowPathEquality; | 
| 176 #endif | 184 #endif | 
| 177 }; | 185 }; | 
| 178 | 186 | 
| 179 // This is temporary to adapt legacy PaintInvalidationState to PaintInvalidatorC
     ontext | 187 // This is temporary to adapt legacy PaintInvalidationState to | 
|  | 188 // PaintInvalidatorContext | 
| 180 class PaintInvalidatorContextAdapter : public PaintInvalidatorContext { | 189 class PaintInvalidatorContextAdapter : public PaintInvalidatorContext { | 
| 181  public: | 190  public: | 
| 182   PaintInvalidatorContextAdapter(const PaintInvalidationState&); | 191   PaintInvalidatorContextAdapter(const PaintInvalidationState&); | 
| 183   void mapLocalRectToPaintInvalidationBacking(const LayoutObject&, | 192   void mapLocalRectToPaintInvalidationBacking(const LayoutObject&, | 
| 184                                               LayoutRect&) const override; | 193                                               LayoutRect&) const override; | 
| 185 | 194 | 
| 186  private: | 195  private: | 
| 187   const PaintInvalidationState& m_paintInvalidationState; | 196   const PaintInvalidationState& m_paintInvalidationState; | 
| 188 }; | 197 }; | 
| 189 | 198 | 
| 190 }  // namespace blink | 199 }  // namespace blink | 
| 191 | 200 | 
| 192 #endif  // PaintInvalidationState_h | 201 #endif  // PaintInvalidationState_h | 
| OLD | NEW | 
|---|