Index: cc/animation/element_animations.cc |
diff --git a/cc/animation/element_animations.cc b/cc/animation/element_animations.cc |
index bf645075be24ea6256e0e76cb662591db234d17e..1654bdaa85e9f5adc5e245a0577d472d179b9ec4 100644 |
--- a/cc/animation/element_animations.cc |
+++ b/cc/animation/element_animations.cc |
@@ -500,7 +500,7 @@ void ElementAnimations::NotifyClientAnimationChanged( |
ElementListType list_type, |
bool notify_elements_about_potential_animation, |
bool notify_elements_about_running_animation) { |
- struct PropertyAnimationState* animation_state = nullptr; |
+ PropertyAnimationState* animation_state = nullptr; |
switch (property) { |
case TargetProperty::OPACITY: |
animation_state = &opacity_animation_state_; |
@@ -547,7 +547,7 @@ void ElementAnimations::NotifyClientAnimationChanged( |
void ElementAnimations::UpdateClientAnimationStateInternal( |
TargetProperty::Type property) { |
- struct PropertyAnimationState* animation_state = nullptr; |
+ PropertyAnimationState* animation_state = nullptr; |
switch (property) { |
case TargetProperty::OPACITY: |
animation_state = &opacity_animation_state_; |
@@ -562,66 +562,32 @@ void ElementAnimations::UpdateClientAnimationStateInternal( |
NOTREACHED(); |
break; |
} |
- bool was_currently_running_animation_for_active_elements = |
- animation_state->currently_running_for_active_elements; |
- bool was_currently_running_animation_for_pending_elements = |
- animation_state->currently_running_for_pending_elements; |
- bool was_potentially_animating_for_active_elements = |
- animation_state->potentially_animating_for_active_elements; |
- bool was_potentially_animating_for_pending_elements = |
- animation_state->potentially_animating_for_pending_elements; |
+ PropertyAnimationState previous_state = *animation_state; |
animation_state->Clear(); |
- DCHECK(was_potentially_animating_for_active_elements || |
- !was_currently_running_animation_for_active_elements); |
- DCHECK(was_potentially_animating_for_pending_elements || |
- !was_currently_running_animation_for_pending_elements); |
+ DCHECK(previous_state.IsValid()); |
for (auto& player : players_list_) { |
- for (const auto& animation : player.animations()) { |
- if (!animation->is_finished() && |
- animation->target_property() == property) { |
- animation_state->potentially_animating_for_active_elements |= |
- animation->affects_active_elements(); |
- animation_state->potentially_animating_for_pending_elements |= |
- animation->affects_pending_elements(); |
- animation_state->currently_running_for_active_elements |= |
- animation->affects_active_elements() && |
- animation->InEffect(last_tick_time_); |
- animation_state->currently_running_for_pending_elements |= |
- animation->affects_pending_elements() && |
- animation->InEffect(last_tick_time_); |
- } |
- } |
+ PropertyAnimationState player_state; |
+ player.GetPropertyAnimationStateFor(property, &player_state); |
+ *animation_state |= player_state; |
} |
- bool potentially_animating_changed_for_active_elements = |
- was_potentially_animating_for_active_elements != |
- animation_state->potentially_animating_for_active_elements; |
- bool potentially_animating_changed_for_pending_elements = |
- was_potentially_animating_for_pending_elements != |
- animation_state->potentially_animating_for_pending_elements; |
- bool currently_running_animation_changed_for_active_elements = |
- was_currently_running_animation_for_active_elements != |
- animation_state->currently_running_for_active_elements; |
- bool currently_running_animation_changed_for_pending_elements = |
- was_currently_running_animation_for_pending_elements != |
- animation_state->currently_running_for_pending_elements; |
- if (!potentially_animating_changed_for_active_elements && |
- !potentially_animating_changed_for_pending_elements && |
- !currently_running_animation_changed_for_active_elements && |
- !currently_running_animation_changed_for_pending_elements) |
+ if (*animation_state == previous_state) |
return; |
+ |
+ PropertyAnimationState diff_state = previous_state ^ *animation_state; |
+ |
if (has_element_in_active_list()) |
NotifyClientAnimationChanged( |
property, ElementListType::ACTIVE, |
- potentially_animating_changed_for_active_elements, |
- currently_running_animation_changed_for_active_elements); |
+ diff_state.potentially_animating_for_active_elements, |
+ diff_state.currently_running_for_active_elements); |
if (has_element_in_pending_list()) |
NotifyClientAnimationChanged( |
property, ElementListType::PENDING, |
- potentially_animating_changed_for_pending_elements, |
- currently_running_animation_changed_for_pending_elements); |
+ diff_state.potentially_animating_for_pending_elements, |
+ diff_state.currently_running_for_pending_elements); |
} |
bool ElementAnimations::HasActiveAnimation() const { |