summaryrefslogtreecommitdiffstats
path: root/cc/trees/property_tree.cc
diff options
context:
space:
mode:
authorjaydasika <jaydasika@chromium.org>2016-02-16 18:46:11 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-17 02:47:02 +0000
commitadfec8e15d041e310fd741e34db1589777236112 (patch)
tree9e288ba628d9ecaa06dabca5fd0fbde3e00da333 /cc/trees/property_tree.cc
parent8e8218c21ca38286e6b2a0b1c18399267e94ec16 (diff)
downloadchromium_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.cc26
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;