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 |