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

Unified Diff: cc/animation/layer_animation_controller.cc

Issue 408833002: StartAnimation: Optimized the search for Animations which is waiting for TargetAvailability (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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: cc/animation/layer_animation_controller.cc
diff --git a/cc/animation/layer_animation_controller.cc b/cc/animation/layer_animation_controller.cc
index 4e85592303ea3007915d1f577edfe667a2f0277d..ff07a02ec31e22ef853172b211bd0352606ff783 100644
--- a/cc/animation/layer_animation_controller.cc
+++ b/cc/animation/layer_animation_controller.cc
@@ -602,6 +602,7 @@ void LayerAnimationController::StartAnimations(base::TimeTicks monotonic_time) {
// First collect running properties affecting each type of observer.
TargetProperties blocked_properties_for_active_observers;
TargetProperties blocked_properties_for_pending_observers;
+ AnimationMap waitingfor_target_animations_;
vivekg 2014/07/21 12:39:32 nit: waitingfor_target_animations_ => animations_w
shreyas.g 2014/07/21 13:00:37 Done.
for (size_t i = 0; i < animations_.size(); ++i) {
if (animations_[i]->run_state() == Animation::Starting ||
animations_[i]->run_state() == Animation::Running) {
@@ -613,22 +614,25 @@ void LayerAnimationController::StartAnimations(base::TimeTicks monotonic_time) {
blocked_properties_for_pending_observers.insert(
animations_[i]->target_property());
}
+ } else if (animations_[i]->run_state() ==
+ Animation::WaitingForTargetAvailability) {
+ waitingfor_target_animations_[i] = animations_[i];
}
}
- for (size_t i = 0; i < animations_.size(); ++i) {
- if (animations_[i]->run_state() ==
- Animation::WaitingForTargetAvailability) {
+ for (AnimationMap::const_iterator iter =
+ waitingfor_target_animations_.begin();
+ iter != waitingfor_target_animations_.end();
+ ++iter) {
// Collect all properties for animations with the same group id (they
// should all also be in the list of animations).
TargetProperties enqueued_properties;
- bool affects_active_observers =
- animations_[i]->affects_active_observers();
+ bool affects_active_observers = iter->second->affects_active_observers();
bool affects_pending_observers =
- animations_[i]->affects_pending_observers();
- enqueued_properties.insert(animations_[i]->target_property());
- for (size_t j = i + 1; j < animations_.size(); ++j) {
- if (animations_[i]->group() == animations_[j]->group()) {
+ iter->second->affects_pending_observers();
+ enqueued_properties.insert(iter->second->target_property());
+ for (size_t j = iter->first + 1; j < animations_.size(); ++j) {
+ if (iter->second->group() == animations_[j]->group()) {
enqueued_properties.insert(animations_[j]->target_property());
affects_active_observers |=
animations_[j]->affects_active_observers();
@@ -657,16 +661,15 @@ void LayerAnimationController::StartAnimations(base::TimeTicks monotonic_time) {
// If the intersection is null, then we are free to start the animations
// in the group.
if (null_intersection) {
- animations_[i]->SetRunState(Animation::Starting, monotonic_time);
- for (size_t j = i + 1; j < animations_.size(); ++j) {
- if (animations_[i]->group() == animations_[j]->group()) {
+ iter->second->SetRunState(Animation::Starting, monotonic_time);
+ for (size_t j = iter->first + 1; j < animations_.size(); ++j) {
+ if (iter->second->group() == animations_[j]->group()) {
animations_[j]->SetRunState(Animation::Starting, monotonic_time);
}
}
} else {
needs_to_start_animations_ = true;
}
- }
}
}
« cc/animation/layer_animation_controller.h ('K') | « cc/animation/layer_animation_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698