Chromium Code Reviews| Index: cc/trees/layer_tree_host_common.cc |
| diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc |
| index fd636302fc6ae8ebfd21c4c7b5d988f0157f9324..5c330c8d41e1f09dc559f8179f37fce04c0a78f2 100644 |
| --- a/cc/trees/layer_tree_host_common.cc |
| +++ b/cc/trees/layer_tree_host_common.cc |
| @@ -541,29 +541,28 @@ void CalculateRenderTarget(LayerImpl* layer, |
| draw_property_utils::LayerShouldBeSkipped( |
| layer, layer_is_drawn, property_trees->transform_tree)) { |
| layer->draw_properties().render_target = nullptr; |
| - return; |
| - } |
| - |
| - bool render_to_separate_surface = |
| - IsRootLayer(layer) || |
| - (can_render_to_separate_surface && layer->render_surface()); |
| + } else { |
| + bool render_to_separate_surface = |
| + IsRootLayer(layer) || |
| + (can_render_to_separate_surface && layer->render_surface()); |
| - if (render_to_separate_surface) { |
| - DCHECK(layer->render_surface()) << IsRootLayer(layer) |
| - << can_render_to_separate_surface |
| - << layer->has_render_surface(); |
| - layer->draw_properties().render_target = layer; |
| + if (render_to_separate_surface) { |
| + DCHECK(layer->render_surface()) << IsRootLayer(layer) |
| + << can_render_to_separate_surface |
| + << layer->has_render_surface(); |
| + layer->draw_properties().render_target = layer; |
| - if (layer->mask_layer()) |
| - layer->mask_layer()->draw_properties().render_target = layer; |
| + if (layer->mask_layer()) |
| + layer->mask_layer()->draw_properties().render_target = layer; |
| - if (layer->replica_layer() && layer->replica_layer()->mask_layer()) |
| - layer->replica_layer()->mask_layer()->draw_properties().render_target = |
| - layer; |
| + if (layer->replica_layer() && layer->replica_layer()->mask_layer()) |
| + layer->replica_layer()->mask_layer()->draw_properties().render_target = |
| + layer; |
| - } else { |
| - DCHECK(!IsRootLayer(layer)); |
| - layer->draw_properties().render_target = layer->parent()->render_target(); |
| + } else { |
| + DCHECK(!IsRootLayer(layer)); |
| + layer->draw_properties().render_target = layer->parent()->render_target(); |
| + } |
| } |
| for (size_t i = 0; i < layer->children().size(); ++i) { |
| CalculateRenderTarget( |
| @@ -609,6 +608,13 @@ void CalculateRenderSurfaceLayerList( |
| if (layer->render_surface()) |
| layer->ClearRenderSurfaceLayerList(); |
| layer->draw_properties().render_target = nullptr; |
| + for (auto* child_layer : layer->children()) { |
| + CalculateRenderSurfaceLayerList( |
| + child_layer, property_trees, render_surface_layer_list, descendants, |
| + nearest_occlusion_immune_ancestor, layer_is_drawn, |
| + can_render_to_separate_surface, current_render_surface_layer_list_id, |
| + max_texture_size); |
| + } |
| return; |
| } |
| @@ -655,8 +661,6 @@ void CalculateRenderSurfaceLayerList( |
| descendants = &(layer->render_surface()->layer_list()); |
| } |
| - size_t descendants_size = descendants->size(); |
| - |
| bool layer_should_be_skipped = !draw_property_utils::LayerNeedsUpdate( |
| layer, layer_is_drawn, property_trees->transform_tree); |
| if (!layer_should_be_skipped) { |
|
ajuma
2016/04/07 15:19:56
Please add a DCHECK here that we're either renderi
jaydasika
2016/04/07 17:00:55
Done.
|
| @@ -738,7 +742,7 @@ void CalculateRenderSurfaceLayerList( |
| layer->render_surface()->SetContentRect(surface_content_rect); |
| } |
| const LayerImpl* parent_target = layer->parent()->render_target(); |
| - if (!IsRootLayer(parent_target)) { |
| + if (parent_target && !IsRootLayer(parent_target)) { |
|
jaydasika
2016/04/07 00:32:21
Adding this because layers with copy requests may
ajuma
2016/04/07 15:19:56
Can this happen now, or only after the layer skipp
jaydasika
2016/04/07 17:00:55
Cannot happen now.
|
| gfx::Rect surface_content_rect = |
| parent_target->render_surface()->accumulated_content_rect(); |
| if (render_to_separate_surface) { |
| @@ -766,13 +770,6 @@ void CalculateRenderSurfaceLayerList( |
| if (render_to_separate_surface && !IsRootLayer(layer) && |
| layer->render_surface()->DrawableContentRect().IsEmpty()) { |
| RemoveSurfaceForEarlyExit(layer, render_surface_layer_list); |
| - return; |
| - } |
| - |
| - // If neither this layer nor any of its children were added, early out. |
| - if (descendants_size == descendants->size()) { |
| - DCHECK(!render_to_separate_surface || IsRootLayer(layer)); |
| - return; |
| } |
| } |
| @@ -873,8 +870,6 @@ void CalculateDrawPropertiesInternal( |
| DCHECK(inputs->can_render_to_separate_surface == |
| inputs->property_trees->non_root_surfaces_enabled); |
| const bool subtree_visible_from_ancestor = true; |
| - for (auto* layer : *inputs->root_layer->layer_tree_impl()) |
| - layer->draw_properties().render_target = nullptr; |
| CalculateRenderTarget(inputs->root_layer, inputs->property_trees, |
| subtree_visible_from_ancestor, |
| inputs->can_render_to_separate_surface); |