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

Side by Side Diff: ui/compositor/layer_animator.cc

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 years, 8 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
« no previous file with comments | « ui/compositor/layer_animator.h ('k') | ui/compositor/layer_animator_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/compositor/layer_animator.h" 5 #include "ui/compositor/layer_animator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory>
10
9 #include "base/logging.h" 11 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
12 #include "cc/animation/animation_events.h" 13 #include "cc/animation/animation_events.h"
13 #include "cc/animation/animation_host.h" 14 #include "cc/animation/animation_host.h"
14 #include "cc/animation/animation_id_provider.h" 15 #include "cc/animation/animation_id_provider.h"
15 #include "cc/animation/animation_player.h" 16 #include "cc/animation/animation_player.h"
16 #include "cc/animation/animation_registrar.h" 17 #include "cc/animation/animation_registrar.h"
17 #include "cc/animation/animation_timeline.h" 18 #include "cc/animation/animation_timeline.h"
18 #include "cc/animation/element_animations.h" 19 #include "cc/animation/element_animations.h"
19 #include "cc/animation/layer_animation_controller.h" 20 #include "cc/animation/layer_animation_controller.h"
20 #include "cc/output/begin_frame_args.h" 21 #include "cc/output/begin_frame_args.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 return new LayerAnimator( 81 return new LayerAnimator(
81 base::TimeDelta::FromMilliseconds(kDefaultTransitionDurationMs)); 82 base::TimeDelta::FromMilliseconds(kDefaultTransitionDurationMs));
82 } 83 }
83 84
84 // This macro provides the implementation for the setter and getter (well, 85 // This macro provides the implementation for the setter and getter (well,
85 // the getter of the target value) for an animated property. For example, 86 // the getter of the target value) for an animated property. For example,
86 // it is used for the implementations of SetTransform and GetTargetTransform. 87 // it is used for the implementations of SetTransform and GetTargetTransform.
87 // It is worth noting that SetFoo avoids invoking the usual animation machinery 88 // It is worth noting that SetFoo avoids invoking the usual animation machinery
88 // if the transition duration is zero -- in this case we just set the property 89 // if the transition duration is zero -- in this case we just set the property
89 // on the layer animation delegate immediately. 90 // on the layer animation delegate immediately.
90 #define ANIMATED_PROPERTY(type, property, name, member_type, member) \ 91 #define ANIMATED_PROPERTY(type, property, name, member_type, member) \
91 void LayerAnimator::Set##name(type value) { \ 92 void LayerAnimator::Set##name(type value) { \
92 base::TimeDelta duration = GetTransitionDuration(); \ 93 base::TimeDelta duration = GetTransitionDuration(); \
93 if (duration == base::TimeDelta() && delegate() && \ 94 if (duration == base::TimeDelta() && delegate() && \
94 (preemption_strategy_ != ENQUEUE_NEW_ANIMATION)) { \ 95 (preemption_strategy_ != ENQUEUE_NEW_ANIMATION)) { \
95 StopAnimatingProperty(LayerAnimationElement::property); \ 96 StopAnimatingProperty(LayerAnimationElement::property); \
96 delegate()->Set##name##FromAnimation(value); \ 97 delegate()->Set##name##FromAnimation(value); \
97 return; \ 98 return; \
98 } \ 99 } \
99 scoped_ptr<LayerAnimationElement> element( \ 100 std::unique_ptr<LayerAnimationElement> element( \
100 LayerAnimationElement::Create##name##Element(value, duration)); \ 101 LayerAnimationElement::Create##name##Element(value, duration)); \
101 element->set_tween_type(tween_type_); \ 102 element->set_tween_type(tween_type_); \
102 StartAnimation(new LayerAnimationSequence(element.release())); \ 103 StartAnimation(new LayerAnimationSequence(element.release())); \
103 } \ 104 } \
104 \ 105 \
105 member_type LayerAnimator::GetTarget##name() const { \ 106 member_type LayerAnimator::GetTarget##name() const { \
106 LayerAnimationElement::TargetValue target(delegate()); \ 107 LayerAnimationElement::TargetValue target(delegate()); \
107 GetTargetValue(&target); \ 108 GetTargetValue(&target); \
108 return target.member; \ 109 return target.member; \
109 } 110 }
110 111
111 ANIMATED_PROPERTY( 112 ANIMATED_PROPERTY(
112 const gfx::Transform&, TRANSFORM, Transform, gfx::Transform, transform); 113 const gfx::Transform&, TRANSFORM, Transform, gfx::Transform, transform);
113 ANIMATED_PROPERTY(const gfx::Rect&, BOUNDS, Bounds, gfx::Rect, bounds); 114 ANIMATED_PROPERTY(const gfx::Rect&, BOUNDS, Bounds, gfx::Rect, bounds);
114 ANIMATED_PROPERTY(float, OPACITY, Opacity, float, opacity); 115 ANIMATED_PROPERTY(float, OPACITY, Opacity, float, opacity);
115 ANIMATED_PROPERTY(bool, VISIBILITY, Visibility, bool, visibility); 116 ANIMATED_PROPERTY(bool, VISIBILITY, Visibility, bool, visibility);
116 ANIMATED_PROPERTY(float, BRIGHTNESS, Brightness, float, brightness); 117 ANIMATED_PROPERTY(float, BRIGHTNESS, Brightness, float, brightness);
117 ANIMATED_PROPERTY(float, GRAYSCALE, Grayscale, float, grayscale); 118 ANIMATED_PROPERTY(float, GRAYSCALE, Grayscale, float, grayscale);
118 ANIMATED_PROPERTY(SkColor, COLOR, Color, SkColor, color); 119 ANIMATED_PROPERTY(SkColor, COLOR, Color, SkColor, color);
119 120
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 if (animation_player_->element_animations()) { 206 if (animation_player_->element_animations()) {
206 animation_player_->element_animations() 207 animation_player_->element_animations()
207 ->layer_animation_controller() 208 ->layer_animation_controller()
208 ->RemoveEventObserver(this); 209 ->RemoveEventObserver(this);
209 } 210 }
210 211
211 if (animation_player_->layer_id()) 212 if (animation_player_->layer_id())
212 animation_player_->DetachLayer(); 213 animation_player_->DetachLayer();
213 } 214 }
214 215
215 void LayerAnimator::AddThreadedAnimation(scoped_ptr<cc::Animation> animation) { 216 void LayerAnimator::AddThreadedAnimation(
217 std::unique_ptr<cc::Animation> animation) {
216 animation_player_->AddAnimation(std::move(animation)); 218 animation_player_->AddAnimation(std::move(animation));
217 } 219 }
218 220
219 void LayerAnimator::RemoveThreadedAnimation(int animation_id) { 221 void LayerAnimator::RemoveThreadedAnimation(int animation_id) {
220 animation_player_->RemoveAnimation(animation_id); 222 animation_player_->RemoveAnimation(animation_id);
221 } 223 }
222 224
223 bool LayerAnimator::HasPendingThreadedAnimationsForTesting() const { 225 bool LayerAnimator::HasPendingThreadedAnimationsForTesting() const {
224 return animation_player_->has_pending_animations_for_testing(); 226 return animation_player_->has_pending_animations_for_testing();
225 } 227 }
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 (*queue_iter)->Start(delegate()); 611 (*queue_iter)->Start(delegate());
610 } 612 }
611 } 613 }
612 } 614 }
613 return to_return.release(); 615 return to_return.release();
614 } 616 }
615 617
616 void LayerAnimator::FinishAnimation( 618 void LayerAnimator::FinishAnimation(
617 LayerAnimationSequence* sequence, bool abort) { 619 LayerAnimationSequence* sequence, bool abort) {
618 scoped_refptr<LayerAnimator> retain(this); 620 scoped_refptr<LayerAnimator> retain(this);
619 scoped_ptr<LayerAnimationSequence> removed(RemoveAnimation(sequence)); 621 std::unique_ptr<LayerAnimationSequence> removed(RemoveAnimation(sequence));
620 if (abort) 622 if (abort)
621 sequence->Abort(delegate()); 623 sequence->Abort(delegate());
622 else 624 else
623 ProgressAnimationToEnd(sequence); 625 ProgressAnimationToEnd(sequence);
624 if (!delegate()) 626 if (!delegate())
625 return; 627 return;
626 ProcessQueue(); 628 ProcessQueue();
627 UpdateAnimationState(); 629 UpdateAnimationState();
628 } 630 }
629 631
630 void LayerAnimator::FinishAnyAnimationWithZeroDuration() { 632 void LayerAnimator::FinishAnyAnimationWithZeroDuration() {
631 scoped_refptr<LayerAnimator> retain(this); 633 scoped_refptr<LayerAnimator> retain(this);
632 // Special case: if we've started a 0 duration animation, just finish it now 634 // Special case: if we've started a 0 duration animation, just finish it now
633 // and get rid of it. We need to make a copy because Progress may indirectly 635 // and get rid of it. We need to make a copy because Progress may indirectly
634 // cause new animations to start running. 636 // cause new animations to start running.
635 RunningAnimations running_animations_copy = running_animations_; 637 RunningAnimations running_animations_copy = running_animations_;
636 for (size_t i = 0; i < running_animations_copy.size(); ++i) { 638 for (size_t i = 0; i < running_animations_copy.size(); ++i) {
637 if (!SAFE_INVOKE_BOOL(HasAnimation, running_animations_copy[i])) 639 if (!SAFE_INVOKE_BOOL(HasAnimation, running_animations_copy[i]))
638 continue; 640 continue;
639 641
640 if (running_animations_copy[i].sequence()->IsFinished( 642 if (running_animations_copy[i].sequence()->IsFinished(
641 running_animations_copy[i].sequence()->start_time())) { 643 running_animations_copy[i].sequence()->start_time())) {
642 SAFE_INVOKE_VOID(ProgressAnimationToEnd, running_animations_copy[i]); 644 SAFE_INVOKE_VOID(ProgressAnimationToEnd, running_animations_copy[i]);
643 scoped_ptr<LayerAnimationSequence> removed( 645 std::unique_ptr<LayerAnimationSequence> removed(
644 SAFE_INVOKE_PTR(RemoveAnimation, running_animations_copy[i])); 646 SAFE_INVOKE_PTR(RemoveAnimation, running_animations_copy[i]));
645 } 647 }
646 } 648 }
647 ProcessQueue(); 649 ProcessQueue();
648 UpdateAnimationState(); 650 UpdateAnimationState();
649 } 651 }
650 652
651 void LayerAnimator::ClearAnimations() { 653 void LayerAnimator::ClearAnimations() {
652 scoped_refptr<LayerAnimator> retain(this); 654 scoped_refptr<LayerAnimator> retain(this);
653 ClearAnimationsInternal(); 655 ClearAnimationsInternal();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 // progress them to the end and remove them. Note, Aborting or Progressing 687 // progress them to the end and remove them. Note, Aborting or Progressing
686 // animations may affect the collection of running animations, so we need to 688 // animations may affect the collection of running animations, so we need to
687 // operate on a copy. 689 // operate on a copy.
688 RunningAnimations running_animations_copy = running_animations_; 690 RunningAnimations running_animations_copy = running_animations_;
689 for (size_t i = 0; i < running_animations_copy.size(); ++i) { 691 for (size_t i = 0; i < running_animations_copy.size(); ++i) {
690 if (!SAFE_INVOKE_BOOL(HasAnimation, running_animations_copy[i])) 692 if (!SAFE_INVOKE_BOOL(HasAnimation, running_animations_copy[i]))
691 continue; 693 continue;
692 694
693 if (running_animations_copy[i].sequence()->HasConflictingProperty( 695 if (running_animations_copy[i].sequence()->HasConflictingProperty(
694 sequence->properties())) { 696 sequence->properties())) {
695 scoped_ptr<LayerAnimationSequence> removed( 697 std::unique_ptr<LayerAnimationSequence> removed(
696 SAFE_INVOKE_PTR(RemoveAnimation, running_animations_copy[i])); 698 SAFE_INVOKE_PTR(RemoveAnimation, running_animations_copy[i]));
697 if (abort) 699 if (abort)
698 running_animations_copy[i].sequence()->Abort(delegate()); 700 running_animations_copy[i].sequence()->Abort(delegate());
699 else 701 else
700 SAFE_INVOKE_VOID(ProgressAnimationToEnd, running_animations_copy[i]); 702 SAFE_INVOKE_VOID(ProgressAnimationToEnd, running_animations_copy[i]);
701 } 703 }
702 } 704 }
703 705
704 // Same for the queued animations that haven't been started. Again, we'll 706 // Same for the queued animations that haven't been started. Again, we'll
705 // need to operate on a copy. 707 // need to operate on a copy.
706 std::vector<base::WeakPtr<LayerAnimationSequence> > sequences; 708 std::vector<base::WeakPtr<LayerAnimationSequence> > sequences;
707 for (AnimationQueue::iterator queue_iter = animation_queue_.begin(); 709 for (AnimationQueue::iterator queue_iter = animation_queue_.begin();
708 queue_iter != animation_queue_.end(); ++queue_iter) 710 queue_iter != animation_queue_.end(); ++queue_iter)
709 sequences.push_back((*queue_iter)->AsWeakPtr()); 711 sequences.push_back((*queue_iter)->AsWeakPtr());
710 712
711 for (size_t i = 0; i < sequences.size(); ++i) { 713 for (size_t i = 0; i < sequences.size(); ++i) {
712 if (!sequences[i].get() || !HasAnimation(sequences[i].get())) 714 if (!sequences[i].get() || !HasAnimation(sequences[i].get()))
713 continue; 715 continue;
714 716
715 if (sequences[i]->HasConflictingProperty(sequence->properties())) { 717 if (sequences[i]->HasConflictingProperty(sequence->properties())) {
716 scoped_ptr<LayerAnimationSequence> removed( 718 std::unique_ptr<LayerAnimationSequence> removed(
717 RemoveAnimation(sequences[i].get())); 719 RemoveAnimation(sequences[i].get()));
718 if (abort) 720 if (abort)
719 sequences[i]->Abort(delegate()); 721 sequences[i]->Abort(delegate());
720 else 722 else
721 ProgressAnimationToEnd(sequences[i].get()); 723 ProgressAnimationToEnd(sequences[i].get());
722 } 724 }
723 } 725 }
724 } 726 }
725 727
726 void LayerAnimator::ImmediatelySetNewTarget(LayerAnimationSequence* sequence) { 728 void LayerAnimator::ImmediatelySetNewTarget(LayerAnimationSequence* sequence) {
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 void LayerAnimator::ClearAnimationsInternal() { 925 void LayerAnimator::ClearAnimationsInternal() {
924 PurgeDeletedAnimations(); 926 PurgeDeletedAnimations();
925 927
926 // Abort should never affect the set of running animations, but just in case 928 // Abort should never affect the set of running animations, but just in case
927 // clients are badly behaved, we will use a copy of the running animations. 929 // clients are badly behaved, we will use a copy of the running animations.
928 RunningAnimations running_animations_copy = running_animations_; 930 RunningAnimations running_animations_copy = running_animations_;
929 for (size_t i = 0; i < running_animations_copy.size(); ++i) { 931 for (size_t i = 0; i < running_animations_copy.size(); ++i) {
930 if (!SAFE_INVOKE_BOOL(HasAnimation, running_animations_copy[i])) 932 if (!SAFE_INVOKE_BOOL(HasAnimation, running_animations_copy[i]))
931 continue; 933 continue;
932 934
933 scoped_ptr<LayerAnimationSequence> removed( 935 std::unique_ptr<LayerAnimationSequence> removed(
934 RemoveAnimation(running_animations_copy[i].sequence())); 936 RemoveAnimation(running_animations_copy[i].sequence()));
935 if (removed.get()) 937 if (removed.get())
936 removed->Abort(delegate()); 938 removed->Abort(delegate());
937 } 939 }
938 // This *should* have cleared the list of running animations. 940 // This *should* have cleared the list of running animations.
939 DCHECK(running_animations_.empty()); 941 DCHECK(running_animations_.empty());
940 running_animations_.clear(); 942 running_animations_.clear();
941 animation_queue_.clear(); 943 animation_queue_.clear();
942 UpdateAnimationState(); 944 UpdateAnimationState();
943 } 945 }
(...skipping 19 matching lines...) Expand all
963 const base::WeakPtr<LayerAnimationSequence>& sequence) 965 const base::WeakPtr<LayerAnimationSequence>& sequence)
964 : sequence_(sequence) { 966 : sequence_(sequence) {
965 } 967 }
966 968
967 LayerAnimator::RunningAnimation::RunningAnimation( 969 LayerAnimator::RunningAnimation::RunningAnimation(
968 const RunningAnimation& other) = default; 970 const RunningAnimation& other) = default;
969 971
970 LayerAnimator::RunningAnimation::~RunningAnimation() { } 972 LayerAnimator::RunningAnimation::~RunningAnimation() { }
971 973
972 } // namespace ui 974 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/layer_animator.h ('k') | ui/compositor/layer_animator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698