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

Unified Diff: cc/trees/draw_property_utils.cc

Issue 1868003002: cc: Move RenderTarget Information to Effect Tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
Index: cc/trees/draw_property_utils.cc
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc
index 605bca37d9eb7a22c1675cf580a95d62e39dbb62..a562c2f02bcb41899a7a1ce7932fae43da00c2b7 100644
--- a/cc/trees/draw_property_utils.cc
+++ b/cc/trees/draw_property_utils.cc
@@ -430,6 +430,7 @@ void UpdateRenderSurfaceForLayer(EffectTree* effect_tree,
layer->SetHasRenderSurface(IsRootLayer(layer));
return;
}
+
EffectNode* node = effect_tree->Node(layer->effect_tree_index());
if (node->owner_id == layer->id() && node->data.has_render_surface)
@@ -601,6 +602,23 @@ void ComputeTransforms(TransformTree* transform_tree) {
transform_tree->set_needs_update(false);
}
+void UpdateRenderTarget(EffectTree* effect_tree,
+ bool can_render_to_separate_surface) {
+ for (int i = 1; i < static_cast<int>(effect_tree->size()); ++i) {
+ EffectNode* node = effect_tree->Node(i);
+ if (i == 1) {
+ // Render target on the first effect node is root.
+ node->data.target_id = 0;
+ } else if (!can_render_to_separate_surface) {
+ node->data.target_id = 1;
+ } else if (effect_tree->parent(node)->data.has_render_surface) {
+ node->data.target_id = node->parent_id;
+ } else {
+ node->data.target_id = effect_tree->parent(node)->data.target_id;
+ }
+ }
+}
+
void ComputeEffects(EffectTree* effect_tree) {
if (!effect_tree->needs_update())
return;
@@ -622,6 +640,8 @@ static void ComputeVisibleRectsInternal(
}
if (property_trees->transform_tree.needs_update())
property_trees->clip_tree.set_needs_update(true);
+ UpdateRenderTarget(&property_trees->effect_tree,
+ property_trees->non_root_surfaces_enabled);
ComputeTransforms(&property_trees->transform_tree);
ComputeClips(&property_trees->clip_tree, property_trees->transform_tree,
can_render_to_separate_surface);
@@ -723,6 +743,10 @@ void ComputeVisibleRects(LayerImpl* root_layer,
for (auto* layer : *root_layer->layer_tree_impl()) {
UpdateRenderSurfaceForLayer(&property_trees->effect_tree,
can_render_to_separate_surface, layer);
+ EffectNode* node =
+ property_trees->effect_tree.Node(layer->effect_tree_index());
+ if (node->owner_id == layer->id())
+ node->data.render_surface = layer->render_surface();
#if DCHECK_IS_ON()
if (can_render_to_separate_surface)
ValidateRenderSurfaceForLayer(layer);
@@ -910,7 +934,7 @@ static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) {
return 0.f;
const EffectNode* target_node =
- tree.Node(layer->render_target()->effect_tree_index());
+ tree.Node(layer->render_target()->EffectTreeIndex());
const EffectNode* node = tree.Node(layer->effect_tree_index());
if (node == target_node)
return 1.f;

Powered by Google App Engine
This is Rietveld 408576698