diff options
author | ajuma <ajuma@chromium.org> | 2015-06-30 11:09:26 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-30 18:11:03 +0000 |
commit | dcb2830c2eca270550f59e651f793639c7ca8e22 (patch) | |
tree | 947cb26d9e75db3324938c4fdeb4835bca89d4ef | |
parent | 316e23aaf93680f0857d2082d9ae689e3cdd5e8b (diff) | |
download | chromium_src-dcb2830c2eca270550f59e651f793639c7ca8e22.zip chromium_src-dcb2830c2eca270550f59e651f793639c7ca8e22.tar.gz chromium_src-dcb2830c2eca270550f59e651f793639c7ca8e22.tar.bz2 |
Revert of cc: Store lists of nodes affected by bounds_delta in the transform tree (patchset #2 id:20001 of https://codereview.chromium.org/1215753002/)
Reason for revert:
Caused crashes on Android, see crbug.com/505721.
Original issue's description:
> cc: Store lists of nodes affected by bounds_delta in the transform tree
>
> This adds lists of nodes affected by inner viewport or outer viewport
> bounds delta to the transform tree, and uses these lists to determine
> which nodes need to have their local transform updated because of a
> bounds delta change (rather than always updating the local transform
> of every node affected by bounds delta).
>
> BUG=497806
> CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
>
> Committed: https://crrev.com/5bcff153554728c6e893b59b00aa55a95468931e
> Cr-Commit-Position: refs/heads/master@{#336620}
TBR=enne@chromium.org,vollick@chromium.org
BUG=505721,497806
Review URL: https://codereview.chromium.org/1214983009
Cr-Commit-Position: refs/heads/master@{#336819}
-rw-r--r-- | cc/layers/layer_impl.cc | 11 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.cc | 20 | ||||
-rw-r--r-- | cc/trees/property_tree.cc | 45 | ||||
-rw-r--r-- | cc/trees/property_tree.h | 13 | ||||
-rw-r--r-- | cc/trees/property_tree_builder.cc | 10 |
5 files changed, 37 insertions, 62 deletions
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index b1778ea..25386a6 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc @@ -877,10 +877,13 @@ void LayerImpl::SetBoundsDelta(const gfx::Vector2dF& bounds_delta) { TransformTree& transform_tree = layer_tree_impl()->property_trees()->transform_tree; - if (this == layer_tree_impl()->InnerViewportContainerLayer()) - transform_tree.SetInnerViewportBoundsDelta(bounds_delta); - else if (this == layer_tree_impl()->OuterViewportContainerLayer()) - transform_tree.SetOuterViewportBoundsDelta(bounds_delta); + if (this == layer_tree_impl()->InnerViewportContainerLayer()) { + transform_tree.set_inner_viewport_bounds_delta(bounds_delta); + transform_tree.set_needs_update(true); + } else if (this == layer_tree_impl()->OuterViewportContainerLayer()) { + transform_tree.set_outer_viewport_bounds_delta(bounds_delta); + transform_tree.set_needs_update(true); + } ScrollbarParametersDidChange(true); diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index 932e032..9c6c1c2 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc @@ -217,10 +217,22 @@ void LayerTreeImpl::UpdatePropertyTreesForBoundsDelta() { &property_trees_.clip_tree); TransformTree& transform_tree = property_trees_.transform_tree; - if (inner_container) - transform_tree.SetInnerViewportBoundsDelta(inner_container->bounds_delta()); - if (outer_container) - transform_tree.SetOuterViewportBoundsDelta(outer_container->bounds_delta()); + if (inner_container) { + if (inner_container->bounds_delta() != + transform_tree.inner_viewport_bounds_delta()) { + transform_tree.set_inner_viewport_bounds_delta( + inner_container->bounds_delta()); + transform_tree.set_needs_update(true); + } + } + if (outer_container) { + if (outer_container->bounds_delta() != + transform_tree.outer_viewport_bounds_delta()) { + transform_tree.set_outer_viewport_bounds_delta( + outer_container->bounds_delta()); + transform_tree.set_needs_update(true); + } + } } void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index f00563b..20e446b 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc @@ -156,12 +156,19 @@ bool TransformTree::NeedsSourceToParentUpdate(TransformNode* node) { node->parent_id != node->data.source_node_id); } +static bool AffectedByBoundsDelta(TransformNode* node) { + return node->data.affected_by_inner_viewport_bounds_delta_x || + node->data.affected_by_inner_viewport_bounds_delta_y || + node->data.affected_by_outer_viewport_bounds_delta_x || + node->data.affected_by_outer_viewport_bounds_delta_y; +} + void TransformTree::UpdateTransforms(int id) { TransformNode* node = Node(id); TransformNode* parent_node = parent(node); TransformNode* target_node = Node(node->data.target_id); if (node->data.needs_local_transform_update || - NeedsSourceToParentUpdate(node)) + NeedsSourceToParentUpdate(node) || AffectedByBoundsDelta(node)) UpdateLocalTransform(node); UpdateScreenSpaceTransform(node, parent_node, target_node); UpdateSublayerScale(node); @@ -419,42 +426,6 @@ void TransformTree::UpdateSnapping(TransformNode* node) { node->data.scroll_snap = translation; } -void TransformTree::SetInnerViewportBoundsDelta(gfx::Vector2dF bounds_delta) { - if (inner_viewport_bounds_delta_ == bounds_delta) - return; - - inner_viewport_bounds_delta_ = bounds_delta; - - if (nodes_affected_by_inner_viewport_bounds_delta_.empty()) - return; - - set_needs_update(true); - for (int i : nodes_affected_by_inner_viewport_bounds_delta_) - Node(i)->data.needs_local_transform_update = true; -} - -void TransformTree::SetOuterViewportBoundsDelta(gfx::Vector2dF bounds_delta) { - if (outer_viewport_bounds_delta_ == bounds_delta) - return; - - outer_viewport_bounds_delta_ = bounds_delta; - - if (nodes_affected_by_outer_viewport_bounds_delta_.empty()) - return; - - set_needs_update(true); - for (int i : nodes_affected_by_outer_viewport_bounds_delta_) - Node(i)->data.needs_local_transform_update = true; -} - -void TransformTree::AddNodeAffectedByInnerViewportBoundsDelta(int node_id) { - nodes_affected_by_inner_viewport_bounds_delta_.push_back(node_id); -} - -void TransformTree::AddNodeAffectedByOuterViewportBoundsDelta(int node_id) { - nodes_affected_by_outer_viewport_bounds_delta_.push_back(node_id); -} - void OpacityTree::UpdateOpacities(int id) { OpacityNode* node = Node(id); node->data.screen_space_opacity = node->data.opacity; diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h index a47fee4..ac0089a 100644 --- a/cc/trees/property_tree.h +++ b/cc/trees/property_tree.h @@ -249,19 +249,20 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> { return source_to_parent_updates_allowed_; } - void SetInnerViewportBoundsDelta(gfx::Vector2dF bounds_delta); + void set_inner_viewport_bounds_delta(gfx::Vector2dF bounds_delta) { + inner_viewport_bounds_delta_ = bounds_delta; + } gfx::Vector2dF inner_viewport_bounds_delta() const { return inner_viewport_bounds_delta_; } - void SetOuterViewportBoundsDelta(gfx::Vector2dF bounds_delta); + void set_outer_viewport_bounds_delta(gfx::Vector2dF bounds_delta) { + outer_viewport_bounds_delta_ = bounds_delta; + } gfx::Vector2dF outer_viewport_bounds_delta() const { return outer_viewport_bounds_delta_; } - void AddNodeAffectedByInnerViewportBoundsDelta(int node_id); - void AddNodeAffectedByOuterViewportBoundsDelta(int node_id); - private: // Returns true iff the node at |desc_id| is a descendant of the node at // |anc_id|. @@ -298,8 +299,6 @@ class CC_EXPORT TransformTree final : public PropertyTree<TransformNode> { bool source_to_parent_updates_allowed_; gfx::Vector2dF inner_viewport_bounds_delta_; gfx::Vector2dF outer_viewport_bounds_delta_; - std::vector<int> nodes_affected_by_inner_viewport_bounds_delta_; - std::vector<int> nodes_affected_by_outer_viewport_bounds_delta_; }; class CC_EXPORT ClipTree final : public PropertyTree<ClipNode> {}; diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc index 890360e..139dd77 100644 --- a/cc/trees/property_tree_builder.cc +++ b/cc/trees/property_tree_builder.cc @@ -308,21 +308,11 @@ bool AddTransformNodeIfNeeded( layer->position_constraint().is_fixed_to_right_edge(); node->data.affected_by_inner_viewport_bounds_delta_y = layer->position_constraint().is_fixed_to_bottom_edge(); - if (node->data.affected_by_inner_viewport_bounds_delta_x || - node->data.affected_by_inner_viewport_bounds_delta_y) { - data_for_children->transform_tree - ->AddNodeAffectedByInnerViewportBoundsDelta(node->id); - } } else if (data_from_ancestor.affected_by_outer_viewport_bounds_delta) { node->data.affected_by_outer_viewport_bounds_delta_x = layer->position_constraint().is_fixed_to_right_edge(); node->data.affected_by_outer_viewport_bounds_delta_y = layer->position_constraint().is_fixed_to_bottom_edge(); - if (node->data.affected_by_outer_viewport_bounds_delta_x || - node->data.affected_by_outer_viewport_bounds_delta_y) { - data_for_children->transform_tree - ->AddNodeAffectedByOuterViewportBoundsDelta(node->id); - } } } |