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..5fd70a6dcfdd70bd025fdd5580e5efd04275f235 100644 |
| --- a/cc/trees/property_tree_builder.cc |
| +++ b/cc/trees/property_tree_builder.cc |
| @@ -548,7 +548,8 @@ bool AddEffectNodeIfNeeded( |
| LayerType* layer, |
| DataForRecursion<LayerType>* data_for_children) { |
| const bool is_root = !layer->parent(); |
| - const bool has_transparency = layer->opacity() != 1.f; |
| + const float opacity = layer->opacity(); |
|
weiliangc
2016/01/19 21:03:08
Don't think we need this cached?
jaydasika
2016/01/19 22:10:36
Removed
|
| + const bool has_transparency = opacity != 1.f; |
| const bool has_animated_opacity = IsAnimatingOpacity(layer); |
| const bool should_create_render_surface = ShouldCreateRenderSurface( |
| layer, data_from_ancestor.compound_transform_since_render_target, |
| @@ -568,12 +569,15 @@ bool AddEffectNodeIfNeeded( |
| layer->transform(); |
| return false; |
| } |
| + const bool has_copy_request = layer->HasCopyRequest(); |
| EffectNode node; |
| node.owner_id = layer->id(); |
| - node.data.opacity = layer->opacity(); |
| + node.data.opacity = 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 +592,9 @@ bool AddEffectNodeIfNeeded( |
| } |
| node.data.clip_id = data_from_ancestor.clip_tree_parent; |
| - node.data.screen_space_opacity *= |
|
jaydasika
2016/01/19 22:31:36
Removed screen space opacity computation from prop
|
| - 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 +602,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 +642,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 +757,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. |
|
jaydasika
2016/01/19 22:31:36
Comment that we need to update effects.
|
| 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); |
|
jaydasika
2016/01/19 22:10:36
This was the place I was referring to in a previou
|
| } |
| void PropertyTreeBuilder::BuildPropertyTrees( |