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