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

Unified Diff: cc/trees/property_tree_builder.cc

Issue 2873593002: Force use of and cache render surface. (Closed)
Patch Set: Rebased to resolve conflict. Created 3 years, 5 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') | components/viz/service/display/surface_aggregator.h » ('j') | 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 291c6eb66081e2dd15dab93385ffa09480b2da66..359bb1d87d80243a30596dd1d3b7f9178878507c 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -44,6 +44,7 @@ struct DataForRecursion {
int clip_tree_parent;
int effect_tree_parent;
int scroll_tree_parent;
+ int closest_ancestor_with_cached_render_surface;
int closest_ancestor_with_copy_request;
uint32_t main_thread_scrolling_reasons;
SkColor safe_opaque_background_color;
@@ -581,6 +582,14 @@ static inline bool DoubleSided(LayerImpl* layer) {
return layer->test_properties()->double_sided;
}
+static inline bool CacheRenderSurface(Layer* layer) {
+ return layer->cache_render_surface();
+}
+
+static inline bool CacheRenderSurface(LayerImpl* layer) {
+ return layer->test_properties()->cache_render_surface;
+}
+
static inline bool ForceRenderSurface(Layer* layer) {
return layer->force_render_surface_for_testing();
}
@@ -787,6 +796,10 @@ bool ShouldCreateRenderSurface(LayerType* layer,
if (ForceRenderSurface(layer))
return true;
+ // If we cache it.
+ if (CacheRenderSurface(layer))
+ return true;
+
// If we'll make a copy of the layer's contents.
if (HasCopyRequest(layer))
return true;
@@ -893,6 +906,7 @@ bool AddEffectNodeIfNeeded(
node->blend_mode = BlendMode(layer);
node->unscaled_mask_target_size = layer->bounds();
node->has_render_surface = should_create_render_surface;
+ node->cache_render_surface = CacheRenderSurface(layer);
node->has_copy_request = HasCopyRequest(layer);
node->filters = Filters(layer);
node->background_filters = BackgroundFilters(layer);
@@ -905,6 +919,10 @@ bool AddEffectNodeIfNeeded(
node->is_currently_animating_filter = FilterIsAnimating(layer);
node->effect_changed = PropertyChanged(layer);
node->subtree_has_copy_request = SubtreeHasCopyRequest(layer);
+ node->closest_ancestor_with_cached_render_surface_id =
+ CacheRenderSurface(layer)
+ ? node_id
+ : data_from_ancestor.closest_ancestor_with_cached_render_surface;
node->closest_ancestor_with_copy_request_id =
HasCopyRequest(layer)
? node_id
@@ -938,6 +956,8 @@ bool AddEffectNodeIfNeeded(
node->clip_id = ClipTree::kViewportNodeId;
}
+ data_for_children->closest_ancestor_with_cached_render_surface =
+ node->closest_ancestor_with_cached_render_surface_id;
data_for_children->closest_ancestor_with_copy_request =
node->closest_ancestor_with_copy_request_id;
data_for_children->effect_tree_parent = node_id;
@@ -1238,6 +1258,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_cached_render_surface =
+ EffectTree::kInvalidNodeId;
data_for_recursion.closest_ancestor_with_copy_request =
EffectTree::kInvalidNodeId;
data_for_recursion.page_scale_layer = page_scale_layer;
« no previous file with comments | « cc/trees/property_tree.cc ('k') | components/viz/service/display/surface_aggregator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698