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