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

Unified Diff: ui/compositor/layer_animation_sequence.h

Issue 11896017: Thread ui opacity animations (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Correctly deal with sequences meant to start together Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: ui/compositor/layer_animation_sequence.h
diff --git a/ui/compositor/layer_animation_sequence.h b/ui/compositor/layer_animation_sequence.h
index 9691ee783a71f7cd7ec12494e8add8eeddb3e218..9c8514250d6a601545909083d49129a3290f9c1f 100644
--- a/ui/compositor/layer_animation_sequence.h
+++ b/ui/compositor/layer_animation_sequence.h
@@ -47,6 +47,18 @@ class COMPOSITOR_EXPORT LayerAnimationSequence
void set_start_time(base::TimeTicks start_time) { start_time_ = start_time; }
base::TimeTicks start_time() const { return start_time_; }
+ // Sets a flag indicating that this sequence will start together with other
+ // sequences, and at least one of the sequences in this group has a threaded
+ // first element.
+ void set_waiting_for_group_start(bool waiting) {
+ waiting_for_group_start_ = waiting;
+ }
+ bool waiting_for_group_start() { return waiting_for_group_start_; }
+
+ // If starting the animation involves dispatching to another thread, then
+ // proceed with that dispatch.
+ void ProgressToEffectiveStart(LayerAnimationDelegate* delegate);
+
// Updates the delegate to the appropriate value for |now|. Requests a
// redraw if it is required.
void Progress(base::TimeTicks now, LayerAnimationDelegate* delegate);
@@ -64,7 +76,7 @@ class COMPOSITOR_EXPORT LayerAnimationSequence
void GetTargetValue(LayerAnimationElement::TargetValue* target) const;
// Aborts the given animation.
- void Abort();
+ void Abort(LayerAnimationDelegate* delegate);
// All properties modified by the sequence.
const LayerAnimationElement::AnimatableProperties& properties() const {
@@ -84,11 +96,21 @@ class COMPOSITOR_EXPORT LayerAnimationSequence
bool HasCommonProperty(
const LayerAnimationElement::AnimatableProperties& other) const;
+ // Returns true if the first element animates on the compositor thread.
+ bool IsFirstElementThreaded() const;
+
+ // Used to identify groups of sequences that are supposed to start together.
+ int animation_group_id() const { return animation_group_id_; }
+ void set_animation_group_id(int id) { animation_group_id_ = id; }
+
// These functions are used for adding or removing observers from the observer
// list. The observers are notified when animations end.
void AddObserver(LayerAnimationObserver* observer);
void RemoveObserver(LayerAnimationObserver* observer);
+ // Called when a threaded animation is actually started.
+ void OnThreadedAnimationStarted(const cc::AnimationEvent& event);
+
// Called when the animator schedules this sequence.
void OnScheduled();
@@ -126,6 +148,13 @@ class COMPOSITOR_EXPORT LayerAnimationSequence
// The start time of the current run of the sequence.
base::TimeTicks start_time_;
+ // True if this sequence will start together with other sequences, and at
+ // least one of the sequences in this group has a threaded first element.
+ bool waiting_for_group_start_;
+
+ // Identifies groups of sequences that are supposed to start together.
+ int animation_group_id_;
+
// These parties are notified when layer animations end.
ObserverList<LayerAnimationObserver> observers_;

Powered by Google App Engine
This is Rietveld 408576698