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 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 static inline bool LayerShouldBeSkippedInternal( | 453 static inline bool LayerShouldBeSkippedInternal( |
454 LayerType* layer, | 454 LayerType* layer, |
455 const TransformTree& transform_tree, | 455 const TransformTree& transform_tree, |
456 const EffectTree& effect_tree) { | 456 const EffectTree& effect_tree) { |
457 const TransformNode* transform_node = | 457 const TransformNode* transform_node = |
458 transform_tree.Node(layer->transform_tree_index()); | 458 transform_tree.Node(layer->transform_tree_index()); |
459 const EffectNode* effect_node = effect_tree.Node(layer->effect_tree_index()); | 459 const EffectNode* effect_node = effect_tree.Node(layer->effect_tree_index()); |
460 | 460 |
461 if (effect_node->has_render_surface && effect_node->subtree_has_copy_request) | 461 if (effect_node->has_render_surface && effect_node->subtree_has_copy_request) |
462 return false; | 462 return false; |
463 // If the layer transform is not invertible, it should be skipped. | 463 |
464 // TODO(ajuma): Correctly process subtrees with singular transform for the | 464 // If the layer transform is not invertible, it should be skipped. In case the |
465 // case where we may animate to a non-singular transform and wish to | 465 // transform is animating and singular, we should not skip it. |
466 // pre-raster. | |
467 return !transform_node->node_and_ancestors_are_animated_or_invertible || | 466 return !transform_node->node_and_ancestors_are_animated_or_invertible || |
468 effect_node->hidden_by_backface_visibility || !effect_node->is_drawn; | 467 effect_node->hidden_by_backface_visibility || !effect_node->is_drawn; |
469 } | 468 } |
470 | 469 |
471 template <typename LayerType> | 470 template <typename LayerType> |
472 static void UpdateElasticOverscrollInternal( | 471 static void UpdateElasticOverscrollInternal( |
473 PropertyTrees* property_trees, | 472 PropertyTrees* property_trees, |
474 const LayerType* overscroll_elasticity_layer, | 473 const LayerType* overscroll_elasticity_layer, |
475 const gfx::Vector2dF& elastic_overscroll) { | 474 const gfx::Vector2dF& elastic_overscroll) { |
476 if (!overscroll_elasticity_layer) { | 475 if (!overscroll_elasticity_layer) { |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 | 792 |
794 void ConcatInverseSurfaceContentsScale(const EffectNode* effect_node, | 793 void ConcatInverseSurfaceContentsScale(const EffectNode* effect_node, |
795 gfx::Transform* transform) { | 794 gfx::Transform* transform) { |
796 DCHECK(effect_node->has_render_surface); | 795 DCHECK(effect_node->has_render_surface); |
797 if (effect_node->surface_contents_scale.x() != 0.0 && | 796 if (effect_node->surface_contents_scale.x() != 0.0 && |
798 effect_node->surface_contents_scale.y() != 0.0) | 797 effect_node->surface_contents_scale.y() != 0.0) |
799 transform->Scale(1.0 / effect_node->surface_contents_scale.x(), | 798 transform->Scale(1.0 / effect_node->surface_contents_scale.x(), |
800 1.0 / effect_node->surface_contents_scale.y()); | 799 1.0 / effect_node->surface_contents_scale.y()); |
801 } | 800 } |
802 | 801 |
803 bool LayerShouldBeSkipped(LayerImpl* layer, | 802 bool LayerShouldBeSkippedForDrawPropertiesComputation( |
804 const TransformTree& transform_tree, | 803 LayerImpl* layer, |
805 const EffectTree& effect_tree) { | 804 const TransformTree& transform_tree, |
| 805 const EffectTree& effect_tree) { |
806 return LayerShouldBeSkippedInternal(layer, transform_tree, effect_tree); | 806 return LayerShouldBeSkippedInternal(layer, transform_tree, effect_tree); |
807 } | 807 } |
808 | 808 |
809 bool LayerShouldBeSkipped(Layer* layer, | 809 bool LayerShouldBeSkippedForDrawPropertiesComputation( |
810 const TransformTree& transform_tree, | 810 Layer* layer, |
811 const EffectTree& effect_tree) { | 811 const TransformTree& transform_tree, |
| 812 const EffectTree& effect_tree) { |
812 return LayerShouldBeSkippedInternal(layer, transform_tree, effect_tree); | 813 return LayerShouldBeSkippedInternal(layer, transform_tree, effect_tree); |
813 } | 814 } |
814 | 815 |
815 void FindLayersThatNeedUpdates(LayerTreeHost* layer_tree_host, | 816 void FindLayersThatNeedUpdates(LayerTreeHost* layer_tree_host, |
816 const PropertyTrees* property_trees, | 817 const PropertyTrees* property_trees, |
817 LayerList* update_layer_list) { | 818 LayerList* update_layer_list) { |
818 const TransformTree& transform_tree = property_trees->transform_tree; | 819 const TransformTree& transform_tree = property_trees->transform_tree; |
819 const EffectTree& effect_tree = property_trees->effect_tree; | 820 const EffectTree& effect_tree = property_trees->effect_tree; |
820 for (auto* layer : *layer_tree_host) { | 821 for (auto* layer : *layer_tree_host) { |
821 if (!IsRootLayer(layer) && | 822 if (!IsRootLayer(layer) && LayerShouldBeSkippedForDrawPropertiesComputation( |
822 LayerShouldBeSkipped(layer, transform_tree, effect_tree)) | 823 layer, transform_tree, effect_tree)) |
823 continue; | 824 continue; |
824 | 825 |
825 bool layer_is_drawn = | 826 bool layer_is_drawn = |
826 effect_tree.Node(layer->effect_tree_index())->is_drawn; | 827 effect_tree.Node(layer->effect_tree_index())->is_drawn; |
827 | 828 |
828 if (LayerNeedsUpdate(layer, layer_is_drawn, property_trees)) { | 829 if (LayerNeedsUpdate(layer, layer_is_drawn, property_trees)) { |
829 update_layer_list->push_back(layer); | 830 update_layer_list->push_back(layer); |
830 } | 831 } |
831 | 832 |
832 // Append mask layers to the update layer list. They don't have valid | 833 // Append mask layers to the update layer list. They don't have valid |
833 // visible rects, so need to get added after the above calculation. | 834 // visible rects, so need to get added after the above calculation. |
834 if (Layer* mask_layer = layer->mask_layer()) | 835 if (Layer* mask_layer = layer->mask_layer()) |
835 update_layer_list->push_back(mask_layer); | 836 update_layer_list->push_back(mask_layer); |
836 } | 837 } |
837 } | 838 } |
838 | 839 |
839 void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, | 840 void FindLayersThatNeedUpdates(LayerTreeImpl* layer_tree_impl, |
840 const PropertyTrees* property_trees, | 841 const PropertyTrees* property_trees, |
841 std::vector<LayerImpl*>* visible_layer_list) { | 842 std::vector<LayerImpl*>* visible_layer_list) { |
842 const TransformTree& transform_tree = property_trees->transform_tree; | 843 const TransformTree& transform_tree = property_trees->transform_tree; |
843 const EffectTree& effect_tree = property_trees->effect_tree; | 844 const EffectTree& effect_tree = property_trees->effect_tree; |
844 | 845 |
845 for (auto* layer_impl : *layer_tree_impl) { | 846 for (auto* layer_impl : *layer_tree_impl) { |
846 if (!IsRootLayer(layer_impl) && | 847 if (!IsRootLayer(layer_impl) && |
847 LayerShouldBeSkipped(layer_impl, transform_tree, effect_tree)) | 848 LayerShouldBeSkippedForDrawPropertiesComputation( |
| 849 layer_impl, transform_tree, effect_tree)) |
848 continue; | 850 continue; |
849 | 851 |
850 bool layer_is_drawn = | 852 bool layer_is_drawn = |
851 effect_tree.Node(layer_impl->effect_tree_index())->is_drawn; | 853 effect_tree.Node(layer_impl->effect_tree_index())->is_drawn; |
852 | 854 |
853 if (LayerNeedsUpdate(layer_impl, layer_is_drawn, property_trees)) | 855 if (LayerNeedsUpdate(layer_impl, layer_is_drawn, property_trees)) |
854 visible_layer_list->push_back(layer_impl); | 856 visible_layer_list->push_back(layer_impl); |
855 } | 857 } |
856 } | 858 } |
857 | 859 |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1089 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
1088 const Layer* overscroll_elasticity_layer, | 1090 const Layer* overscroll_elasticity_layer, |
1089 const gfx::Vector2dF& elastic_overscroll) { | 1091 const gfx::Vector2dF& elastic_overscroll) { |
1090 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1092 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
1091 elastic_overscroll); | 1093 elastic_overscroll); |
1092 } | 1094 } |
1093 | 1095 |
1094 } // namespace draw_property_utils | 1096 } // namespace draw_property_utils |
1095 | 1097 |
1096 } // namespace cc | 1098 } // namespace cc |
OLD | NEW |