| Index: Source/core/animation/CompositorPendingAnimations.cpp
|
| diff --git a/Source/core/animation/CompositorPendingAnimations.cpp b/Source/core/animation/CompositorPendingAnimations.cpp
|
| index d8ec11080c74c20b0da2db04ee76d110737a5997..ed6f2ffe397d1f7e31cece3241da6e249132bef8 100644
|
| --- a/Source/core/animation/CompositorPendingAnimations.cpp
|
| +++ b/Source/core/animation/CompositorPendingAnimations.cpp
|
| @@ -62,11 +62,16 @@ bool CompositorPendingAnimations::update(bool startOnCompositor)
|
|
|
| WillBeHeapVector<RefPtrWillBeMember<AnimationPlayer> > players;
|
| players.swap(m_pending);
|
| + int compositorGroup = ++m_compositorGroup;
|
| + if (compositorGroup == 0) {
|
| + // Wrap around, skipping 0.
|
| + compositorGroup = ++m_compositorGroup;
|
| + }
|
|
|
| for (size_t i = 0; i < players.size(); ++i) {
|
| AnimationPlayer& player = *players[i].get();
|
| bool hadCompositorAnimation = player.hasActiveAnimationsOnCompositor();
|
| - player.preCommit(startOnCompositor);
|
| + player.preCommit(compositorGroup, startOnCompositor);
|
| if (player.hasActiveAnimationsOnCompositor() && !hadCompositorAnimation) {
|
| startedSynchronizedOnCompositor = true;
|
| }
|
| @@ -114,34 +119,32 @@ bool CompositorPendingAnimations::update(bool startOnCompositor)
|
| }
|
|
|
| // If not, go ahead and start any animations that were waiting.
|
| - notifyAnimationStarted(monotonicallyIncreasingTime(), false);
|
| + notifyCompositorAnimationStarted(monotonicallyIncreasingTime());
|
|
|
| ASSERT(m_pending.isEmpty());
|
| return false;
|
| }
|
|
|
| -void CompositorPendingAnimations::notifyAnimationStarted(double monotonicAnimationStartTime, bool startedOnCompositor)
|
| +void CompositorPendingAnimations::notifyCompositorAnimationStarted(double monotonicAnimationStartTime, int compositorGroup)
|
| {
|
| TRACE_EVENT0("blink", "CompositorPendingAnimations::notifyCompositorAnimationStarted");
|
| - for (size_t i = 0; i < m_waitingForCompositorAnimationStart.size(); ++i) {
|
| - AnimationPlayer* player = m_waitingForCompositorAnimationStart[i].get();
|
| - if (player->hasStartTime())
|
| + WillBeHeapVector<RefPtrWillBeMember<AnimationPlayer> > players;
|
| + players.swap(m_waitingForCompositorAnimationStart);
|
| +
|
| + for (size_t i = 0; i < players.size(); ++i) {
|
| + AnimationPlayer* player = players[i].get();
|
| + if (player->hasStartTime() || player->playStateInternal() != AnimationPlayer::Pending) {
|
| + // Already started or no longer relevant.
|
| continue;
|
| - double effectiveStartTime = monotonicAnimationStartTime - player->timeline()->zeroTime();
|
| - if (startedOnCompositor) {
|
| - player->notifyCompositorStartTime(effectiveStartTime);
|
| - } else {
|
| - player->notifyStartTime(effectiveStartTime);
|
| }
|
| + if (compositorGroup && player->compositorGroup() != compositorGroup) {
|
| + // Still waiting.
|
| + m_waitingForCompositorAnimationStart.append(player);
|
| + continue;
|
| + }
|
| + player->notifyCompositorStartTime(monotonicAnimationStartTime - player->timeline()->zeroTime());
|
| }
|
|
|
| - m_waitingForCompositorAnimationStart.clear();
|
| -}
|
| -
|
| -void CompositorPendingAnimations::notifyCompositorAnimationStarted(double monotonicAnimationStartTime)
|
| -{
|
| - TRACE_EVENT0("blink", "CompositorPendingAnimations::notifyCompositorAnimationStarted");
|
| - notifyAnimationStarted(monotonicAnimationStartTime, true);
|
| }
|
|
|
| void CompositorPendingAnimations::trace(Visitor* visitor)
|
|
|