| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/trees/draw_property_utils.h" | 5 #include "cc/trees/draw_property_utils.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 IsLayerBackFaceVisible(layer, backface_transform_id, tree)) | 306 IsLayerBackFaceVisible(layer, backface_transform_id, tree)) |
| 307 return false; | 307 return false; |
| 308 } | 308 } |
| 309 | 309 |
| 310 return true; | 310 return true; |
| 311 } | 311 } |
| 312 | 312 |
| 313 void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, | 313 void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, |
| 314 const TransformTree& transform_tree, | 314 const TransformTree& transform_tree, |
| 315 const EffectTree& effect_tree, | 315 const EffectTree& effect_tree, |
| 316 LayerImplList* update_layer_list, | |
| 317 std::vector<LayerImpl*>* visible_layer_list) { | 316 std::vector<LayerImpl*>* visible_layer_list) { |
| 318 for (auto* layer_impl : *layer_tree_impl) { | 317 for (auto* layer_impl : *layer_tree_impl) { |
| 319 bool layer_is_drawn = | 318 bool layer_is_drawn = |
| 320 effect_tree.Node(layer_impl->effect_tree_index())->data.is_drawn; | 319 effect_tree.Node(layer_impl->effect_tree_index())->data.is_drawn; |
| 321 | 320 |
| 322 if (!IsRootLayer(layer_impl) && | 321 if (!IsRootLayer(layer_impl) && |
| 323 LayerShouldBeSkipped(layer_impl, layer_is_drawn, transform_tree, | 322 LayerShouldBeSkipped(layer_impl, layer_is_drawn, transform_tree, |
| 324 effect_tree)) | 323 effect_tree)) |
| 325 continue; | 324 continue; |
| 326 | 325 |
| 327 if (LayerNeedsUpdate(layer_impl, layer_is_drawn, transform_tree)) { | 326 if (LayerNeedsUpdate(layer_impl, layer_is_drawn, transform_tree)) |
| 328 visible_layer_list->push_back(layer_impl); | 327 visible_layer_list->push_back(layer_impl); |
| 329 update_layer_list->push_back(layer_impl); | |
| 330 } | |
| 331 | |
| 332 if (LayerImpl* mask_layer = layer_impl->mask_layer()) | |
| 333 update_layer_list->push_back(mask_layer); | |
| 334 if (LayerImpl* replica_layer = layer_impl->replica_layer()) { | |
| 335 if (LayerImpl* mask_layer = replica_layer->mask_layer()) | |
| 336 update_layer_list->push_back(mask_layer); | |
| 337 } | |
| 338 } | 328 } |
| 339 } | 329 } |
| 340 | 330 |
| 341 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree, | 331 void UpdateRenderSurfaceForLayer(EffectTree* effect_tree, |
| 342 bool non_root_surfaces_enabled, | 332 bool non_root_surfaces_enabled, |
| 343 LayerImpl* layer) { | 333 LayerImpl* layer) { |
| 344 if (!non_root_surfaces_enabled) { | 334 if (!non_root_surfaces_enabled) { |
| 345 layer->SetHasRenderSurface(IsRootLayer(layer)); | 335 layer->SetHasRenderSurface(IsRootLayer(layer)); |
| 346 return; | 336 return; |
| 347 } | 337 } |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 << gfx::ToEnclosingRect(clip_tree->Node(layer->clip_tree_index()) | 743 << gfx::ToEnclosingRect(clip_tree->Node(layer->clip_tree_index()) |
| 754 ->data.clip_in_target_space) | 744 ->data.clip_in_target_space) |
| 755 .ToString(); | 745 .ToString(); |
| 756 } | 746 } |
| 757 } | 747 } |
| 758 | 748 |
| 759 static void ComputeVisibleRectsInternal( | 749 static void ComputeVisibleRectsInternal( |
| 760 LayerImpl* root_layer, | 750 LayerImpl* root_layer, |
| 761 PropertyTrees* property_trees, | 751 PropertyTrees* property_trees, |
| 762 bool can_render_to_separate_surface, | 752 bool can_render_to_separate_surface, |
| 763 LayerImplList* update_layer_list, | |
| 764 std::vector<LayerImpl*>* visible_layer_list) { | 753 std::vector<LayerImpl*>* visible_layer_list) { |
| 765 if (property_trees->non_root_surfaces_enabled != | 754 if (property_trees->non_root_surfaces_enabled != |
| 766 can_render_to_separate_surface) { | 755 can_render_to_separate_surface) { |
| 767 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; | 756 property_trees->non_root_surfaces_enabled = can_render_to_separate_surface; |
| 768 property_trees->transform_tree.set_needs_update(true); | 757 property_trees->transform_tree.set_needs_update(true); |
| 769 } | 758 } |
| 770 if (property_trees->transform_tree.needs_update()) { | 759 if (property_trees->transform_tree.needs_update()) { |
| 771 property_trees->clip_tree.set_needs_update(true); | 760 property_trees->clip_tree.set_needs_update(true); |
| 772 property_trees->effect_tree.set_needs_update(true); | 761 property_trees->effect_tree.set_needs_update(true); |
| 773 } | 762 } |
| 774 UpdateRenderTarget(&property_trees->effect_tree, | 763 UpdateRenderTarget(&property_trees->effect_tree, |
| 775 property_trees->non_root_surfaces_enabled); | 764 property_trees->non_root_surfaces_enabled); |
| 776 ComputeTransforms(&property_trees->transform_tree); | 765 ComputeTransforms(&property_trees->transform_tree); |
| 777 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, | 766 ComputeClips(&property_trees->clip_tree, property_trees->transform_tree, |
| 778 can_render_to_separate_surface); | 767 can_render_to_separate_surface); |
| 779 ComputeEffects(&property_trees->effect_tree); | 768 ComputeEffects(&property_trees->effect_tree); |
| 780 | 769 |
| 781 FindLayersThatNeedUpdates( | 770 FindLayersThatNeedUpdates(root_layer->layer_tree_impl(), |
| 782 root_layer->layer_tree_impl(), property_trees->transform_tree, | 771 property_trees->transform_tree, |
| 783 property_trees->effect_tree, update_layer_list, visible_layer_list); | 772 property_trees->effect_tree, visible_layer_list); |
| 784 CalculateVisibleRects<LayerImpl>( | 773 CalculateVisibleRects<LayerImpl>( |
| 785 *visible_layer_list, property_trees->clip_tree, | 774 *visible_layer_list, property_trees->clip_tree, |
| 786 property_trees->transform_tree, property_trees->effect_tree, | 775 property_trees->transform_tree, property_trees->effect_tree, |
| 787 can_render_to_separate_surface); | 776 can_render_to_separate_surface); |
| 788 } | 777 } |
| 789 | 778 |
| 790 void UpdatePropertyTrees(PropertyTrees* property_trees, | 779 void UpdatePropertyTrees(PropertyTrees* property_trees, |
| 791 bool can_render_to_separate_surface) { | 780 bool can_render_to_separate_surface) { |
| 792 if (property_trees->non_root_surfaces_enabled != | 781 if (property_trees->non_root_surfaces_enabled != |
| 793 can_render_to_separate_surface) { | 782 can_render_to_separate_surface) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 854 can_render_to_separate_surface, layer); | 843 can_render_to_separate_surface, layer); |
| 855 EffectNode* node = | 844 EffectNode* node = |
| 856 property_trees->effect_tree.Node(layer->effect_tree_index()); | 845 property_trees->effect_tree.Node(layer->effect_tree_index()); |
| 857 if (node->owner_id == layer->id()) | 846 if (node->owner_id == layer->id()) |
| 858 node->data.render_surface = layer->render_surface(); | 847 node->data.render_surface = layer->render_surface(); |
| 859 #if DCHECK_IS_ON() | 848 #if DCHECK_IS_ON() |
| 860 if (can_render_to_separate_surface) | 849 if (can_render_to_separate_surface) |
| 861 ValidateRenderSurfaceForLayer(layer); | 850 ValidateRenderSurfaceForLayer(layer); |
| 862 #endif | 851 #endif |
| 863 } | 852 } |
| 864 LayerImplList update_layer_list; | |
| 865 ComputeVisibleRectsInternal(root_layer, property_trees, | 853 ComputeVisibleRectsInternal(root_layer, property_trees, |
| 866 can_render_to_separate_surface, | 854 can_render_to_separate_surface, |
| 867 &update_layer_list, visible_layer_list); | 855 visible_layer_list); |
| 868 } | 856 } |
| 869 | 857 |
| 870 bool LayerNeedsUpdate(Layer* layer, | 858 bool LayerNeedsUpdate(Layer* layer, |
| 871 bool layer_is_drawn, | 859 bool layer_is_drawn, |
| 872 const TransformTree& tree) { | 860 const TransformTree& tree) { |
| 873 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); | 861 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); |
| 874 } | 862 } |
| 875 | 863 |
| 876 bool LayerNeedsUpdate(LayerImpl* layer, | 864 bool LayerNeedsUpdate(LayerImpl* layer, |
| 877 bool layer_is_drawn, | 865 bool layer_is_drawn, |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1258 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1246 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
| 1259 const Layer* overscroll_elasticity_layer, | 1247 const Layer* overscroll_elasticity_layer, |
| 1260 const gfx::Vector2dF& elastic_overscroll) { | 1248 const gfx::Vector2dF& elastic_overscroll) { |
| 1261 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1249 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
| 1262 elastic_overscroll); | 1250 elastic_overscroll); |
| 1263 } | 1251 } |
| 1264 | 1252 |
| 1265 } // namespace draw_property_utils | 1253 } // namespace draw_property_utils |
| 1266 | 1254 |
| 1267 } // namespace cc | 1255 } // namespace cc |
| OLD | NEW |