Chromium Code Reviews| 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/property_tree_builder.h" | 5 #include "cc/trees/property_tree_builder.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 760 } | 760 } |
| 761 | 761 |
| 762 static inline float Opacity(Layer* layer) { | 762 static inline float Opacity(Layer* layer) { |
| 763 return layer->opacity(); | 763 return layer->opacity(); |
| 764 } | 764 } |
| 765 | 765 |
| 766 static inline float Opacity(LayerImpl* layer) { | 766 static inline float Opacity(LayerImpl* layer) { |
| 767 return layer->test_properties()->opacity; | 767 return layer->test_properties()->opacity; |
| 768 } | 768 } |
| 769 | 769 |
| 770 static inline const FilterOperations& Filters(Layer* layer) { | |
| 771 return layer->filters(); | |
| 772 } | |
| 773 | |
| 774 static inline const FilterOperations& Filters(LayerImpl* layer) { | |
| 775 return layer->test_properties()->filters; | |
| 776 } | |
| 777 | |
| 770 static inline const FilterOperations& BackgroundFilters(Layer* layer) { | 778 static inline const FilterOperations& BackgroundFilters(Layer* layer) { |
| 771 return layer->background_filters(); | 779 return layer->background_filters(); |
| 772 } | 780 } |
| 773 | 781 |
| 774 static inline const FilterOperations& BackgroundFilters(LayerImpl* layer) { | 782 static inline const FilterOperations& BackgroundFilters(LayerImpl* layer) { |
| 775 return layer->test_properties()->background_filters; | 783 return layer->test_properties()->background_filters; |
| 776 } | 784 } |
| 777 | 785 |
| 778 static inline bool HideLayerAndSubtree(Layer* layer) { | 786 static inline bool HideLayerAndSubtree(Layer* layer) { |
| 779 return layer->hide_layer_and_subtree(); | 787 return layer->hide_layer_and_subtree(); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 815 if (MaskLayer(layer) && ReplicaLayer(Parent(layer)) != layer) { | 823 if (MaskLayer(layer) && ReplicaLayer(Parent(layer)) != layer) { |
| 816 return true; | 824 return true; |
| 817 } | 825 } |
| 818 | 826 |
| 819 // If the layer has a reflection. | 827 // If the layer has a reflection. |
| 820 if (ReplicaLayer(layer)) { | 828 if (ReplicaLayer(layer)) { |
| 821 return true; | 829 return true; |
| 822 } | 830 } |
| 823 | 831 |
| 824 // If the layer uses a CSS filter. | 832 // If the layer uses a CSS filter. |
| 825 if (!layer->filters().IsEmpty() || !BackgroundFilters(layer).IsEmpty()) { | 833 if (!Filters(layer).IsEmpty() || !BackgroundFilters(layer).IsEmpty()) { |
| 826 return true; | 834 return true; |
| 827 } | 835 } |
| 828 | 836 |
| 829 // If the layer will use a CSS filter. In this case, the animation | 837 // If the layer will use a CSS filter. In this case, the animation |
| 830 // will start and add a filter to this layer, so it needs a surface. | 838 // will start and add a filter to this layer, so it needs a surface. |
| 831 if (HasPotentiallyRunningFilterAnimation(layer)) { | 839 if (HasPotentiallyRunningFilterAnimation(layer)) { |
| 832 return true; | 840 return true; |
| 833 } | 841 } |
| 834 | 842 |
| 835 int num_descendants_that_draw_content = NumDescendantsThatDrawContent(layer); | 843 int num_descendants_that_draw_content = NumDescendantsThatDrawContent(layer); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 921 | 929 |
| 922 template <typename LayerType> | 930 template <typename LayerType> |
| 923 bool AddEffectNodeIfNeeded( | 931 bool AddEffectNodeIfNeeded( |
| 924 const DataForRecursion<LayerType>& data_from_ancestor, | 932 const DataForRecursion<LayerType>& data_from_ancestor, |
| 925 LayerType* layer, | 933 LayerType* layer, |
| 926 DataForRecursion<LayerType>* data_for_children) { | 934 DataForRecursion<LayerType>* data_for_children) { |
| 927 const bool is_root = !Parent(layer); | 935 const bool is_root = !Parent(layer); |
| 928 const bool has_transparency = EffectiveOpacity(layer) != 1.f; | 936 const bool has_transparency = EffectiveOpacity(layer) != 1.f; |
| 929 const bool has_potential_opacity_animation = | 937 const bool has_potential_opacity_animation = |
| 930 HasPotentialOpacityAnimation(layer); | 938 HasPotentialOpacityAnimation(layer); |
| 939 const bool has_potential_filter_animation = | |
| 940 HasPotentiallyRunningFilterAnimation(layer); | |
| 931 const bool should_create_render_surface = ShouldCreateRenderSurface( | 941 const bool should_create_render_surface = ShouldCreateRenderSurface( |
| 932 layer, data_from_ancestor.compound_transform_since_render_target, | 942 layer, data_from_ancestor.compound_transform_since_render_target, |
| 933 data_from_ancestor.axis_align_since_render_target); | 943 data_from_ancestor.axis_align_since_render_target); |
| 934 data_for_children->axis_align_since_render_target &= | 944 data_for_children->axis_align_since_render_target &= |
| 935 AnimationsPreserveAxisAlignment(layer); | 945 AnimationsPreserveAxisAlignment(layer); |
| 936 | 946 |
| 937 bool requires_node = is_root || has_transparency || | 947 bool requires_node = |
| 938 has_potential_opacity_animation || | 948 is_root || has_transparency || has_potential_opacity_animation || |
| 939 should_create_render_surface; | 949 has_potential_filter_animation || should_create_render_surface; |
|
jaydasika
2016/07/20 20:53:06
Is this condition required ? Doesn't has_potential
ajuma
2016/07/21 16:42:18
Done. (It's surprising that has_potential_opacity_
jaydasika
2016/07/21 17:22:35
It sounds like a bug to me. For the case, current
ajuma
2016/07/21 18:49:41
Yeah, it's a bug. I'll fix it in a separate CL.
I
| |
| 940 | 950 |
| 941 int parent_id = data_from_ancestor.effect_tree_parent; | 951 int parent_id = data_from_ancestor.effect_tree_parent; |
| 942 | 952 |
| 943 if (!requires_node) { | 953 if (!requires_node) { |
| 944 layer->SetEffectTreeIndex(parent_id); | 954 layer->SetEffectTreeIndex(parent_id); |
| 945 data_for_children->effect_tree_parent = parent_id; | 955 data_for_children->effect_tree_parent = parent_id; |
| 946 data_for_children->compound_transform_since_render_target *= | 956 data_for_children->compound_transform_since_render_target *= |
| 947 layer->transform(); | 957 layer->transform(); |
| 948 return false; | 958 return false; |
| 949 } | 959 } |
| 950 | 960 |
| 951 EffectNode node; | 961 EffectNode node; |
| 952 node.owner_id = layer->id(); | 962 node.owner_id = layer->id(); |
| 953 if (AlwaysUseActiveTreeOpacity(layer)) { | 963 if (AlwaysUseActiveTreeOpacity(layer)) { |
| 954 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids | 964 data_for_children->property_trees->always_use_active_tree_opacity_effect_ids |
| 955 .push_back(node.owner_id); | 965 .push_back(node.owner_id); |
| 956 } | 966 } |
| 957 | 967 |
| 958 node.opacity = Opacity(layer); | 968 node.opacity = Opacity(layer); |
| 959 node.has_render_surface = should_create_render_surface; | 969 node.has_render_surface = should_create_render_surface; |
| 960 node.has_copy_request = HasCopyRequest(layer); | 970 node.has_copy_request = HasCopyRequest(layer); |
| 971 node.filters = Filters(layer); | |
|
weiliangc
2016/07/21 01:06:38
This would make a copy of the Filter owned by Laye
ajuma
2016/07/21 16:42:18
If we transfer ownership rather than copying, we'l
| |
| 961 node.background_filters = BackgroundFilters(layer); | 972 node.background_filters = BackgroundFilters(layer); |
| 962 node.has_potential_opacity_animation = has_potential_opacity_animation; | 973 node.has_potential_opacity_animation = has_potential_opacity_animation; |
| 974 node.has_potential_filter_animation = has_potential_filter_animation; | |
| 963 node.double_sided = DoubleSided(layer); | 975 node.double_sided = DoubleSided(layer); |
| 964 node.subtree_hidden = HideLayerAndSubtree(layer); | 976 node.subtree_hidden = HideLayerAndSubtree(layer); |
| 965 node.is_currently_animating_opacity = OpacityIsAnimating(layer); | 977 node.is_currently_animating_opacity = OpacityIsAnimating(layer); |
| 978 node.is_currently_animating_filter = FilterIsAnimating(layer); | |
| 966 | 979 |
| 967 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; | 980 EffectTree& effect_tree = data_for_children->property_trees->effect_tree; |
| 968 if (MaskLayer(layer)) { | 981 if (MaskLayer(layer)) { |
| 969 node.mask_layer_id = MaskLayer(layer)->id(); | 982 node.mask_layer_id = MaskLayer(layer)->id(); |
| 970 effect_tree.AddMaskOrReplicaLayerId(node.mask_layer_id); | 983 effect_tree.AddMaskOrReplicaLayerId(node.mask_layer_id); |
| 971 } | 984 } |
| 972 if (ReplicaLayer(layer)) { | 985 if (ReplicaLayer(layer)) { |
| 973 node.replica_layer_id = ReplicaLayer(layer)->id(); | 986 node.replica_layer_id = ReplicaLayer(layer)->id(); |
| 974 effect_tree.AddMaskOrReplicaLayerId(node.replica_layer_id); | 987 effect_tree.AddMaskOrReplicaLayerId(node.replica_layer_id); |
| 975 if (MaskLayer(ReplicaLayer(layer))) { | 988 if (MaskLayer(ReplicaLayer(layer))) { |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1439 color = SkColorSetA(color, 255); | 1452 color = SkColorSetA(color, 255); |
| 1440 BuildPropertyTreesTopLevelInternal( | 1453 BuildPropertyTreesTopLevelInternal( |
| 1441 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1454 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 1442 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1455 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 1443 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1456 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 1444 device_transform, property_trees, color); | 1457 device_transform, property_trees, color); |
| 1445 property_trees->ResetCachedData(); | 1458 property_trees->ResetCachedData(); |
| 1446 } | 1459 } |
| 1447 | 1460 |
| 1448 } // namespace cc | 1461 } // namespace cc |
| OLD | NEW |