diff options
author | jaydasika <jaydasika@chromium.org> | 2016-02-16 18:46:11 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-17 02:47:02 +0000 |
commit | adfec8e15d041e310fd741e34db1589777236112 (patch) | |
tree | 9e288ba628d9ecaa06dabca5fd0fbde3e00da333 /cc/trees/property_tree.cc | |
parent | 8e8218c21ca38286e6b2a0b1c18399267e94ec16 (diff) | |
download | chromium_src-adfec8e15d041e310fd741e34db1589777236112.zip chromium_src-adfec8e15d041e310fd741e34db1589777236112.tar.gz chromium_src-adfec8e15d041e310fd741e34db1589777236112.tar.bz2 |
cc :: Move tracking of layer_property_changed to main thread (2)
This is a follow up to http://crrev.com/1688563002.
Properties moved in this CL are :
bounds, position, transform_origin
BUG=584512
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1697613002
Cr-Commit-Position: refs/heads/master@{#375768}
Diffstat (limited to 'cc/trees/property_tree.cc')
-rw-r--r-- | cc/trees/property_tree.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index a22961c..579c4ee 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc @@ -145,6 +145,7 @@ TransformNodeData::TransformNodeData() affected_by_outer_viewport_bounds_delta_x(false), affected_by_outer_viewport_bounds_delta_y(false), in_subtree_of_page_scale_layer(false), + transform_changed(false), post_local_scale_factor(1.0f), local_maximum_animation_target_scale(0.f), local_starting_animation_scale(0.f), @@ -187,6 +188,7 @@ bool TransformNodeData::operator==(const TransformNodeData& other) const { other.affected_by_outer_viewport_bounds_delta_y && in_subtree_of_page_scale_layer == other.in_subtree_of_page_scale_layer && + transform_changed == other.transform_changed && post_local_scale_factor == other.post_local_scale_factor && local_maximum_animation_target_scale == other.local_maximum_animation_target_scale && @@ -270,6 +272,7 @@ void TransformNodeData::ToProtobuf(proto::TreeNode* proto) const { affected_by_outer_viewport_bounds_delta_y); data->set_in_subtree_of_page_scale_layer(in_subtree_of_page_scale_layer); + data->set_transform_changed(transform_changed); data->set_post_local_scale_factor(post_local_scale_factor); data->set_local_maximum_animation_target_scale( local_maximum_animation_target_scale); @@ -335,6 +338,7 @@ void TransformNodeData::FromProtobuf(const proto::TreeNode& proto) { data.affected_by_outer_viewport_bounds_delta_y(); in_subtree_of_page_scale_layer = data.in_subtree_of_page_scale_layer(); + transform_changed = data.transform_changed(); post_local_scale_factor = data.post_local_scale_factor(); local_maximum_animation_target_scale = data.local_maximum_animation_target_scale(); @@ -608,10 +612,18 @@ bool TransformTree::NeedsSourceToParentUpdate(TransformNode* node) { node->parent_id != node->data.source_node_id); } +void TransformTree::ResetChangeTracking() { + for (int id = 1; id < static_cast<int>(size()); ++id) { + TransformNode* node = Node(id); + node->data.transform_changed = false; + } +} + void TransformTree::UpdateTransforms(int id) { TransformNode* node = Node(id); TransformNode* parent_node = parent(node); TransformNode* target_node = Node(node->data.target_id); + TransformNode* source_node = Node(node->data.source_node_id); if (node->data.needs_local_transform_update || NeedsSourceToParentUpdate(node)) UpdateLocalTransform(node); @@ -623,6 +635,7 @@ void TransformTree::UpdateTransforms(int id) { UpdateAnimationProperties(node, parent_node); UpdateSnapping(node); UpdateNodeAndAncestorsHaveIntegerTranslations(node, parent_node); + UpdateTransformChanged(node, parent_node, source_node); } bool TransformTree::IsDescendant(int desc_id, int source_id) const { @@ -982,6 +995,19 @@ void TransformTree::UpdateSnapping(TransformNode* node) { node->data.scroll_snap = translation; } +void TransformTree::UpdateTransformChanged(TransformNode* node, + TransformNode* parent_node, + TransformNode* source_node) { + if (parent_node && parent_node->data.transform_changed) { + node->data.transform_changed = true; + return; + } + + if (source_node && source_node->id != parent_node->id && + source_to_parent_updates_allowed_ && source_node->data.transform_changed) + node->data.transform_changed = true; +} + void TransformTree::SetDeviceTransform(const gfx::Transform& transform, gfx::PointF root_position) { gfx::Transform root_post_local = transform; |