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

Unified Diff: cc/trees/property_tree_builder.cc

Issue 2856043002: cc : Layers with singular transforms and copy request should be drawn (Closed)
Patch Set: comments Created 3 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 | « 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 73197741d39ad4229075a9492c8e1bb62121eac8..3a3e1dbaf8682a54815be47e65b07eb614f65381 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -39,6 +39,7 @@ struct DataForRecursion {
int clip_tree_parent;
int effect_tree_parent;
int scroll_tree_parent;
+ int closest_ancestor_with_copy_request;
const LayerType* page_scale_layer;
const LayerType* inner_viewport_scroll_layer;
const LayerType* outer_viewport_scroll_layer;
@@ -912,34 +913,40 @@ bool AddEffectNodeIfNeeded(
return false;
}
- EffectNode node;
- node.owning_layer_id = layer->id();
+ EffectTree& effect_tree = data_for_children->property_trees->effect_tree;
+ int node_id = effect_tree.Insert(EffectNode(), parent_id);
+ EffectNode* node = effect_tree.back();
+
+ node->owning_layer_id = layer->id();
if (AlwaysUseActiveTreeOpacity(layer)) {
data_for_children->property_trees->always_use_active_tree_opacity_effect_ids
- .push_back(node.owning_layer_id);
+ .push_back(node->owning_layer_id);
}
- node.opacity = Opacity(layer);
- node.blend_mode = BlendMode(layer);
- node.unscaled_mask_target_size = layer->bounds();
- node.has_render_surface = should_create_render_surface;
- node.has_copy_request = HasCopyRequest(layer);
- node.filters = Filters(layer);
- node.background_filters = BackgroundFilters(layer);
- node.filters_origin = FiltersOrigin(layer);
- node.has_potential_opacity_animation = has_potential_opacity_animation;
- node.has_potential_filter_animation = has_potential_filter_animation;
- node.double_sided = DoubleSided(layer);
- node.subtree_hidden = HideLayerAndSubtree(layer);
- node.is_currently_animating_opacity = OpacityIsAnimating(layer);
- node.is_currently_animating_filter = FilterIsAnimating(layer);
- node.effect_changed = PropertyChanged(layer);
- node.subtree_has_copy_request = SubtreeHasCopyRequest(layer);
+ node->opacity = Opacity(layer);
+ node->blend_mode = BlendMode(layer);
+ node->unscaled_mask_target_size = layer->bounds();
+ node->has_render_surface = should_create_render_surface;
+ node->has_copy_request = HasCopyRequest(layer);
+ node->filters = Filters(layer);
+ node->background_filters = BackgroundFilters(layer);
+ node->filters_origin = FiltersOrigin(layer);
+ node->has_potential_opacity_animation = has_potential_opacity_animation;
+ node->has_potential_filter_animation = has_potential_filter_animation;
+ node->double_sided = DoubleSided(layer);
+ node->subtree_hidden = HideLayerAndSubtree(layer);
+ node->is_currently_animating_opacity = OpacityIsAnimating(layer);
+ node->is_currently_animating_filter = FilterIsAnimating(layer);
+ node->effect_changed = PropertyChanged(layer);
+ node->subtree_has_copy_request = SubtreeHasCopyRequest(layer);
+ node->closest_ancestor_with_copy_request_id =
+ HasCopyRequest(layer)
+ ? node_id
+ : data_from_ancestor.closest_ancestor_with_copy_request;
- EffectTree& effect_tree = data_for_children->property_trees->effect_tree;
if (MaskLayer(layer)) {
- node.mask_layer_id = MaskLayer(layer)->id();
- effect_tree.AddMaskLayerId(node.mask_layer_id);
+ node->mask_layer_id = MaskLayer(layer)->id();
+ effect_tree.AddMaskLayerId(node->mask_layer_id);
}
if (!is_root) {
@@ -950,19 +957,21 @@ bool AddEffectNodeIfNeeded(
// In this case, we will create a transform node, so it's safe to use the
// next available id from the transform tree as this effect node's
// transform id.
- node.transform_id =
+ node->transform_id =
data_from_ancestor.property_trees->transform_tree.next_available_id();
}
- node.clip_id = data_from_ancestor.clip_tree_parent;
+ node->clip_id = data_from_ancestor.clip_tree_parent;
} else {
// Root render surface acts the unbounded and untransformed to draw content
// into. Transform node created from root layer (includes device scale
// factor) and clip node created from root layer (include viewports) applies
// to root render surface's content, but not root render surface itself.
- node.transform_id = TransformTree::kRootNodeId;
- node.clip_id = ClipTree::kViewportNodeId;
+ node->transform_id = TransformTree::kRootNodeId;
+ node->clip_id = ClipTree::kViewportNodeId;
}
- int node_id = effect_tree.Insert(node, parent_id);
jaydasika 2017/05/03 21:14:33 I realized while writing this CL that any updates
+
+ data_for_children->closest_ancestor_with_copy_request =
+ node->closest_ancestor_with_copy_request_id;
data_for_children->effect_tree_parent = node_id;
layer->SetEffectTreeIndex(node_id);
data_for_children->property_trees->effect_tree.SetOwningLayerIdForNode(
@@ -1255,6 +1264,8 @@ void BuildPropertyTreesTopLevelInternal(
data_for_recursion.clip_tree_parent = ClipTree::kRootNodeId;
data_for_recursion.effect_tree_parent = EffectTree::kInvalidNodeId;
data_for_recursion.scroll_tree_parent = ScrollTree::kRootNodeId;
+ data_for_recursion.closest_ancestor_with_copy_request =
+ EffectTree::kInvalidNodeId;
data_for_recursion.page_scale_layer = page_scale_layer;
data_for_recursion.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
data_for_recursion.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
« no previous file with comments | « cc/trees/property_tree.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698