OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_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> |
(...skipping 2796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2807 scroll_tree.ScrollBy(scroll_node, delta, active_tree()); | 2807 scroll_tree.ScrollBy(scroll_node, delta, active_tree()); |
2808 return false; | 2808 return false; |
2809 } | 2809 } |
2810 | 2810 |
2811 scroll_tree.set_currently_scrolling_node(scroll_node->id); | 2811 scroll_tree.set_currently_scrolling_node(scroll_node->id); |
2812 | 2812 |
2813 gfx::ScrollOffset current_offset = | 2813 gfx::ScrollOffset current_offset = |
2814 scroll_tree.current_scroll_offset(scroll_node->owner_id); | 2814 scroll_tree.current_scroll_offset(scroll_node->owner_id); |
2815 gfx::ScrollOffset target_offset = scroll_tree.ClampScrollOffsetToLimits( | 2815 gfx::ScrollOffset target_offset = scroll_tree.ClampScrollOffsetToLimits( |
2816 current_offset + gfx::ScrollOffset(delta), scroll_node); | 2816 current_offset + gfx::ScrollOffset(delta), scroll_node); |
2817 animation_host_->ImplOnlyScrollAnimationCreate(scroll_node->owner_id, | 2817 DCHECK_EQ( |
| 2818 ElementId(active_tree()->LayerById(scroll_node->owner_id)->element_id()), |
| 2819 scroll_node->data.element_id); |
| 2820 |
| 2821 animation_host_->ImplOnlyScrollAnimationCreate(scroll_node->data.element_id, |
2818 target_offset, current_offset); | 2822 target_offset, current_offset); |
2819 | 2823 |
2820 SetNeedsOneBeginImplFrame(); | 2824 SetNeedsOneBeginImplFrame(); |
2821 | 2825 |
2822 return true; | 2826 return true; |
2823 } | 2827 } |
2824 | 2828 |
2825 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( | 2829 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( |
2826 const gfx::Point& viewport_point, | 2830 const gfx::Point& viewport_point, |
2827 const gfx::Vector2dF& scroll_delta) { | 2831 const gfx::Vector2dF& scroll_delta) { |
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3833 active_tree_->max_page_scale_factor()); | 3837 active_tree_->max_page_scale_factor()); |
3834 } | 3838 } |
3835 | 3839 |
3836 void LayerTreeHostImpl::ScrollAnimationAbort(LayerImpl* layer_impl) { | 3840 void LayerTreeHostImpl::ScrollAnimationAbort(LayerImpl* layer_impl) { |
3837 return animation_host_->ScrollAnimationAbort(false /* needs_completion */); | 3841 return animation_host_->ScrollAnimationAbort(false /* needs_completion */); |
3838 } | 3842 } |
3839 | 3843 |
3840 bool LayerTreeHostImpl::ScrollAnimationUpdateTarget( | 3844 bool LayerTreeHostImpl::ScrollAnimationUpdateTarget( |
3841 ScrollNode* scroll_node, | 3845 ScrollNode* scroll_node, |
3842 const gfx::Vector2dF& scroll_delta) { | 3846 const gfx::Vector2dF& scroll_delta) { |
| 3847 DCHECK_EQ( |
| 3848 ElementId(active_tree()->LayerById(scroll_node->owner_id)->element_id()), |
| 3849 scroll_node->data.element_id); |
| 3850 |
3843 return animation_host_->ImplOnlyScrollAnimationUpdateTarget( | 3851 return animation_host_->ImplOnlyScrollAnimationUpdateTarget( |
3844 scroll_node->owner_id, scroll_delta, | 3852 scroll_node->data.element_id, scroll_delta, |
3845 active_tree_->property_trees()->scroll_tree.MaxScrollOffset( | 3853 active_tree_->property_trees()->scroll_tree.MaxScrollOffset( |
3846 scroll_node->id), | 3854 scroll_node->id), |
3847 CurrentBeginFrameArgs().frame_time); | 3855 CurrentBeginFrameArgs().frame_time); |
3848 } | 3856 } |
3849 | 3857 |
3850 bool LayerTreeHostImpl::IsElementInList(ElementId element_id, | 3858 bool LayerTreeHostImpl::IsElementInList(ElementId element_id, |
3851 ElementListType list_type) const { | 3859 ElementListType list_type) const { |
3852 if (list_type == ElementListType::ACTIVE) { | 3860 if (list_type == ElementListType::ACTIVE) { |
3853 return active_tree() ? active_tree()->LayerById(element_id) != nullptr | 3861 return active_tree() |
3854 : false; | 3862 ? active_tree()->LayerByElementId(element_id) != nullptr |
| 3863 : false; |
3855 } else { | 3864 } else { |
3856 if (pending_tree() && pending_tree()->LayerById(element_id)) | 3865 if (pending_tree() && pending_tree()->LayerByElementId(element_id)) |
3857 return true; | 3866 return true; |
3858 if (recycle_tree() && recycle_tree()->LayerById(element_id)) | 3867 if (recycle_tree() && recycle_tree()->LayerByElementId(element_id)) |
3859 return true; | 3868 return true; |
3860 | 3869 |
3861 return false; | 3870 return false; |
3862 } | 3871 } |
3863 } | 3872 } |
3864 | 3873 |
3865 void LayerTreeHostImpl::SetMutatorsNeedCommit() {} | 3874 void LayerTreeHostImpl::SetMutatorsNeedCommit() {} |
3866 | 3875 |
3867 void LayerTreeHostImpl::SetMutatorsNeedRebuildPropertyTrees() {} | 3876 void LayerTreeHostImpl::SetMutatorsNeedRebuildPropertyTrees() {} |
3868 | 3877 |
3869 void LayerTreeHostImpl::SetTreeLayerFilterMutated( | 3878 void LayerTreeHostImpl::SetTreeLayerFilterMutated( |
3870 int layer_id, | 3879 ElementId element_id, |
3871 LayerTreeImpl* tree, | 3880 LayerTreeImpl* tree, |
3872 const FilterOperations& filters) { | 3881 const FilterOperations& filters) { |
3873 if (!tree) | 3882 if (!tree) |
3874 return; | 3883 return; |
3875 | 3884 |
3876 LayerImpl* layer = tree->LayerById(layer_id); | 3885 LayerImpl* layer = tree->LayerByElementId(element_id); |
3877 if (layer) | 3886 if (layer) |
3878 layer->OnFilterAnimated(filters); | 3887 layer->OnFilterAnimated(filters); |
3879 } | 3888 } |
3880 | 3889 |
3881 void LayerTreeHostImpl::SetTreeLayerOpacityMutated(int layer_id, | 3890 void LayerTreeHostImpl::SetTreeLayerOpacityMutated(ElementId element_id, |
3882 LayerTreeImpl* tree, | 3891 LayerTreeImpl* tree, |
3883 float opacity) { | 3892 float opacity) { |
3884 if (!tree) | 3893 if (!tree) |
3885 return; | 3894 return; |
3886 | 3895 |
3887 LayerImpl* layer = tree->LayerById(layer_id); | 3896 LayerImpl* layer = tree->LayerByElementId(element_id); |
3888 if (layer) | 3897 if (layer) |
3889 layer->OnOpacityAnimated(opacity); | 3898 layer->OnOpacityAnimated(opacity); |
3890 } | 3899 } |
3891 | 3900 |
3892 void LayerTreeHostImpl::SetTreeLayerTransformMutated( | 3901 void LayerTreeHostImpl::SetTreeLayerTransformMutated( |
3893 int layer_id, | 3902 ElementId element_id, |
3894 LayerTreeImpl* tree, | 3903 LayerTreeImpl* tree, |
3895 const gfx::Transform& transform) { | 3904 const gfx::Transform& transform) { |
3896 if (!tree) | 3905 if (!tree) |
3897 return; | 3906 return; |
3898 | 3907 |
3899 LayerImpl* layer = tree->LayerById(layer_id); | 3908 LayerImpl* layer = tree->LayerByElementId(element_id); |
3900 if (layer) | 3909 if (layer) |
3901 layer->OnTransformAnimated(transform); | 3910 layer->OnTransformAnimated(transform); |
3902 } | 3911 } |
3903 | 3912 |
3904 void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( | 3913 void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( |
3905 int layer_id, | 3914 ElementId element_id, |
3906 LayerTreeImpl* tree, | 3915 LayerTreeImpl* tree, |
3907 const gfx::ScrollOffset& scroll_offset) { | 3916 const gfx::ScrollOffset& scroll_offset) { |
3908 if (!tree) | 3917 if (!tree) |
3909 return; | 3918 return; |
3910 | 3919 |
3911 LayerImpl* layer = tree->LayerById(layer_id); | 3920 LayerImpl* layer = tree->LayerByElementId(element_id); |
3912 if (layer) { | 3921 if (layer) { |
3913 layer->OnScrollOffsetAnimated(scroll_offset); | 3922 layer->OnScrollOffsetAnimated(scroll_offset); |
3914 // Run mutation callbacks to respond to updated scroll offset. | 3923 // Run mutation callbacks to respond to updated scroll offset. |
3915 Mutate(CurrentBeginFrameArgs().frame_time); | 3924 Mutate(CurrentBeginFrameArgs().frame_time); |
3916 } | 3925 } |
3917 } | 3926 } |
3918 | 3927 |
3919 bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( | 3928 bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( |
3920 const LayerImpl* layer) const { | 3929 const LayerImpl* layer) const { |
3921 return animation_host_->AnimationsPreserveAxisAlignment(layer->id()); | 3930 return animation_host_->AnimationsPreserveAxisAlignment(layer->element_id()); |
3922 } | 3931 } |
3923 | 3932 |
3924 void LayerTreeHostImpl::SetElementFilterMutated( | 3933 void LayerTreeHostImpl::SetElementFilterMutated( |
3925 ElementId element_id, | 3934 ElementId element_id, |
3926 ElementListType list_type, | 3935 ElementListType list_type, |
3927 const FilterOperations& filters) { | 3936 const FilterOperations& filters) { |
3928 if (list_type == ElementListType::ACTIVE) { | 3937 if (list_type == ElementListType::ACTIVE) { |
3929 SetTreeLayerFilterMutated(element_id, active_tree(), filters); | 3938 SetTreeLayerFilterMutated(element_id, active_tree(), filters); |
3930 } else { | 3939 } else { |
3931 SetTreeLayerFilterMutated(element_id, pending_tree(), filters); | 3940 SetTreeLayerFilterMutated(element_id, pending_tree(), filters); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3970 | 3979 |
3971 void LayerTreeHostImpl::ElementTransformIsAnimatingChanged( | 3980 void LayerTreeHostImpl::ElementTransformIsAnimatingChanged( |
3972 ElementId element_id, | 3981 ElementId element_id, |
3973 ElementListType list_type, | 3982 ElementListType list_type, |
3974 AnimationChangeType change_type, | 3983 AnimationChangeType change_type, |
3975 bool is_animating) { | 3984 bool is_animating) { |
3976 LayerTreeImpl* tree = | 3985 LayerTreeImpl* tree = |
3977 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); | 3986 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); |
3978 if (!tree) | 3987 if (!tree) |
3979 return; | 3988 return; |
3980 LayerImpl* layer = tree->LayerById(element_id); | 3989 LayerImpl* layer = tree->LayerByElementId(element_id); |
3981 if (layer) { | 3990 if (layer) { |
3982 switch (change_type) { | 3991 switch (change_type) { |
3983 case AnimationChangeType::POTENTIAL: | 3992 case AnimationChangeType::POTENTIAL: |
3984 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); | 3993 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
3985 break; | 3994 break; |
3986 case AnimationChangeType::RUNNING: | 3995 case AnimationChangeType::RUNNING: |
3987 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); | 3996 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
3988 break; | 3997 break; |
3989 case AnimationChangeType::BOTH: | 3998 case AnimationChangeType::BOTH: |
3990 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); | 3999 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
3991 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); | 4000 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
3992 break; | 4001 break; |
3993 } | 4002 } |
3994 } | 4003 } |
3995 } | 4004 } |
3996 | 4005 |
3997 void LayerTreeHostImpl::ElementOpacityIsAnimatingChanged( | 4006 void LayerTreeHostImpl::ElementOpacityIsAnimatingChanged( |
3998 ElementId element_id, | 4007 ElementId element_id, |
3999 ElementListType list_type, | 4008 ElementListType list_type, |
4000 AnimationChangeType change_type, | 4009 AnimationChangeType change_type, |
4001 bool is_animating) { | 4010 bool is_animating) { |
4002 LayerTreeImpl* tree = | 4011 LayerTreeImpl* tree = |
4003 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); | 4012 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); |
4004 if (!tree) | 4013 if (!tree) |
4005 return; | 4014 return; |
4006 LayerImpl* layer = tree->LayerById(element_id); | 4015 LayerImpl* layer = tree->LayerByElementId(element_id); |
4007 if (layer) { | 4016 if (layer) { |
4008 switch (change_type) { | 4017 switch (change_type) { |
4009 case AnimationChangeType::POTENTIAL: | 4018 case AnimationChangeType::POTENTIAL: |
4010 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); | 4019 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
4011 break; | 4020 break; |
4012 case AnimationChangeType::RUNNING: | 4021 case AnimationChangeType::RUNNING: |
4013 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); | 4022 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
4014 break; | 4023 break; |
4015 case AnimationChangeType::BOTH: | 4024 case AnimationChangeType::BOTH: |
4016 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); | 4025 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
4017 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); | 4026 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
4018 break; | 4027 break; |
4019 } | 4028 } |
4020 } | 4029 } |
4021 } | 4030 } |
4022 | 4031 |
4023 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { | 4032 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { |
4024 // TODO(majidvp): We should pass in the original starting scroll position here | 4033 // TODO(majidvp): We should pass in the original starting scroll position here |
4025 ScrollStateData scroll_state_data; | 4034 ScrollStateData scroll_state_data; |
4026 ScrollState scroll_state(scroll_state_data); | 4035 ScrollState scroll_state(scroll_state_data); |
4027 ScrollEnd(&scroll_state); | 4036 ScrollEnd(&scroll_state); |
4028 } | 4037 } |
4029 | 4038 |
4030 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( | 4039 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( |
4031 ElementId element_id) const { | 4040 ElementId element_id) const { |
4032 if (active_tree()) { | 4041 if (active_tree()) { |
4033 LayerImpl* layer = active_tree()->LayerById(element_id); | 4042 LayerImpl* layer = active_tree()->LayerByElementId(element_id); |
4034 if (layer) | 4043 if (layer) |
4035 return layer->ScrollOffsetForAnimation(); | 4044 return layer->ScrollOffsetForAnimation(); |
4036 } | 4045 } |
4037 | 4046 |
4038 return gfx::ScrollOffset(); | 4047 return gfx::ScrollOffset(); |
4039 } | 4048 } |
4040 | 4049 |
4041 bool LayerTreeHostImpl::SupportsImplScrolling() const { | 4050 bool LayerTreeHostImpl::SupportsImplScrolling() const { |
4042 // Supported in threaded mode. | 4051 // Supported in threaded mode. |
4043 return task_runner_provider_->HasImplThread(); | 4052 return task_runner_provider_->HasImplThread(); |
4044 } | 4053 } |
4045 | 4054 |
4046 bool LayerTreeHostImpl::CommitToActiveTree() const { | 4055 bool LayerTreeHostImpl::CommitToActiveTree() const { |
4047 // In single threaded mode we skip the pending tree and commit directly to the | 4056 // In single threaded mode we skip the pending tree and commit directly to the |
4048 // active tree. | 4057 // active tree. |
4049 return !task_runner_provider_->HasImplThread(); | 4058 return !task_runner_provider_->HasImplThread(); |
4050 } | 4059 } |
4051 | 4060 |
4052 bool LayerTreeHostImpl::HasFixedRasterScalePotentialPerformanceRegression() | 4061 bool LayerTreeHostImpl::HasFixedRasterScalePotentialPerformanceRegression() |
4053 const { | 4062 const { |
4054 return fixed_raster_scale_attempted_scale_change_history_.count() >= | 4063 return fixed_raster_scale_attempted_scale_change_history_.count() >= |
4055 kFixedRasterScaleAttemptedScaleChangeThreshold; | 4064 kFixedRasterScaleAttemptedScaleChangeThreshold; |
4056 } | 4065 } |
4057 | 4066 |
4058 void LayerTreeHostImpl::SetFixedRasterScaleAttemptedToChangeScale() { | 4067 void LayerTreeHostImpl::SetFixedRasterScaleAttemptedToChangeScale() { |
4059 fixed_raster_scale_attempted_scale_change_history_.set(0); | 4068 fixed_raster_scale_attempted_scale_change_history_.set(0); |
4060 } | 4069 } |
4061 | 4070 |
4062 } // namespace cc | 4071 } // namespace cc |
OLD | NEW |