Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Unified Diff: cc/trees/layer_tree_host_common.cc

Issue 1872003003: Revert of cc : Remove subtree skipping in LayerTreeHostCommon (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 f1a5fc4d846fe4619d19d63b08d9db8f148af2ca..9485a644f32f8a9baff48a6c247be5eb35d4a2dc 100644
--- a/cc/trees/layer_tree_host_common.cc
+++ b/cc/trees/layer_tree_host_common.cc
@@ -542,28 +542,29 @@ void CalculateRenderTarget(LayerImpl* layer,
property_trees->transform_tree,
property_trees->effect_tree)) {
layer->draw_properties().render_target = nullptr;
- } else {
- bool render_to_separate_surface =
- IsRootLayer(layer) ||
- (can_render_to_separate_surface && layer->render_surface());
+ return;
+ }
- 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;
+ bool render_to_separate_surface =
+ IsRootLayer(layer) ||
+ (can_render_to_separate_surface && layer->render_surface());
- if (layer->mask_layer())
- layer->mask_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->replica_layer() && layer->replica_layer()->mask_layer())
- layer->replica_layer()->mask_layer()->draw_properties().render_target =
- layer;
+ if (layer->mask_layer())
+ layer->mask_layer()->draw_properties().render_target = layer;
- } else {
- DCHECK(!IsRootLayer(layer));
- layer->draw_properties().render_target = layer->parent()->render_target();
- }
+ 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();
}
for (size_t i = 0; i < layer->children().size(); ++i) {
CalculateRenderTarget(
@@ -610,13 +611,6 @@ 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;
}
@@ -663,10 +657,11 @@ 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) {
- DCHECK(layer->draw_properties().render_target);
MarkLayerWithRenderSurfaceLayerListId(layer,
current_render_surface_layer_list_id);
descendants->push_back(layer);
@@ -745,7 +740,7 @@ void CalculateRenderSurfaceLayerList(
layer->render_surface()->SetContentRect(surface_content_rect);
}
const LayerImpl* parent_target = layer->parent()->render_target();
- if (parent_target && !IsRootLayer(parent_target)) {
+ if (!IsRootLayer(parent_target)) {
gfx::Rect surface_content_rect =
parent_target->render_surface()->accumulated_content_rect();
if (render_to_separate_surface) {
@@ -773,6 +768,13 @@ 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,6 +875,8 @@ 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);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698