| Index: cc/trees/draw_property_utils.cc
|
| diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
|
| index fa522368a32906f731ec11a2e986cfad063a7587..6899816caee13f3def3c77fd030cb72cb6760f26 100644
|
| --- a/cc/trees/draw_property_utils.cc
|
| +++ b/cc/trees/draw_property_utils.cc
|
| @@ -344,7 +344,7 @@ static inline bool SubtreeShouldBeSkipped(LayerImpl* layer,
|
| // The opacity of a layer always applies to its children (either implicitly
|
| // via a render surface or explicitly if the parent preserves 3D), so the
|
| // entire subtree can be skipped if this layer is fully transparent.
|
| - return !layer->opacity();
|
| + return !layer->EffectiveOpacity();
|
| }
|
|
|
| static inline bool SubtreeShouldBeSkipped(Layer* layer,
|
| @@ -380,7 +380,8 @@ static inline bool SubtreeShouldBeSkipped(Layer* layer,
|
| // In particular, it should not cause the subtree to be skipped.
|
| // Similarly, for layers that might animate opacity using an impl-only
|
| // animation, their subtree should also not be skipped.
|
| - return !layer->opacity() && !layer->HasPotentiallyRunningOpacityAnimation() &&
|
| + return !layer->EffectiveOpacity() &&
|
| + !layer->HasPotentiallyRunningOpacityAnimation() &&
|
| !layer->OpacityCanAnimateOnImplThread();
|
| }
|
|
|
| @@ -430,18 +431,19 @@ static bool LayerShouldBeSkipped(LayerType* layer,
|
| template <typename LayerType>
|
| void FindLayersThatNeedUpdates(
|
| LayerType* layer,
|
| - const TransformTree& tree,
|
| - bool subtree_is_visible_from_ancestor,
|
| + const TransformTree& transform_tree,
|
| + const EffectTree& effect_tree,
|
| typename LayerType::LayerListType* update_layer_list,
|
| std::vector<LayerType*>* visible_layer_list) {
|
| + DCHECK_GE(layer->effect_tree_index(), 0);
|
| bool layer_is_drawn =
|
| - layer->HasCopyRequest() ||
|
| - (subtree_is_visible_from_ancestor && !layer->hide_layer_and_subtree());
|
| + effect_tree.Node(layer->effect_tree_index())->data.is_drawn;
|
|
|
| - if (layer->parent() && SubtreeShouldBeSkipped(layer, layer_is_drawn, tree))
|
| + if (layer->parent() &&
|
| + SubtreeShouldBeSkipped(layer, layer_is_drawn, transform_tree))
|
| return;
|
|
|
| - if (!LayerShouldBeSkipped(layer, layer_is_drawn, tree)) {
|
| + if (!LayerShouldBeSkipped(layer, layer_is_drawn, transform_tree)) {
|
| visible_layer_list->push_back(layer);
|
| update_layer_list->push_back(layer);
|
| }
|
| @@ -457,7 +459,7 @@ void FindLayersThatNeedUpdates(
|
| }
|
|
|
| for (size_t i = 0; i < layer->children().size(); ++i) {
|
| - FindLayersThatNeedUpdates(layer->child_at(i), tree, layer_is_drawn,
|
| + FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree,
|
| update_layer_list, visible_layer_list);
|
| }
|
| }
|
| @@ -679,9 +681,8 @@ static void ComputeVisibleRectsUsingPropertyTreesInternal(
|
| can_render_to_separate_surface);
|
| ComputeEffects(&property_trees->effect_tree);
|
|
|
| - const bool subtree_is_visible_from_ancestor = true;
|
| FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree,
|
| - subtree_is_visible_from_ancestor, update_layer_list,
|
| + property_trees->effect_tree, update_layer_list,
|
| visible_layer_list);
|
| CalculateVisibleRects<LayerType>(
|
| *visible_layer_list, property_trees->clip_tree,
|
|
|