Index: cc/layers/layer.cc |
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc |
index 6845f0e111c893527bec976f40f4d929b911ae45..44d8e865ffbc09120256e89e3ed1d58808b0ce17 100644 |
--- a/cc/layers/layer.cc |
+++ b/cc/layers/layer.cc |
@@ -776,17 +776,7 @@ void Layer::SetScrollOffset(const gfx::ScrollOffset& scroll_offset) { |
if (!layer_tree_host_) |
return; |
- PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
- if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable()) |
- property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
- |
- if (TransformNode* transform_node = |
- property_trees->transform_tree.UpdateNodeFromOwningLayerId(id())) { |
- DCHECK_EQ(transform_tree_index(), transform_node->id); |
- transform_node->scroll_offset = CurrentScrollOffset(); |
- transform_node->needs_local_transform_update = true; |
- property_trees->transform_tree.set_needs_update(true); |
- } |
+ UpdateScrollOffset(scroll_offset); |
SetNeedsCommit(); |
} |
@@ -802,17 +792,7 @@ void Layer::SetScrollOffsetFromImplSide( |
inputs_.scroll_offset = scroll_offset; |
SetNeedsPushProperties(); |
- PropertyTrees* property_trees = layer_tree_host_->property_trees(); |
- if (scroll_tree_index() != ScrollTree::kInvalidNodeId && scrollable()) |
- property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset); |
- |
- if (TransformNode* transform_node = |
- property_trees->transform_tree.UpdateNodeFromOwningLayerId(id())) { |
- DCHECK_EQ(transform_tree_index(), transform_node->id); |
- transform_node->scroll_offset = CurrentScrollOffset(); |
- transform_node->needs_local_transform_update = true; |
- property_trees->transform_tree.set_needs_update(true); |
- } |
+ UpdateScrollOffset(scroll_offset); |
if (!inputs_.did_scroll_callback.is_null()) |
inputs_.did_scroll_callback.Run(scroll_offset); |
@@ -821,6 +801,28 @@ void Layer::SetScrollOffsetFromImplSide( |
// "this" may have been destroyed during the process. |
} |
+void Layer::UpdateScrollOffset(const gfx::ScrollOffset& scroll_offset) { |
+ DCHECK(scrollable()); |
+ if (scroll_tree_index() == ScrollTree::kInvalidNodeId) { |
+ // Ensure the property trees just have not been built yet but are marked for |
+ // being built which will set the correct scroll offset values. |
+ DCHECK(layer_tree_host_->property_trees()->needs_rebuild); |
+ return; |
+ } |
+ |
+ // If a scroll node exists, it should have an associated transform node. |
+ DCHECK(transform_tree_index() != TransformTree::kInvalidNodeId); |
+ |
+ auto& property_trees = *layer_tree_host_->property_trees(); |
+ property_trees.scroll_tree.SetScrollOffset(id(), scroll_offset); |
+ auto* transform_node = |
+ property_trees.transform_tree.Node(transform_tree_index()); |
+ DCHECK_EQ(transform_tree_index(), transform_node->id); |
+ transform_node->scroll_offset = CurrentScrollOffset(); |
+ transform_node->needs_local_transform_update = true; |
+ property_trees.transform_tree.set_needs_update(true); |
+} |
+ |
void Layer::SetScrollClipLayerId(int clip_layer_id) { |
DCHECK(IsPropertyChangeAllowed()); |
if (inputs_.scroll_clip_layer_id == clip_layer_id) |