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