Chromium Code Reviews| 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, |