summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorajuma <ajuma@chromium.org>2015-06-30 11:09:26 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-30 18:11:03 +0000
commitdcb2830c2eca270550f59e651f793639c7ca8e22 (patch)
tree947cb26d9e75db3324938c4fdeb4835bca89d4ef
parent316e23aaf93680f0857d2082d9ae689e3cdd5e8b (diff)
downloadchromium_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.cc11
-rw-r--r--cc/trees/layer_tree_impl.cc20
-rw-r--r--cc/trees/property_tree.cc45
-rw-r--r--cc/trees/property_tree.h13
-rw-r--r--cc/trees/property_tree_builder.cc10
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);
- }
}
}