| OLD | NEW | 
|    1 // Copyright 2016 The Chromium Authors. All rights reserved. |    1 // Copyright 2016 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 ScrollPaintPropertyNode_h |    5 #ifndef ScrollPaintPropertyNode_h | 
|    6 #define ScrollPaintPropertyNode_h |    6 #define ScrollPaintPropertyNode_h | 
|    7  |    7  | 
|    8 #include "platform/PlatformExport.h" |    8 #include "platform/PlatformExport.h" | 
|    9 #include "platform/geometry/FloatSize.h" |    9 #include "platform/geometry/FloatSize.h" | 
|   10 #include "platform/scroll/MainThreadScrollingReason.h" |   10 #include "platform/scroll/MainThreadScrollingReason.h" | 
|   11 #include "wtf/PassRefPtr.h" |   11 #include "wtf/PassRefPtr.h" | 
|   12 #include "wtf/RefCounted.h" |   12 #include "wtf/RefCounted.h" | 
|   13 #include "wtf/RefPtr.h" |   13 #include "wtf/RefPtr.h" | 
|   14 #include "wtf/text/WTFString.h" |   14 #include "wtf/text/WTFString.h" | 
|   15  |   15  | 
|   16 #include <iosfwd> |   16 #include <iosfwd> | 
|   17  |   17  | 
|   18 namespace blink { |   18 namespace blink { | 
|   19  |   19  | 
|   20 using MainThreadScrollingReasons = uint32_t; |   20 using MainThreadScrollingReasons = uint32_t; | 
 |   21 class WebLayerScrollClient; | 
|   21  |   22  | 
|   22 // A scroll node contains auxiliary scrolling information which includes how far |   23 // A scroll node contains auxiliary scrolling information which includes how far | 
|   23 // an area can be scrolled, main thread scrolling reasons, etc. Scroll nodes |   24 // an area can be scrolled, main thread scrolling reasons, etc. Scroll nodes | 
|   24 // are owned by TransformPaintPropertyNodes that are used for the scroll offset |   25 // are owned by TransformPaintPropertyNodes that are used for the scroll offset | 
|   25 // translation. |   26 // translation. | 
|   26 // |   27 // | 
|   27 // Main thread scrolling reasons force scroll updates to go to the main thread |   28 // Main thread scrolling reasons force scroll updates to go to the main thread | 
|   28 // and can have dependencies on other nodes. For example, all parents of a |   29 // and can have dependencies on other nodes. For example, all parents of a | 
|   29 // scroll node with background attachment fixed set should also have it set. |   30 // scroll node with background attachment fixed set should also have it set. | 
|   30 // |   31 // | 
|   31 // The scroll tree differs from the other trees because it does not affect |   32 // The scroll tree differs from the other trees because it does not affect | 
|   32 // geometry directly. We may want to rename this class to reflect that it is |   33 // geometry directly. We may want to rename this class to reflect that it is | 
|   33 // more like rare scroll data for TransformPaintPropertyNode. |   34 // more like rare scroll data for TransformPaintPropertyNode. | 
|   34 class PLATFORM_EXPORT ScrollPaintPropertyNode |   35 class PLATFORM_EXPORT ScrollPaintPropertyNode | 
|   35     : public RefCounted<ScrollPaintPropertyNode> { |   36     : public RefCounted<ScrollPaintPropertyNode> { | 
|   36  public: |   37  public: | 
|   37   // This node is really a sentinel, and does not represent a real scroll. |   38   // This node is really a sentinel, and does not represent a real scroll. | 
|   38   static ScrollPaintPropertyNode* root(); |   39   static ScrollPaintPropertyNode* root(); | 
|   39  |   40  | 
|   40   static PassRefPtr<ScrollPaintPropertyNode> create( |   41   static PassRefPtr<ScrollPaintPropertyNode> create( | 
|   41       PassRefPtr<const ScrollPaintPropertyNode> parent, |   42       PassRefPtr<const ScrollPaintPropertyNode> parent, | 
|   42       const IntSize& clip, |   43       const IntSize& clip, | 
|   43       const IntSize& bounds, |   44       const IntSize& bounds, | 
|   44       bool userScrollableHorizontal, |   45       bool userScrollableHorizontal, | 
|   45       bool userScrollableVertical, |   46       bool userScrollableVertical, | 
|   46       MainThreadScrollingReasons mainThreadScrollingReasons) { |   47       MainThreadScrollingReasons mainThreadScrollingReasons, | 
 |   48       WebLayerScrollClient* scrollClient) { | 
|   47     return adoptRef(new ScrollPaintPropertyNode( |   49     return adoptRef(new ScrollPaintPropertyNode( | 
|   48         std::move(parent), clip, bounds, userScrollableHorizontal, |   50         std::move(parent), clip, bounds, userScrollableHorizontal, | 
|   49         userScrollableVertical, mainThreadScrollingReasons)); |   51         userScrollableVertical, mainThreadScrollingReasons, scrollClient)); | 
|   50   } |   52   } | 
|   51  |   53  | 
|   52   void update(PassRefPtr<const ScrollPaintPropertyNode> parent, |   54   void update(PassRefPtr<const ScrollPaintPropertyNode> parent, | 
|   53               const IntSize& clip, |   55               const IntSize& clip, | 
|   54               const IntSize& bounds, |   56               const IntSize& bounds, | 
|   55               bool userScrollableHorizontal, |   57               bool userScrollableHorizontal, | 
|   56               bool userScrollableVertical, |   58               bool userScrollableVertical, | 
|   57               MainThreadScrollingReasons mainThreadScrollingReasons) { |   59               MainThreadScrollingReasons mainThreadScrollingReasons, | 
 |   60               WebLayerScrollClient* scrollClient) { | 
|   58     DCHECK(!isRoot()); |   61     DCHECK(!isRoot()); | 
|   59     DCHECK(parent != this); |   62     DCHECK(parent != this); | 
|   60     m_parent = parent; |   63     m_parent = parent; | 
|   61     m_clip = clip; |   64     m_clip = clip; | 
|   62     m_bounds = bounds; |   65     m_bounds = bounds; | 
|   63     m_userScrollableHorizontal = userScrollableHorizontal; |   66     m_userScrollableHorizontal = userScrollableHorizontal; | 
|   64     m_userScrollableVertical = userScrollableVertical; |   67     m_userScrollableVertical = userScrollableVertical; | 
|   65     m_mainThreadScrollingReasons = mainThreadScrollingReasons; |   68     m_mainThreadScrollingReasons = mainThreadScrollingReasons; | 
 |   69     m_scrollClient = scrollClient; | 
|   66   } |   70   } | 
|   67  |   71  | 
|   68   const ScrollPaintPropertyNode* parent() const { return m_parent.get(); } |   72   const ScrollPaintPropertyNode* parent() const { return m_parent.get(); } | 
|   69   bool isRoot() const { return !m_parent; } |   73   bool isRoot() const { return !m_parent; } | 
|   70  |   74  | 
|   71   // The clipped area that contains the scrolled content. |   75   // The clipped area that contains the scrolled content. | 
|   72   const IntSize& clip() const { return m_clip; } |   76   const IntSize& clip() const { return m_clip; } | 
|   73  |   77  | 
|   74   // The bounds of the content that is scrolled within |clip|. |   78   // The bounds of the content that is scrolled within |clip|. | 
|   75   const IntSize& bounds() const { return m_bounds; } |   79   const IntSize& bounds() const { return m_bounds; } | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|   87     return m_mainThreadScrollingReasons & |   91     return m_mainThreadScrollingReasons & | 
|   88            MainThreadScrollingReason::kThreadedScrollingDisabled; |   92            MainThreadScrollingReason::kThreadedScrollingDisabled; | 
|   89   } |   93   } | 
|   90  |   94  | 
|   91   // Main thread scrolling reason for background attachment fixed descendants. |   95   // Main thread scrolling reason for background attachment fixed descendants. | 
|   92   bool hasBackgroundAttachmentFixedDescendants() const { |   96   bool hasBackgroundAttachmentFixedDescendants() const { | 
|   93     return m_mainThreadScrollingReasons & |   97     return m_mainThreadScrollingReasons & | 
|   94            MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects; |   98            MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects; | 
|   95   } |   99   } | 
|   96  |  100  | 
 |  101   WebLayerScrollClient* scrollClient() const { return m_scrollClient; } | 
 |  102  | 
|   97 #if DCHECK_IS_ON() |  103 #if DCHECK_IS_ON() | 
|   98   // The clone function is used by FindPropertiesNeedingUpdate.h for recording |  104   // The clone function is used by FindPropertiesNeedingUpdate.h for recording | 
|   99   // a scroll node before it has been updated, to later detect changes. |  105   // a scroll node before it has been updated, to later detect changes. | 
|  100   PassRefPtr<ScrollPaintPropertyNode> clone() const { |  106   PassRefPtr<ScrollPaintPropertyNode> clone() const { | 
|  101     RefPtr<ScrollPaintPropertyNode> cloned = |  107     RefPtr<ScrollPaintPropertyNode> cloned = | 
|  102         adoptRef(new ScrollPaintPropertyNode( |  108         adoptRef(new ScrollPaintPropertyNode( | 
|  103             m_parent, m_clip, m_bounds, m_userScrollableHorizontal, |  109             m_parent, m_clip, m_bounds, m_userScrollableHorizontal, | 
|  104             m_userScrollableVertical, m_mainThreadScrollingReasons)); |  110             m_userScrollableVertical, m_mainThreadScrollingReasons, | 
 |  111             m_scrollClient)); | 
|  105     return cloned; |  112     return cloned; | 
|  106   } |  113   } | 
|  107  |  114  | 
|  108   // The equality operator is used by FindPropertiesNeedingUpdate.h for checking |  115   // The equality operator is used by FindPropertiesNeedingUpdate.h for checking | 
|  109   // if a scroll node has changed. |  116   // if a scroll node has changed. | 
|  110   bool operator==(const ScrollPaintPropertyNode& o) const { |  117   bool operator==(const ScrollPaintPropertyNode& o) const { | 
|  111     return m_parent == o.m_parent && m_clip == o.m_clip && |  118     return m_parent == o.m_parent && m_clip == o.m_clip && | 
|  112            m_bounds == o.m_bounds && |  119            m_bounds == o.m_bounds && | 
|  113            m_userScrollableHorizontal == o.m_userScrollableHorizontal && |  120            m_userScrollableHorizontal == o.m_userScrollableHorizontal && | 
|  114            m_userScrollableVertical == o.m_userScrollableVertical && |  121            m_userScrollableVertical == o.m_userScrollableVertical && | 
|  115            m_mainThreadScrollingReasons == o.m_mainThreadScrollingReasons; |  122            m_mainThreadScrollingReasons == o.m_mainThreadScrollingReasons && | 
 |  123            m_scrollClient == o.m_scrollClient; | 
|  116   } |  124   } | 
|  117  |  125  | 
|  118   String toTreeString() const; |  126   String toTreeString() const; | 
|  119 #endif |  127 #endif | 
|  120  |  128  | 
|  121   String toString() const; |  129   String toString() const; | 
|  122  |  130  | 
|  123  private: |  131  private: | 
|  124   ScrollPaintPropertyNode(PassRefPtr<const ScrollPaintPropertyNode> parent, |  132   ScrollPaintPropertyNode(PassRefPtr<const ScrollPaintPropertyNode> parent, | 
|  125                           IntSize clip, |  133                           IntSize clip, | 
|  126                           IntSize bounds, |  134                           IntSize bounds, | 
|  127                           bool userScrollableHorizontal, |  135                           bool userScrollableHorizontal, | 
|  128                           bool userScrollableVertical, |  136                           bool userScrollableVertical, | 
|  129                           MainThreadScrollingReasons mainThreadScrollingReasons) |  137                           MainThreadScrollingReasons mainThreadScrollingReasons, | 
 |  138                           WebLayerScrollClient* scrollClient) | 
|  130       : m_parent(parent), |  139       : m_parent(parent), | 
|  131         m_clip(clip), |  140         m_clip(clip), | 
|  132         m_bounds(bounds), |  141         m_bounds(bounds), | 
|  133         m_userScrollableHorizontal(userScrollableHorizontal), |  142         m_userScrollableHorizontal(userScrollableHorizontal), | 
|  134         m_userScrollableVertical(userScrollableVertical), |  143         m_userScrollableVertical(userScrollableVertical), | 
|  135         m_mainThreadScrollingReasons(mainThreadScrollingReasons) {} |  144         m_mainThreadScrollingReasons(mainThreadScrollingReasons), | 
 |  145         m_scrollClient(scrollClient) {} | 
|  136  |  146  | 
|  137   RefPtr<const ScrollPaintPropertyNode> m_parent; |  147   RefPtr<const ScrollPaintPropertyNode> m_parent; | 
|  138   IntSize m_clip; |  148   IntSize m_clip; | 
|  139   IntSize m_bounds; |  149   IntSize m_bounds; | 
|  140   bool m_userScrollableHorizontal : 1; |  150   bool m_userScrollableHorizontal : 1; | 
|  141   bool m_userScrollableVertical : 1; |  151   bool m_userScrollableVertical : 1; | 
|  142   MainThreadScrollingReasons m_mainThreadScrollingReasons; |  152   MainThreadScrollingReasons m_mainThreadScrollingReasons; | 
 |  153   WebLayerScrollClient* m_scrollClient; | 
|  143 }; |  154 }; | 
|  144  |  155  | 
|  145 // Redeclared here to avoid ODR issues. |  156 // Redeclared here to avoid ODR issues. | 
|  146 // See platform/testing/PaintPrinters.h. |  157 // See platform/testing/PaintPrinters.h. | 
|  147 void PrintTo(const ScrollPaintPropertyNode&, std::ostream*); |  158 void PrintTo(const ScrollPaintPropertyNode&, std::ostream*); | 
|  148  |  159  | 
|  149 }  // namespace blink |  160 }  // namespace blink | 
|  150  |  161  | 
|  151 #endif  // ScrollPaintPropertyNode_h |  162 #endif  // ScrollPaintPropertyNode_h | 
| OLD | NEW |