Index: cc/trees/property_tree_builder.cc |
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc |
index 85bdbececf615f892b1b4e1b89399b9a530ab733..c3c9afc3c8a93534a2ecacc6aa0564cd8cb2705c 100644 |
--- a/cc/trees/property_tree_builder.cc |
+++ b/cc/trees/property_tree_builder.cc |
@@ -574,6 +574,8 @@ bool AddEffectNodeIfNeeded( |
node.data.opacity = layer->opacity(); |
node.data.screen_space_opacity = layer->opacity(); |
node.data.has_render_surface = should_create_render_surface; |
+ node.data.has_copy_request = layer->HasCopyRequest(); |
+ node.data.has_background_filters = !layer->background_filters().IsEmpty(); |
if (!is_root) { |
// The effect node's transform id is used only when we create a render |
@@ -588,9 +590,9 @@ bool AddEffectNodeIfNeeded( |
} |
node.data.clip_id = data_from_ancestor.clip_tree_parent; |
- node.data.screen_space_opacity *= |
- data_from_ancestor.effect_tree->Node(parent_id) |
- ->data.screen_space_opacity; |
+ EffectNode* parent = data_from_ancestor.effect_tree->Node(parent_id); |
+ node.data.screen_space_opacity_is_animating = |
+ parent->data.screen_space_opacity_is_animating || has_animated_opacity; |
} else { |
// Root render surface acts the unbounded and untransformed to draw content |
// into. Transform node created from root layer (includes device scale |
@@ -598,6 +600,7 @@ bool AddEffectNodeIfNeeded( |
// to root render surface's content, but not root render surface itself. |
node.data.transform_id = kRootPropertyTreeNodeId; |
node.data.clip_id = kRootPropertyTreeNodeId; |
+ node.data.screen_space_opacity_is_animating = has_animated_opacity; |
} |
data_for_children->effect_tree_parent = |
data_for_children->effect_tree->Insert(node, parent_id); |
@@ -637,10 +640,6 @@ void BuildPropertyTreesInternal( |
AddClipNodeIfNeeded(data_from_parent, layer, created_render_surface, |
created_transform_node, &data_for_children); |
- data_for_children.is_hidden = |
- layer->hide_layer_and_subtree() || data_from_parent.is_hidden; |
- layer->set_is_hidden_from_property_trees(data_for_children.is_hidden); |
- |
for (size_t i = 0; i < layer->children().size(); ++i) { |
if (!layer->child_at(i)->scroll_parent()) { |
DataForRecursionFromChild<LayerType> data_from_child; |
@@ -756,11 +755,11 @@ void BuildPropertyTreesTopLevelInternal( |
property_trees->needs_rebuild = false; |
// The transform tree is kept up-to-date as it is built, but the |
- // combined_clips stored in the clip tree aren't computed during tree |
- // building. |
+ // combined_clips stored in the clip tree and the screen_space_opacity and |
+ // is_drawn in the effect tree aren't computed during tree building. |
property_trees->transform_tree.set_needs_update(false); |
property_trees->clip_tree.set_needs_update(true); |
- property_trees->effect_tree.set_needs_update(false); |
+ property_trees->effect_tree.set_needs_update(true); |
} |
void PropertyTreeBuilder::BuildPropertyTrees( |