Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(584)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 1973083002: Use element id's for animations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: respond to reviewer feedback. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698