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

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: get element id's from scroll node data directly. 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 2792 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698