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

Unified Diff: cc/trees/property_tree.cc

Issue 1697613002: cc :: Move tracking of layer_property_changed to main thread (2) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « cc/trees/property_tree.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/property_tree.cc
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
index ac8b60bb2b9184761af6a0461fbb4afffb5b3256..933b065302906b5b70709c56e2ca04c8a223929e 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();
@@ -594,10 +598,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);
@@ -609,6 +621,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 {
@@ -968,6 +981,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;
« no previous file with comments | « cc/trees/property_tree.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698