| Index: cc/animation/layer_animation_controller.cc
|
| diff --git a/cc/animation/layer_animation_controller.cc b/cc/animation/layer_animation_controller.cc
|
| index 3a34b32150faae4004db9abb6694a29c0bf870a4..f18a4cec4e88ccc96f1eed57f7fa40be1c4786de 100644
|
| --- a/cc/animation/layer_animation_controller.cc
|
| +++ b/cc/animation/layer_animation_controller.cc
|
| @@ -796,12 +796,13 @@ void LayerAnimationController::StartAnimations(base::TimeTicks monotonic_time) {
|
| if (animations_[i]->run_state() == Animation::STARTING ||
|
| animations_[i]->run_state() == Animation::RUNNING) {
|
| if (animations_[i]->affects_active_observers()) {
|
| - blocked_properties_for_active_observers.insert(
|
| - animations_[i]->target_property());
|
| + blocked_properties_for_active_observers[animations_[i]
|
| + ->target_property()] = true;
|
| }
|
| if (animations_[i]->affects_pending_observers()) {
|
| - blocked_properties_for_pending_observers.insert(
|
| - animations_[i]->target_property());
|
| + blocked_properties_for_pending_observers[animations_[i]
|
| + ->target_property()] =
|
| + true;
|
| }
|
| } else if (animations_[i]->run_state() ==
|
| Animation::WAITING_FOR_TARGET_AVAILABILITY) {
|
| @@ -825,11 +826,11 @@ void LayerAnimationController::StartAnimations(base::TimeTicks monotonic_time) {
|
| animation_waiting_for_target->affects_active_observers();
|
| bool affects_pending_observers =
|
| animation_waiting_for_target->affects_pending_observers();
|
| - enqueued_properties.insert(
|
| - animation_waiting_for_target->target_property());
|
| + enqueued_properties[animation_waiting_for_target->target_property()] =
|
| + true;
|
| for (size_t j = animation_index + 1; j < animations_.size(); ++j) {
|
| if (animation_waiting_for_target->group() == animations_[j]->group()) {
|
| - enqueued_properties.insert(animations_[j]->target_property());
|
| + enqueued_properties[animations_[j]->target_property()] = true;
|
| affects_active_observers |=
|
| animations_[j]->affects_active_observers();
|
| affects_pending_observers |=
|
| @@ -843,15 +844,24 @@ void LayerAnimationController::StartAnimations(base::TimeTicks monotonic_time) {
|
| // case, the group's target properties need to be added to the lists of
|
| // blocked properties.
|
| bool null_intersection = true;
|
| - for (TargetProperties::iterator p_iter = enqueued_properties.begin();
|
| - p_iter != enqueued_properties.end();
|
| - ++p_iter) {
|
| - if (affects_active_observers &&
|
| - !blocked_properties_for_active_observers.insert(*p_iter).second)
|
| - null_intersection = false;
|
| - if (affects_pending_observers &&
|
| - !blocked_properties_for_pending_observers.insert(*p_iter).second)
|
| - null_intersection = false;
|
| + static_assert(TargetProperty::FIRST_TARGET_PROPERTY == 0,
|
| + "TargetProperty must be 0-based enum");
|
| + for (int property = TargetProperty::FIRST_TARGET_PROPERTY;
|
| + property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) {
|
| + if (enqueued_properties[property]) {
|
| + if (affects_active_observers) {
|
| + if (blocked_properties_for_active_observers[property])
|
| + null_intersection = false;
|
| + else
|
| + blocked_properties_for_active_observers[property] = true;
|
| + }
|
| + if (affects_pending_observers) {
|
| + if (blocked_properties_for_pending_observers[property])
|
| + null_intersection = false;
|
| + else
|
| + blocked_properties_for_pending_observers[property] = true;
|
| + }
|
| + }
|
| }
|
|
|
| // If the intersection is null, then we are free to start the animations
|
|
|