| 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 |