OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
11 #include <utility> | 11 #include <utility> |
12 | 12 |
13 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" |
14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
15 #include "base/numerics/safe_conversions.h" | 15 #include "base/numerics/safe_conversions.h" |
16 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
17 #include "base/trace_event/trace_event.h" | 17 #include "base/trace_event/trace_event.h" |
18 #include "base/trace_event/trace_event_argument.h" | 18 #include "base/trace_event/trace_event_argument.h" |
| 19 #include "cc/animation/animation_host.h" |
19 #include "cc/animation/mutable_properties.h" | 20 #include "cc/animation/mutable_properties.h" |
20 #include "cc/base/math_util.h" | 21 #include "cc/base/math_util.h" |
21 #include "cc/base/simple_enclosed_region.h" | 22 #include "cc/base/simple_enclosed_region.h" |
22 #include "cc/debug/debug_colors.h" | 23 #include "cc/debug/debug_colors.h" |
23 #include "cc/debug/layer_tree_debug_state.h" | 24 #include "cc/debug/layer_tree_debug_state.h" |
24 #include "cc/debug/micro_benchmark_impl.h" | 25 #include "cc/debug/micro_benchmark_impl.h" |
25 #include "cc/debug/traced_value.h" | 26 #include "cc/debug/traced_value.h" |
26 #include "cc/input/main_thread_scrolling_reason.h" | 27 #include "cc/input/main_thread_scrolling_reason.h" |
27 #include "cc/input/scroll_state.h" | 28 #include "cc/input/scroll_state.h" |
28 #include "cc/layers/layer.h" | 29 #include "cc/layers/layer.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 layer_tree_impl_->RemoveFromElementMap(this); | 101 layer_tree_impl_->RemoveFromElementMap(this); |
101 | 102 |
102 TRACE_EVENT_OBJECT_DELETED_WITH_ID( | 103 TRACE_EVENT_OBJECT_DELETED_WITH_ID( |
103 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerImpl", this); | 104 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerImpl", this); |
104 } | 105 } |
105 | 106 |
106 void LayerImpl::SetHasWillChangeTransformHint(bool has_will_change) { | 107 void LayerImpl::SetHasWillChangeTransformHint(bool has_will_change) { |
107 has_will_change_transform_hint_ = has_will_change; | 108 has_will_change_transform_hint_ = has_will_change; |
108 } | 109 } |
109 | 110 |
| 111 AnimationHost* LayerImpl::GetAnimationHost() const { |
| 112 return layer_tree_impl_ ? layer_tree_impl_->animation_host() : nullptr; |
| 113 } |
| 114 |
| 115 ElementListType LayerImpl::GetElementTypeForAnimation() const { |
| 116 return IsActive() ? ElementListType::ACTIVE : ElementListType::PENDING; |
| 117 } |
| 118 |
110 void LayerImpl::SetDebugInfo( | 119 void LayerImpl::SetDebugInfo( |
111 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> debug_info) { | 120 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> debug_info) { |
112 owned_debug_info_ = std::move(debug_info); | 121 owned_debug_info_ = std::move(debug_info); |
113 debug_info_ = owned_debug_info_.get(); | 122 debug_info_ = owned_debug_info_.get(); |
114 SetNeedsPushProperties(); | 123 SetNeedsPushProperties(); |
115 } | 124 } |
116 | 125 |
117 void LayerImpl::DistributeScroll(ScrollState* scroll_state) { | 126 void LayerImpl::DistributeScroll(ScrollState* scroll_state) { |
118 DCHECK(scroll_state); | 127 DCHECK(scroll_state); |
119 if (scroll_state->FullyConsumed()) | 128 if (scroll_state->FullyConsumed()) |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 if (SkColorGetA(color) == 255) | 775 if (SkColorGetA(color) == 255) |
767 color = SK_ColorTRANSPARENT; | 776 color = SK_ColorTRANSPARENT; |
768 return color; | 777 return color; |
769 } | 778 } |
770 | 779 |
771 void LayerImpl::SetFilters(const FilterOperations& filters) { | 780 void LayerImpl::SetFilters(const FilterOperations& filters) { |
772 filters_ = filters; | 781 filters_ = filters; |
773 } | 782 } |
774 | 783 |
775 bool LayerImpl::FilterIsAnimating() const { | 784 bool LayerImpl::FilterIsAnimating() const { |
776 return layer_tree_impl_->IsAnimatingFilterProperty(this); | 785 return GetAnimationHost()->IsAnimatingFilterProperty( |
| 786 element_id(), GetElementTypeForAnimation()); |
777 } | 787 } |
778 | 788 |
779 bool LayerImpl::HasPotentiallyRunningFilterAnimation() const { | 789 bool LayerImpl::HasPotentiallyRunningFilterAnimation() const { |
780 return layer_tree_impl_->HasPotentiallyRunningFilterAnimation(this); | 790 return GetAnimationHost()->HasPotentiallyRunningFilterAnimation( |
| 791 element_id(), GetElementTypeForAnimation()); |
781 } | 792 } |
782 | 793 |
783 void LayerImpl::SetMasksToBounds(bool masks_to_bounds) { | 794 void LayerImpl::SetMasksToBounds(bool masks_to_bounds) { |
784 masks_to_bounds_ = masks_to_bounds; | 795 masks_to_bounds_ = masks_to_bounds; |
785 } | 796 } |
786 | 797 |
787 void LayerImpl::SetContentsOpaque(bool opaque) { | 798 void LayerImpl::SetContentsOpaque(bool opaque) { |
788 contents_opaque_ = opaque; | 799 contents_opaque_ = opaque; |
789 } | 800 } |
790 | 801 |
791 float LayerImpl::Opacity() const { | 802 float LayerImpl::Opacity() const { |
792 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); | 803 PropertyTrees* property_trees = layer_tree_impl()->property_trees(); |
793 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 804 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) |
794 return 1.f; | 805 return 1.f; |
795 EffectNode* node = property_trees->effect_tree.Node( | 806 EffectNode* node = property_trees->effect_tree.Node( |
796 property_trees->effect_id_to_index_map[id()]); | 807 property_trees->effect_id_to_index_map[id()]); |
797 return node->opacity; | 808 return node->opacity; |
798 } | 809 } |
799 | 810 |
800 bool LayerImpl::OpacityIsAnimating() const { | |
801 return layer_tree_impl_->IsAnimatingOpacityProperty(this); | |
802 } | |
803 | |
804 bool LayerImpl::HasPotentiallyRunningOpacityAnimation() const { | |
805 return layer_tree_impl_->HasPotentiallyRunningOpacityAnimation(this); | |
806 } | |
807 | |
808 void LayerImpl::SetElementId(ElementId element_id) { | 811 void LayerImpl::SetElementId(ElementId element_id) { |
809 if (element_id == element_id_) | 812 if (element_id == element_id_) |
810 return; | 813 return; |
811 | 814 |
812 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), | 815 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), |
813 "LayerImpl::SetElementId", "element", | 816 "LayerImpl::SetElementId", "element", |
814 element_id.AsValue().release()); | 817 element_id.AsValue().release()); |
815 | 818 |
816 layer_tree_impl_->RemoveFromElementMap(this); | 819 layer_tree_impl_->RemoveFromElementMap(this); |
817 element_id_ = element_id; | 820 element_id_ = element_id; |
(...skipping 24 matching lines...) Expand all Loading... |
842 | 845 |
843 void LayerImpl::Set3dSortingContextId(int id) { | 846 void LayerImpl::Set3dSortingContextId(int id) { |
844 sorting_context_id_ = id; | 847 sorting_context_id_ = id; |
845 } | 848 } |
846 | 849 |
847 void LayerImpl::SetTransform(const gfx::Transform& transform) { | 850 void LayerImpl::SetTransform(const gfx::Transform& transform) { |
848 transform_ = transform; | 851 transform_ = transform; |
849 } | 852 } |
850 | 853 |
851 bool LayerImpl::TransformIsAnimating() const { | 854 bool LayerImpl::TransformIsAnimating() const { |
852 return layer_tree_impl_->IsAnimatingTransformProperty(this); | 855 return GetAnimationHost()->IsAnimatingTransformProperty( |
| 856 element_id(), GetElementTypeForAnimation()); |
853 } | 857 } |
854 | 858 |
855 bool LayerImpl::HasPotentiallyRunningTransformAnimation() const { | 859 bool LayerImpl::HasPotentiallyRunningTransformAnimation() const { |
856 return layer_tree_impl_->HasPotentiallyRunningTransformAnimation(this); | 860 return GetAnimationHost()->HasPotentiallyRunningTransformAnimation( |
| 861 element_id(), GetElementTypeForAnimation()); |
857 } | 862 } |
858 | 863 |
859 bool LayerImpl::HasOnlyTranslationTransforms() const { | 864 bool LayerImpl::HasOnlyTranslationTransforms() const { |
860 return layer_tree_impl_->HasOnlyTranslationTransforms(this); | 865 return GetAnimationHost()->HasOnlyTranslationTransforms( |
861 } | 866 element_id(), GetElementTypeForAnimation()); |
862 | |
863 bool LayerImpl::AnimationsPreserveAxisAlignment() const { | |
864 return layer_tree_impl_->AnimationsPreserveAxisAlignment(this); | |
865 } | |
866 | |
867 bool LayerImpl::MaximumTargetScale(float* max_scale) const { | |
868 return layer_tree_impl_->MaximumTargetScale(this, max_scale); | |
869 } | |
870 | |
871 bool LayerImpl::AnimationStartScale(float* start_scale) const { | |
872 return layer_tree_impl_->AnimationStartScale(this, start_scale); | |
873 } | 867 } |
874 | 868 |
875 bool LayerImpl::HasAnyAnimationTargetingProperty( | 869 bool LayerImpl::HasAnyAnimationTargetingProperty( |
876 TargetProperty::Type property) const { | 870 TargetProperty::Type property) const { |
877 return layer_tree_impl_->HasAnyAnimationTargetingProperty(this, property); | 871 return GetAnimationHost()->HasAnyAnimationTargetingProperty(element_id(), |
| 872 property); |
878 } | 873 } |
879 | 874 |
880 bool LayerImpl::HasFilterAnimationThatInflatesBounds() const { | 875 bool LayerImpl::HasFilterAnimationThatInflatesBounds() const { |
881 return layer_tree_impl_->HasFilterAnimationThatInflatesBounds(this); | 876 return GetAnimationHost()->HasFilterAnimationThatInflatesBounds(element_id()); |
882 } | 877 } |
883 | 878 |
884 bool LayerImpl::HasTransformAnimationThatInflatesBounds() const { | 879 bool LayerImpl::HasTransformAnimationThatInflatesBounds() const { |
885 return layer_tree_impl_->HasTransformAnimationThatInflatesBounds(this); | 880 return GetAnimationHost()->HasTransformAnimationThatInflatesBounds( |
| 881 element_id()); |
886 } | 882 } |
887 | 883 |
888 bool LayerImpl::HasAnimationThatInflatesBounds() const { | 884 bool LayerImpl::HasAnimationThatInflatesBounds() const { |
889 return layer_tree_impl_->HasAnimationThatInflatesBounds(this); | 885 return GetAnimationHost()->HasAnimationThatInflatesBounds(element_id()); |
890 } | 886 } |
891 | 887 |
892 bool LayerImpl::FilterAnimationBoundsForBox(const gfx::BoxF& box, | 888 bool LayerImpl::FilterAnimationBoundsForBox(const gfx::BoxF& box, |
893 gfx::BoxF* bounds) const { | 889 gfx::BoxF* bounds) const { |
894 return layer_tree_impl_->FilterAnimationBoundsForBox(this, box, bounds); | 890 return GetAnimationHost()->FilterAnimationBoundsForBox(element_id(), box, |
| 891 bounds); |
895 } | 892 } |
896 | 893 |
897 bool LayerImpl::TransformAnimationBoundsForBox(const gfx::BoxF& box, | 894 bool LayerImpl::TransformAnimationBoundsForBox(const gfx::BoxF& box, |
898 gfx::BoxF* bounds) const { | 895 gfx::BoxF* bounds) const { |
899 return layer_tree_impl_->TransformAnimationBoundsForBox(this, box, bounds); | 896 return GetAnimationHost()->TransformAnimationBoundsForBox(element_id(), box, |
| 897 bounds); |
900 } | 898 } |
901 | 899 |
902 void LayerImpl::SetUpdateRect(const gfx::Rect& update_rect) { | 900 void LayerImpl::SetUpdateRect(const gfx::Rect& update_rect) { |
903 update_rect_ = update_rect; | 901 update_rect_ = update_rect; |
904 SetNeedsPushProperties(); | 902 SetNeedsPushProperties(); |
905 } | 903 } |
906 | 904 |
907 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { | 905 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { |
908 damage_rect_.Union(damage_rect); | 906 damage_rect_.Union(damage_rect); |
909 } | 907 } |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 } | 1018 } |
1021 if (!non_fast_scrollable_region_.IsEmpty()) { | 1019 if (!non_fast_scrollable_region_.IsEmpty()) { |
1022 state->BeginArray("non_fast_scrollable_region"); | 1020 state->BeginArray("non_fast_scrollable_region"); |
1023 non_fast_scrollable_region_.AsValueInto(state); | 1021 non_fast_scrollable_region_.AsValueInto(state); |
1024 state->EndArray(); | 1022 state->EndArray(); |
1025 } | 1023 } |
1026 | 1024 |
1027 state->SetBoolean("can_use_lcd_text", CanUseLCDText()); | 1025 state->SetBoolean("can_use_lcd_text", CanUseLCDText()); |
1028 state->SetBoolean("contents_opaque", contents_opaque()); | 1026 state->SetBoolean("contents_opaque", contents_opaque()); |
1029 | 1027 |
1030 state->SetBoolean("has_animation_bounds", | 1028 state->SetBoolean("has_animation_bounds", HasAnimationThatInflatesBounds()); |
1031 layer_tree_impl_->HasAnimationThatInflatesBounds(this)); | |
1032 | 1029 |
1033 state->SetBoolean("has_will_change_transform_hint", | 1030 state->SetBoolean("has_will_change_transform_hint", |
1034 has_will_change_transform_hint()); | 1031 has_will_change_transform_hint()); |
1035 | 1032 |
1036 gfx::BoxF box; | 1033 gfx::BoxF box; |
1037 if (LayerUtils::GetAnimationBounds(*this, &box)) | 1034 if (LayerUtils::GetAnimationBounds(*this, &box)) |
1038 MathUtil::AddToTracedValue("animation_bounds", box, state); | 1035 MathUtil::AddToTracedValue("animation_bounds", box, state); |
1039 | 1036 |
1040 if (debug_info_) { | 1037 if (debug_info_) { |
1041 std::string str; | 1038 std::string str; |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1198 .layer_transforms_should_scale_layer_contents) { | 1195 .layer_transforms_should_scale_layer_contents) { |
1199 return default_scale; | 1196 return default_scale; |
1200 } | 1197 } |
1201 | 1198 |
1202 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1199 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
1203 ScreenSpaceTransform(), default_scale); | 1200 ScreenSpaceTransform(), default_scale); |
1204 return std::max(transform_scales.x(), transform_scales.y()); | 1201 return std::max(transform_scales.x(), transform_scales.y()); |
1205 } | 1202 } |
1206 | 1203 |
1207 } // namespace cc | 1204 } // namespace cc |
OLD | NEW |