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

Unified Diff: cc/trees/draw_property_utils.cc

Issue 1855013002: cc : Stop calculating visible rects on main thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 f6e4b14d92457a9fd68b5102fbc19cfff830b94c..f16fe04659643fc22da3c89560293070be01f51a 100644
--- a/cc/trees/draw_property_utils.cc
+++ b/cc/trees/draw_property_utils.cc
@@ -441,11 +441,10 @@ static bool LayerNeedsUpdate(LayerType* layer,
return true;
}
-void FindLayersThatNeedUpdates(Layer* layer,
- const TransformTree& transform_tree,
- const EffectTree& effect_tree,
- LayerList* update_layer_list,
- std::vector<Layer*>* visible_layer_list) {
+static void FindLayersThatNeedUpdates(Layer* layer,
+ const TransformTree& transform_tree,
+ const EffectTree& effect_tree,
+ LayerList* update_layer_list) {
DCHECK_GE(layer->effect_tree_index(), 0);
bool layer_is_drawn =
effect_tree.Node(layer->effect_tree_index())->data.is_drawn;
@@ -455,7 +454,6 @@ void FindLayersThatNeedUpdates(Layer* layer,
return;
if (LayerNeedsUpdate(layer, layer_is_drawn, transform_tree)) {
- visible_layer_list->push_back(layer);
update_layer_list->push_back(layer);
}
@@ -471,7 +469,7 @@ void FindLayersThatNeedUpdates(Layer* layer,
for (size_t i = 0; i < layer->children().size(); ++i) {
FindLayersThatNeedUpdates(layer->child_at(i), transform_tree, effect_tree,
- update_layer_list, visible_layer_list);
+ update_layer_list);
}
}
@@ -690,13 +688,12 @@ void ComputeEffects(EffectTree* effect_tree) {
effect_tree->set_needs_update(false);
}
-template <typename LayerType>
static void ComputeVisibleRectsInternal(
- LayerType* root_layer,
+ LayerImpl* root_layer,
PropertyTrees* property_trees,
bool can_render_to_separate_surface,
- typename LayerType::LayerListType* update_layer_list,
- std::vector<LayerType*>* visible_layer_list) {
+ LayerImplList* update_layer_list,
+ std::vector<LayerImpl*>* visible_layer_list) {
if (property_trees->non_root_surfaces_enabled !=
can_render_to_separate_surface) {
property_trees->non_root_surfaces_enabled = can_render_to_separate_surface;
@@ -712,9 +709,45 @@ static void ComputeVisibleRectsInternal(
FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree,
property_trees->effect_tree, update_layer_list,
visible_layer_list);
- CalculateVisibleRects<LayerType>(
- *visible_layer_list, property_trees->clip_tree,
- property_trees->transform_tree, can_render_to_separate_surface);
+ CalculateVisibleRects(*visible_layer_list, property_trees->clip_tree,
+ property_trees->transform_tree,
+ can_render_to_separate_surface);
+}
+
+void Update(Layer* root_layer,
+ PropertyTrees* property_trees,
+ bool can_render_to_separate_surface,
+ LayerList* update_layer_list) {
+ UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree,
+ root_layer);
+#if DCHECK_IS_ON()
+ ValidateRenderSurfacesRecursive(root_layer);
+#endif
+ if (property_trees->non_root_surfaces_enabled !=
+ can_render_to_separate_surface) {
+ property_trees->non_root_surfaces_enabled = can_render_to_separate_surface;
+ property_trees->transform_tree.set_needs_update(true);
+ }
+ if (property_trees->transform_tree.needs_update())
+ property_trees->clip_tree.set_needs_update(true);
+ ComputeTransforms(&property_trees->transform_tree);
+ ComputeClips(&property_trees->clip_tree, property_trees->transform_tree,
+ can_render_to_separate_surface);
+ ComputeEffects(&property_trees->effect_tree);
+ FindLayersThatNeedUpdates(root_layer, property_trees->transform_tree,
+ property_trees->effect_tree, update_layer_list);
+}
+
+void ComputeVisibleRectsForTesting(PropertyTrees* property_trees,
+ bool can_render_to_separate_surface,
+ LayerList* update_layer_list) {
+ std::vector<Layer*> visible_layer_list;
+ for (auto layer : *update_layer_list) {
+ visible_layer_list.push_back(layer.get());
+ }
+ CalculateVisibleRects(visible_layer_list, property_trees->clip_tree,
+ property_trees->transform_tree,
+ can_render_to_separate_surface);
}
void BuildPropertyTreesAndComputeVisibleRects(
jaydasika 2016/04/02 02:54:10 Wanted to delete this function but calling the fun
ajuma 2016/04/04 14:15:05 It's probably just that PropertyTreeBuilder isn't
jaydasika 2016/04/04 18:41:09 That was the reason. Thanks
@@ -728,21 +761,12 @@ void BuildPropertyTreesAndComputeVisibleRects(
float device_scale_factor,
const gfx::Rect& viewport,
const gfx::Transform& device_transform,
- bool can_render_to_separate_surface,
- PropertyTrees* property_trees,
- LayerList* update_layer_list) {
+ PropertyTrees* property_trees) {
PropertyTreeBuilder::BuildPropertyTrees(
root_layer, page_scale_layer, inner_viewport_scroll_layer,
outer_viewport_scroll_layer, overscroll_elasticity_layer,
elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
device_transform, property_trees);
- UpdateRenderSurfacesForLayersRecursive(&property_trees->effect_tree,
- root_layer);
-#if DCHECK_IS_ON()
- ValidateRenderSurfacesRecursive(root_layer);
-#endif
- ComputeVisibleRects(root_layer, property_trees,
- can_render_to_separate_surface, update_layer_list);
}
void BuildPropertyTreesAndComputeVisibleRects(
@@ -768,16 +792,6 @@ void BuildPropertyTreesAndComputeVisibleRects(
can_render_to_separate_surface, visible_layer_list);
}
-void ComputeVisibleRects(Layer* root_layer,
- PropertyTrees* property_trees,
- bool can_render_to_separate_surface,
- LayerList* update_layer_list) {
- std::vector<Layer*> visible_layer_list;
- ComputeVisibleRectsInternal(root_layer, property_trees,
- can_render_to_separate_surface, update_layer_list,
- &visible_layer_list);
-}
-
void ComputeVisibleRects(LayerImpl* root_layer,
PropertyTrees* property_trees,
bool can_render_to_separate_surface,

Powered by Google App Engine
This is Rietveld 408576698