Index: third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h |
diff --git a/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h b/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h |
index 18779c9575d83ab09284ac6d38ad5882814989b7..14a7204099a6d1a47764b36777e0ffb45f1b3819 100644 |
--- a/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h |
+++ b/third_party/WebKit/Source/platform/graphics/paint/ScrollPaintPropertyNode.h |
@@ -32,24 +32,27 @@ class PLATFORM_EXPORT ScrollPaintPropertyNode |
static ScrollPaintPropertyNode* root(); |
static PassRefPtr<ScrollPaintPropertyNode> create( |
- PassRefPtr<ScrollPaintPropertyNode> parent, |
+ PassRefPtr<const ScrollPaintPropertyNode> parent, |
PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation, |
const IntSize& clip, |
const IntSize& bounds, |
bool userScrollableHorizontal, |
- bool userScrollableVertical) { |
+ bool userScrollableVertical, |
+ MainThreadScrollingReasons mainThreadScrollingReasons) { |
return adoptRef(new ScrollPaintPropertyNode( |
std::move(parent), std::move(scrollOffsetTranslation), clip, bounds, |
- userScrollableHorizontal, userScrollableVertical)); |
+ userScrollableHorizontal, userScrollableVertical, |
+ mainThreadScrollingReasons)); |
} |
void update( |
- PassRefPtr<ScrollPaintPropertyNode> parent, |
+ PassRefPtr<const ScrollPaintPropertyNode> parent, |
PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation, |
const IntSize& clip, |
const IntSize& bounds, |
bool userScrollableHorizontal, |
- bool userScrollableVertical) { |
+ bool userScrollableVertical, |
+ MainThreadScrollingReasons mainThreadScrollingReasons) { |
DCHECK(!isRoot()); |
DCHECK(parent != this); |
m_parent = parent; |
@@ -59,10 +62,10 @@ class PLATFORM_EXPORT ScrollPaintPropertyNode |
m_bounds = bounds; |
m_userScrollableHorizontal = userScrollableHorizontal; |
m_userScrollableVertical = userScrollableVertical; |
- m_mainThreadScrollingReasons = 0; |
+ m_mainThreadScrollingReasons = mainThreadScrollingReasons; |
} |
- ScrollPaintPropertyNode* parent() const { return m_parent.get(); } |
+ const ScrollPaintPropertyNode* parent() const { return m_parent.get(); } |
bool isRoot() const { return !m_parent; } |
// Transform that the scroll is relative to. |
@@ -83,13 +86,18 @@ class PLATFORM_EXPORT ScrollPaintPropertyNode |
MainThreadScrollingReasons mainThreadScrollingReasons() const { |
return m_mainThreadScrollingReasons; |
} |
- bool hasMainThreadScrollingReasons(MainThreadScrollingReasons reasons) const { |
- return m_mainThreadScrollingReasons & reasons; |
+ |
+ // Main thread scrolling reason for the threaded scrolling disabled setting. |
+ bool threadedScrollingDisabled() const { |
+ return m_mainThreadScrollingReasons & |
+ MainThreadScrollingReason::kThreadedScrollingDisabled; |
} |
- void addMainThreadScrollingReasons(MainThreadScrollingReasons reasons) { |
- m_mainThreadScrollingReasons |= reasons; |
+ |
+ // Main thread scrolling reason for background attachment fixed descendants. |
+ bool hasBackgroundAttachmentFixedDescendants() const { |
+ return m_mainThreadScrollingReasons & |
+ MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects; |
} |
- void clearMainThreadScrollingReasons() { m_mainThreadScrollingReasons = 0; } |
#if DCHECK_IS_ON() |
// The clone function is used by FindPropertiesNeedingUpdate.h for recording |
@@ -98,53 +106,49 @@ class PLATFORM_EXPORT ScrollPaintPropertyNode |
RefPtr<ScrollPaintPropertyNode> cloned = |
adoptRef(new ScrollPaintPropertyNode( |
m_parent, m_scrollOffsetTranslation, m_clip, m_bounds, |
- m_userScrollableHorizontal, m_userScrollableVertical)); |
- cloned->addMainThreadScrollingReasons(m_mainThreadScrollingReasons); |
+ m_userScrollableHorizontal, m_userScrollableVertical, |
+ m_mainThreadScrollingReasons)); |
return cloned; |
} |
// The equality operator is used by FindPropertiesNeedingUpdate.h for checking |
// if a scroll node has changed. |
bool operator==(const ScrollPaintPropertyNode& o) const { |
- // TODO(pdr): Check main thread scrolling reason equality as well. We do |
- // not yet mark nodes as needing a paint property update on main thread |
- // scrolling reason changes. See: See: https://crbug.com/664672. |
return m_parent == o.m_parent && |
m_scrollOffsetTranslation == o.m_scrollOffsetTranslation && |
m_clip == o.m_clip && m_bounds == o.m_bounds && |
m_userScrollableHorizontal == o.m_userScrollableHorizontal && |
- m_userScrollableVertical == o.m_userScrollableVertical; |
+ m_userScrollableVertical == o.m_userScrollableVertical && |
+ m_mainThreadScrollingReasons == o.m_mainThreadScrollingReasons; |
} |
#endif |
private: |
ScrollPaintPropertyNode( |
- PassRefPtr<ScrollPaintPropertyNode> parent, |
+ PassRefPtr<const ScrollPaintPropertyNode> parent, |
PassRefPtr<const TransformPaintPropertyNode> scrollOffsetTranslation, |
IntSize clip, |
IntSize bounds, |
bool userScrollableHorizontal, |
- bool userScrollableVertical) |
+ bool userScrollableVertical, |
+ MainThreadScrollingReasons mainThreadScrollingReasons) |
: m_parent(parent), |
m_scrollOffsetTranslation(scrollOffsetTranslation), |
m_clip(clip), |
m_bounds(bounds), |
m_userScrollableHorizontal(userScrollableHorizontal), |
m_userScrollableVertical(userScrollableVertical), |
- m_mainThreadScrollingReasons(0) { |
+ m_mainThreadScrollingReasons(mainThreadScrollingReasons) { |
DCHECK(m_scrollOffsetTranslation->matrix().isIdentityOr2DTranslation()); |
} |
- RefPtr<ScrollPaintPropertyNode> m_parent; |
+ RefPtr<const ScrollPaintPropertyNode> m_parent; |
RefPtr<const TransformPaintPropertyNode> m_scrollOffsetTranslation; |
IntSize m_clip; |
IntSize m_bounds; |
- bool m_userScrollableHorizontal; |
- bool m_userScrollableVertical; |
+ bool m_userScrollableHorizontal : 1; |
+ bool m_userScrollableVertical : 1; |
MainThreadScrollingReasons m_mainThreadScrollingReasons; |
- // TODO(pdr): Add an offset for the clip and bounds to the transform. |
- // TODO(pdr): Add 2 bits for whether this is a viewport scroll node. |
- // TODO(pdr): Add a bit for whether this is affected by page scale. |
}; |
// Redeclared here to avoid ODR issues. |