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

Unified Diff: cc/layers/layer.cc

Issue 2877673002: Rewrite Layer::SetScrollOffset{FromImplSide} property tree fast-path (Closed)
Patch Set: Suppress bug in PaintArtifactCompositor 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
Index: cc/layers/layer.cc
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
index 6845f0e111c893527bec976f40f4d929b911ae45..ee9580fda59e92804f7b2b247418e834138f6a21 100644
--- a/cc/layers/layer.cc
+++ b/cc/layers/layer.cc
@@ -776,16 +776,11 @@ 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);
+ DCHECK(scrollable());
- 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);
+ if (!UpdateExistingScrollOffsetPropertyTreeNodes(scroll_offset)) {
+ // Ensure property trees will be updated which will set the scroll offset.
+ DCHECK(layer_tree_host_->property_trees()->needs_rebuild);
}
SetNeedsCommit();
@@ -802,16 +797,11 @@ 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);
+ DCHECK(scrollable());
- 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);
+ if (!UpdateExistingScrollOffsetPropertyTreeNodes(scroll_offset)) {
+ // Ensure property trees will be updated which will set the scroll offset.
+ DCHECK(layer_tree_host_->property_trees()->needs_rebuild);
}
if (!inputs_.did_scroll_callback.is_null())
@@ -821,6 +811,25 @@ void Layer::SetScrollOffsetFromImplSide(
// "this" may have been destroyed during the process.
}
+bool Layer::UpdateExistingScrollOffsetPropertyTreeNodes(
wkorman 2017/05/11 17:42:13 Add unit test for this?
pdr. 2017/05/11 18:03:37 This function is really just a refactoring of the
wkorman 2017/05/11 18:21:37 It looks like a public method on layer, so I would
+ const gfx::ScrollOffset& scroll_offset) {
+ if (scroll_tree_index() == ScrollTree::kInvalidNodeId)
+ return false;
wkorman 2017/05/11 17:42:13 Why not put DCHECK in two places above in here, an
pdr. 2017/05/11 18:03:37 Done.
+
+ // If a scroll node exists, it should have an associated transform node.
+ DCHECK(transform_tree_index() != TransformTree::kInvalidNodeId);
+
+ PropertyTrees* property_trees = layer_tree_host_->property_trees();
wkorman 2017/05/11 17:42:13 Use auto& like you did in other patch?
pdr. 2017/05/11 18:03:37 Done
+ property_trees->scroll_tree.SetScrollOffset(id(), scroll_offset);
+ TransformNode* 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);
+ return true;
+}
+
void Layer::SetScrollClipLayerId(int clip_layer_id) {
DCHECK(IsPropertyChangeAllowed());
if (inputs_.scroll_clip_layer_id == clip_layer_id)

Powered by Google App Engine
This is Rietveld 408576698