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

Unified Diff: cc/trees/property_tree_builder.cc

Issue 1588093004: Compute if a layer is drawn without LayerTree hierarchy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
« cc/trees/property_tree.cc ('K') | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..c3c9afc3c8a93534a2ecacc6aa0564cd8cb2705c 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -574,6 +574,8 @@ bool AddEffectNodeIfNeeded(
node.data.opacity = layer->opacity();
node.data.screen_space_opacity = layer->opacity();
node.data.has_render_surface = should_create_render_surface;
+ node.data.has_copy_request = layer->HasCopyRequest();
+ 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 +590,9 @@ bool AddEffectNodeIfNeeded(
}
node.data.clip_id = data_from_ancestor.clip_tree_parent;
- node.data.screen_space_opacity *=
- 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 +600,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 +640,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 +755,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.
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);
}
void PropertyTreeBuilder::BuildPropertyTrees(
« cc/trees/property_tree.cc ('K') | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698