Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(439)

Unified Diff: cc/layers/layer.cc

Issue 2877673002: Rewrite Layer::SetScrollOffset{FromImplSide} property tree fast-path (Closed)
Patch Set: Address reviewer comments with simpler "UpdateScrollOffset" fn Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/layer.h ('k') | cc/layers/scrollbar_layer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « cc/layers/layer.h ('k') | cc/layers/scrollbar_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698