Chromium Code Reviews| 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..12ffa1a133781946f45f1ae0e5bbdada06cfa491 100644 |
| --- a/cc/trees/property_tree_builder.cc |
| +++ b/cc/trees/property_tree_builder.cc |
| @@ -568,12 +568,15 @@ bool AddEffectNodeIfNeeded( |
| layer->transform(); |
| return false; |
| } |
| + const bool has_copy_request = layer->HasCopyRequest(); |
|
ajuma
2016/01/19 23:57:33
If we're only using this once, we probably don't n
jaydasika
2016/01/21 00:47:59
Done.
|
| EffectNode node; |
| node.owner_id = layer->id(); |
| 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 = has_copy_request; |
| + 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 +591,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 +601,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 +641,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 +756,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( |