| 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 2768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2779 scroll_tree.ScrollBy(scroll_node, delta, active_tree()); | 2779 scroll_tree.ScrollBy(scroll_node, delta, active_tree()); |
| 2780 return false; | 2780 return false; |
| 2781 } | 2781 } |
| 2782 | 2782 |
| 2783 scroll_tree.set_currently_scrolling_node(scroll_node->id); | 2783 scroll_tree.set_currently_scrolling_node(scroll_node->id); |
| 2784 | 2784 |
| 2785 gfx::ScrollOffset current_offset = | 2785 gfx::ScrollOffset current_offset = |
| 2786 scroll_tree.current_scroll_offset(scroll_node->owner_id); | 2786 scroll_tree.current_scroll_offset(scroll_node->owner_id); |
| 2787 gfx::ScrollOffset target_offset = scroll_tree.ClampScrollOffsetToLimits( | 2787 gfx::ScrollOffset target_offset = scroll_tree.ClampScrollOffsetToLimits( |
| 2788 current_offset + gfx::ScrollOffset(delta), scroll_node); | 2788 current_offset + gfx::ScrollOffset(delta), scroll_node); |
| 2789 animation_host_->ImplOnlyScrollAnimationCreate(scroll_node->owner_id, | 2789 DCHECK_EQ( |
| 2790 ElementId(active_tree()->LayerById(scroll_node->owner_id)->element_id()), |
| 2791 scroll_node->data.element_id); |
| 2792 |
| 2793 animation_host_->ImplOnlyScrollAnimationCreate(scroll_node->data.element_id, |
| 2790 target_offset, current_offset); | 2794 target_offset, current_offset); |
| 2791 | 2795 |
| 2792 SetNeedsOneBeginImplFrame(); | 2796 SetNeedsOneBeginImplFrame(); |
| 2793 | 2797 |
| 2794 return true; | 2798 return true; |
| 2795 } | 2799 } |
| 2796 | 2800 |
| 2797 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( | 2801 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( |
| 2798 const gfx::Point& viewport_point, | 2802 const gfx::Point& viewport_point, |
| 2799 const gfx::Vector2dF& scroll_delta) { | 2803 const gfx::Vector2dF& scroll_delta) { |
| (...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3798 active_tree_->max_page_scale_factor()); | 3802 active_tree_->max_page_scale_factor()); |
| 3799 } | 3803 } |
| 3800 | 3804 |
| 3801 void LayerTreeHostImpl::ScrollAnimationAbort(LayerImpl* layer_impl) { | 3805 void LayerTreeHostImpl::ScrollAnimationAbort(LayerImpl* layer_impl) { |
| 3802 return animation_host_->ScrollAnimationAbort(false /* needs_completion */); | 3806 return animation_host_->ScrollAnimationAbort(false /* needs_completion */); |
| 3803 } | 3807 } |
| 3804 | 3808 |
| 3805 bool LayerTreeHostImpl::ScrollAnimationUpdateTarget( | 3809 bool LayerTreeHostImpl::ScrollAnimationUpdateTarget( |
| 3806 ScrollNode* scroll_node, | 3810 ScrollNode* scroll_node, |
| 3807 const gfx::Vector2dF& scroll_delta) { | 3811 const gfx::Vector2dF& scroll_delta) { |
| 3812 DCHECK_EQ( |
| 3813 ElementId(active_tree()->LayerById(scroll_node->owner_id)->element_id()), |
| 3814 scroll_node->data.element_id); |
| 3815 |
| 3808 return animation_host_->ImplOnlyScrollAnimationUpdateTarget( | 3816 return animation_host_->ImplOnlyScrollAnimationUpdateTarget( |
| 3809 scroll_node->owner_id, scroll_delta, | 3817 scroll_node->data.element_id, scroll_delta, |
| 3810 active_tree_->property_trees()->scroll_tree.MaxScrollOffset( | 3818 active_tree_->property_trees()->scroll_tree.MaxScrollOffset( |
| 3811 scroll_node->id), | 3819 scroll_node->id), |
| 3812 CurrentBeginFrameArgs().frame_time); | 3820 CurrentBeginFrameArgs().frame_time); |
| 3813 } | 3821 } |
| 3814 | 3822 |
| 3815 bool LayerTreeHostImpl::IsElementInList(ElementId element_id, | 3823 bool LayerTreeHostImpl::IsElementInList(ElementId element_id, |
| 3816 ElementListType list_type) const { | 3824 ElementListType list_type) const { |
| 3817 if (list_type == ElementListType::ACTIVE) { | 3825 if (list_type == ElementListType::ACTIVE) { |
| 3818 return active_tree() ? active_tree()->LayerById(element_id) != nullptr | 3826 return active_tree() |
| 3819 : false; | 3827 ? active_tree()->LayerByElementId(element_id) != nullptr |
| 3828 : false; |
| 3820 } else { | 3829 } else { |
| 3821 if (pending_tree() && pending_tree()->LayerById(element_id)) | 3830 if (pending_tree() && pending_tree()->LayerByElementId(element_id)) |
| 3822 return true; | 3831 return true; |
| 3823 if (recycle_tree() && recycle_tree()->LayerById(element_id)) | 3832 if (recycle_tree() && recycle_tree()->LayerByElementId(element_id)) |
| 3824 return true; | 3833 return true; |
| 3825 | 3834 |
| 3826 return false; | 3835 return false; |
| 3827 } | 3836 } |
| 3828 } | 3837 } |
| 3829 | 3838 |
| 3830 void LayerTreeHostImpl::SetMutatorsNeedCommit() {} | 3839 void LayerTreeHostImpl::SetMutatorsNeedCommit() {} |
| 3831 | 3840 |
| 3832 void LayerTreeHostImpl::SetMutatorsNeedRebuildPropertyTrees() {} | 3841 void LayerTreeHostImpl::SetMutatorsNeedRebuildPropertyTrees() {} |
| 3833 | 3842 |
| 3834 void LayerTreeHostImpl::SetTreeLayerFilterMutated( | 3843 void LayerTreeHostImpl::SetTreeLayerFilterMutated( |
| 3835 int layer_id, | 3844 ElementId element_id, |
| 3836 LayerTreeImpl* tree, | 3845 LayerTreeImpl* tree, |
| 3837 const FilterOperations& filters) { | 3846 const FilterOperations& filters) { |
| 3838 if (!tree) | 3847 if (!tree) |
| 3839 return; | 3848 return; |
| 3840 | 3849 |
| 3841 LayerImpl* layer = tree->LayerById(layer_id); | 3850 LayerImpl* layer = tree->LayerByElementId(element_id); |
| 3842 if (layer) | 3851 if (layer) |
| 3843 layer->OnFilterAnimated(filters); | 3852 layer->OnFilterAnimated(filters); |
| 3844 } | 3853 } |
| 3845 | 3854 |
| 3846 void LayerTreeHostImpl::SetTreeLayerOpacityMutated(int layer_id, | 3855 void LayerTreeHostImpl::SetTreeLayerOpacityMutated(ElementId element_id, |
| 3847 LayerTreeImpl* tree, | 3856 LayerTreeImpl* tree, |
| 3848 float opacity) { | 3857 float opacity) { |
| 3849 if (!tree) | 3858 if (!tree) |
| 3850 return; | 3859 return; |
| 3851 | 3860 |
| 3852 LayerImpl* layer = tree->LayerById(layer_id); | 3861 LayerImpl* layer = tree->LayerByElementId(element_id); |
| 3853 if (layer) | 3862 if (layer) |
| 3854 layer->OnOpacityAnimated(opacity); | 3863 layer->OnOpacityAnimated(opacity); |
| 3855 } | 3864 } |
| 3856 | 3865 |
| 3857 void LayerTreeHostImpl::SetTreeLayerTransformMutated( | 3866 void LayerTreeHostImpl::SetTreeLayerTransformMutated( |
| 3858 int layer_id, | 3867 ElementId element_id, |
| 3859 LayerTreeImpl* tree, | 3868 LayerTreeImpl* tree, |
| 3860 const gfx::Transform& transform) { | 3869 const gfx::Transform& transform) { |
| 3861 if (!tree) | 3870 if (!tree) |
| 3862 return; | 3871 return; |
| 3863 | 3872 |
| 3864 LayerImpl* layer = tree->LayerById(layer_id); | 3873 LayerImpl* layer = tree->LayerByElementId(element_id); |
| 3865 if (layer) | 3874 if (layer) |
| 3866 layer->OnTransformAnimated(transform); | 3875 layer->OnTransformAnimated(transform); |
| 3867 } | 3876 } |
| 3868 | 3877 |
| 3869 void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( | 3878 void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( |
| 3870 int layer_id, | 3879 ElementId element_id, |
| 3871 LayerTreeImpl* tree, | 3880 LayerTreeImpl* tree, |
| 3872 const gfx::ScrollOffset& scroll_offset) { | 3881 const gfx::ScrollOffset& scroll_offset) { |
| 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->OnScrollOffsetAnimated(scroll_offset); | 3887 layer->OnScrollOffsetAnimated(scroll_offset); |
| 3879 // Run mutation callbacks to respond to updated scroll offset. | 3888 // Run mutation callbacks to respond to updated scroll offset. |
| 3880 Mutate(CurrentBeginFrameArgs().frame_time); | 3889 Mutate(CurrentBeginFrameArgs().frame_time); |
| 3881 } | 3890 } |
| 3882 } | 3891 } |
| 3883 | 3892 |
| 3884 bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( | 3893 bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( |
| 3885 const LayerImpl* layer) const { | 3894 const LayerImpl* layer) const { |
| 3886 return animation_host_->AnimationsPreserveAxisAlignment(layer->id()); | 3895 return animation_host_->AnimationsPreserveAxisAlignment(layer->element_id()); |
| 3887 } | 3896 } |
| 3888 | 3897 |
| 3889 void LayerTreeHostImpl::SetElementFilterMutated( | 3898 void LayerTreeHostImpl::SetElementFilterMutated( |
| 3890 ElementId element_id, | 3899 ElementId element_id, |
| 3891 ElementListType list_type, | 3900 ElementListType list_type, |
| 3892 const FilterOperations& filters) { | 3901 const FilterOperations& filters) { |
| 3893 if (list_type == ElementListType::ACTIVE) { | 3902 if (list_type == ElementListType::ACTIVE) { |
| 3894 SetTreeLayerFilterMutated(element_id, active_tree(), filters); | 3903 SetTreeLayerFilterMutated(element_id, active_tree(), filters); |
| 3895 } else { | 3904 } else { |
| 3896 SetTreeLayerFilterMutated(element_id, pending_tree(), filters); | 3905 SetTreeLayerFilterMutated(element_id, pending_tree(), filters); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3935 | 3944 |
| 3936 void LayerTreeHostImpl::ElementTransformIsAnimatingChanged( | 3945 void LayerTreeHostImpl::ElementTransformIsAnimatingChanged( |
| 3937 ElementId element_id, | 3946 ElementId element_id, |
| 3938 ElementListType list_type, | 3947 ElementListType list_type, |
| 3939 AnimationChangeType change_type, | 3948 AnimationChangeType change_type, |
| 3940 bool is_animating) { | 3949 bool is_animating) { |
| 3941 LayerTreeImpl* tree = | 3950 LayerTreeImpl* tree = |
| 3942 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); | 3951 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); |
| 3943 if (!tree) | 3952 if (!tree) |
| 3944 return; | 3953 return; |
| 3945 LayerImpl* layer = tree->LayerById(element_id); | 3954 LayerImpl* layer = tree->LayerByElementId(element_id); |
| 3946 if (layer) { | 3955 if (layer) { |
| 3947 switch (change_type) { | 3956 switch (change_type) { |
| 3948 case AnimationChangeType::POTENTIAL: | 3957 case AnimationChangeType::POTENTIAL: |
| 3949 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); | 3958 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
| 3950 break; | 3959 break; |
| 3951 case AnimationChangeType::RUNNING: | 3960 case AnimationChangeType::RUNNING: |
| 3952 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); | 3961 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
| 3953 break; | 3962 break; |
| 3954 case AnimationChangeType::BOTH: | 3963 case AnimationChangeType::BOTH: |
| 3955 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); | 3964 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
| 3956 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); | 3965 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
| 3957 break; | 3966 break; |
| 3958 } | 3967 } |
| 3959 } | 3968 } |
| 3960 } | 3969 } |
| 3961 | 3970 |
| 3962 void LayerTreeHostImpl::ElementOpacityIsAnimatingChanged( | 3971 void LayerTreeHostImpl::ElementOpacityIsAnimatingChanged( |
| 3963 ElementId element_id, | 3972 ElementId element_id, |
| 3964 ElementListType list_type, | 3973 ElementListType list_type, |
| 3965 AnimationChangeType change_type, | 3974 AnimationChangeType change_type, |
| 3966 bool is_animating) { | 3975 bool is_animating) { |
| 3967 LayerTreeImpl* tree = | 3976 LayerTreeImpl* tree = |
| 3968 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); | 3977 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); |
| 3969 if (!tree) | 3978 if (!tree) |
| 3970 return; | 3979 return; |
| 3971 LayerImpl* layer = tree->LayerById(element_id); | 3980 LayerImpl* layer = tree->LayerByElementId(element_id); |
| 3972 if (layer) { | 3981 if (layer) { |
| 3973 switch (change_type) { | 3982 switch (change_type) { |
| 3974 case AnimationChangeType::POTENTIAL: | 3983 case AnimationChangeType::POTENTIAL: |
| 3975 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); | 3984 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
| 3976 break; | 3985 break; |
| 3977 case AnimationChangeType::RUNNING: | 3986 case AnimationChangeType::RUNNING: |
| 3978 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); | 3987 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
| 3979 break; | 3988 break; |
| 3980 case AnimationChangeType::BOTH: | 3989 case AnimationChangeType::BOTH: |
| 3981 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); | 3990 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
| 3982 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); | 3991 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
| 3983 break; | 3992 break; |
| 3984 } | 3993 } |
| 3985 } | 3994 } |
| 3986 } | 3995 } |
| 3987 | 3996 |
| 3988 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { | 3997 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { |
| 3989 // TODO(majidvp): We should pass in the original starting scroll position here | 3998 // TODO(majidvp): We should pass in the original starting scroll position here |
| 3990 ScrollStateData scroll_state_data; | 3999 ScrollStateData scroll_state_data; |
| 3991 ScrollState scroll_state(scroll_state_data); | 4000 ScrollState scroll_state(scroll_state_data); |
| 3992 ScrollEnd(&scroll_state); | 4001 ScrollEnd(&scroll_state); |
| 3993 } | 4002 } |
| 3994 | 4003 |
| 3995 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( | 4004 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( |
| 3996 ElementId element_id) const { | 4005 ElementId element_id) const { |
| 3997 if (active_tree()) { | 4006 if (active_tree()) { |
| 3998 LayerImpl* layer = active_tree()->LayerById(element_id); | 4007 LayerImpl* layer = active_tree()->LayerByElementId(element_id); |
| 3999 if (layer) | 4008 if (layer) |
| 4000 return layer->ScrollOffsetForAnimation(); | 4009 return layer->ScrollOffsetForAnimation(); |
| 4001 } | 4010 } |
| 4002 | 4011 |
| 4003 return gfx::ScrollOffset(); | 4012 return gfx::ScrollOffset(); |
| 4004 } | 4013 } |
| 4005 | 4014 |
| 4006 bool LayerTreeHostImpl::SupportsImplScrolling() const { | 4015 bool LayerTreeHostImpl::SupportsImplScrolling() const { |
| 4007 // Supported in threaded mode. | 4016 // Supported in threaded mode. |
| 4008 return task_runner_provider_->HasImplThread(); | 4017 return task_runner_provider_->HasImplThread(); |
| 4009 } | 4018 } |
| 4010 | 4019 |
| 4011 bool LayerTreeHostImpl::CommitToActiveTree() const { | 4020 bool LayerTreeHostImpl::CommitToActiveTree() const { |
| 4012 // In single threaded mode we skip the pending tree and commit directly to the | 4021 // In single threaded mode we skip the pending tree and commit directly to the |
| 4013 // active tree. | 4022 // active tree. |
| 4014 return !task_runner_provider_->HasImplThread(); | 4023 return !task_runner_provider_->HasImplThread(); |
| 4015 } | 4024 } |
| 4016 | 4025 |
| 4017 } // namespace cc | 4026 } // namespace cc |
| OLD | NEW |