Index: cc/trees/property_tree.h |
diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h |
index c56126a05bb68a32b1da9c7ac5bce23d15083a0b..cb3871e055c763419f55c247251ac04b388f3cd3 100644 |
--- a/cc/trees/property_tree.h |
+++ b/cc/trees/property_tree.h |
@@ -363,8 +363,6 @@ class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { |
void clear(); |
- typedef std::unordered_map<int, scoped_refptr<SyncedScrollOffset>> |
- ScrollOffsetMap; |
typedef std::unordered_map<int, bool> ScrollbarsEnabledMap; |
gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const; |
@@ -382,19 +380,36 @@ class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { |
void set_currently_scrolling_node(int scroll_node_id); |
gfx::Transform ScreenSpaceTransform(int scroll_node_id) const; |
+ // Returns the current scroll offset. On the main thread this would return the |
+ // value for the LayerTree while on the impl thread this is the current value |
+ // on the active tree. |
const gfx::ScrollOffset current_scroll_offset(int layer_id) const; |
+ |
+ // Collects deltas for scroll changes on the impl thread that need to be |
+ // reported to the main thread during the main frame. As such, should only be |
+ // called on the impl thread side PropertyTrees. |
void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, |
int inner_viewport_layer_id); |
- void UpdateScrollOffsetMap(ScrollOffsetMap* new_scroll_offset_map, |
- LayerTreeImpl* layer_tree_impl); |
- ScrollOffsetMap& scroll_offset_map(); |
- const ScrollOffsetMap& scroll_offset_map() const; |
+ |
+ // Applies deltas sent in the previous main frame onto the impl thread state. |
+ // Should only be called on the impl thread side PropertyTrees. |
void ApplySentScrollDeltasFromAbortedCommit(); |
+ |
+ // Pushes scroll updates from the ScrollTree on the main thread onto the |
+ // impl thread associated state. |
+ void PushScrollUpdatesFromMainThread(PropertyTrees* main_property_trees, |
+ LayerTreeImpl* sync_tree); |
+ |
+ // Pushes scroll updates from the ScrollTree on the pending tree onto the |
+ // active tree associated state. |
+ void PushScrollUpdatesFromPendingTree(PropertyTrees* pending_property_trees, |
+ LayerTreeImpl* active_tree); |
+ |
bool SetBaseScrollOffset(int layer_id, |
const gfx::ScrollOffset& scroll_offset); |
bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset); |
void SetScrollOffsetClobberActiveValue(int layer_id) { |
- synced_scroll_offset(layer_id)->set_clobber_active_value(); |
+ GetOrCreateSyncedScrollOffset(layer_id)->set_clobber_active_value(); |
} |
bool UpdateScrollOffsetBaseForTesting(int layer_id, |
const gfx::ScrollOffset& offset); |
@@ -411,17 +426,30 @@ class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { |
gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset, |
ScrollNode* scroll_node) const; |
+ const SyncedScrollOffset* GetSyncedScrollOffset(int layer_id) const; |
+ |
+#if DCHECK_IS_ON() |
+ void CopyCompleteTreeState(const ScrollTree& other); |
+#endif |
+ |
private: |
+ using ScrollOffsetMap = std::unordered_map<int, gfx::ScrollOffset>; |
+ using SyncedScrollOffsetMap = |
+ std::unordered_map<int, scoped_refptr<SyncedScrollOffset>>; |
+ |
int currently_scrolling_node_id_; |
- ScrollOffsetMap layer_id_to_scroll_offset_map_; |
ScrollbarsEnabledMap layer_id_to_scrollbars_enabled_map_; |
- SyncedScrollOffset* synced_scroll_offset(int layer_id); |
- const SyncedScrollOffset* synced_scroll_offset(int layer_id) const; |
+ // On the main thread we store the scroll offsets directly since the main |
+ // thread only needs to keep track of the current main thread state. The impl |
+ // thread stores a map of SyncedProperty instances in order to track |
+ // additional state necessary to synchronize scroll changes between the main |
+ // and impl threads. |
+ ScrollOffsetMap layer_id_to_scroll_offset_map_; |
+ SyncedScrollOffsetMap layer_id_to_synced_scroll_offset_map_; |
+ |
+ SyncedScrollOffset* GetOrCreateSyncedScrollOffset(int layer_id); |
gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset); |
- void UpdateScrollOffsetMapEntry(int key, |
- ScrollOffsetMap* new_scroll_offset_map, |
- LayerTreeImpl* layer_tree_impl); |
}; |
struct AnimationScaleData { |