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

Side by Side Diff: Source/core/animation/AnimationPlayer.cpp

Issue 651103002: Web Animations: Compositor start notification should only apply to animations in a matching group (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase. Created 6 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/animation/AnimationPlayer.h ('k') | Source/core/animation/CompositorAnimations.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 , m_sequenceNumber(nextSequenceNumber()) 70 , m_sequenceNumber(nextSequenceNumber())
71 , m_content(content) 71 , m_content(content)
72 , m_timeline(&timeline) 72 , m_timeline(&timeline)
73 , m_paused(false) 73 , m_paused(false)
74 , m_held(true) 74 , m_held(true)
75 , m_isPausedForTesting(false) 75 , m_isPausedForTesting(false)
76 , m_outdated(true) 76 , m_outdated(true)
77 , m_finished(true) 77 , m_finished(true)
78 , m_compositorState(nullptr) 78 , m_compositorState(nullptr)
79 , m_compositorPending(true) 79 , m_compositorPending(true)
80 , m_compositorGroup(0)
80 , m_currentTimePending(false) 81 , m_currentTimePending(false)
81 { 82 {
82 if (m_content) { 83 if (m_content) {
83 if (m_content->player()) { 84 if (m_content->player()) {
84 m_content->player()->cancel(); 85 m_content->player()->cancel();
85 m_content->player()->setSource(0); 86 m_content->player()->setSource(0);
86 } 87 }
87 m_content->attach(this); 88 m_content->attach(this);
88 } 89 }
89 } 90 }
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 double AnimationPlayer::currentTimeInternal() const 197 double AnimationPlayer::currentTimeInternal() const
197 { 198 {
198 double result = m_held ? m_holdTime : calculateCurrentTime(); 199 double result = m_held ? m_holdTime : calculateCurrentTime();
199 #if ENABLE(ASSERT) 200 #if ENABLE(ASSERT)
200 const_cast<AnimationPlayer*>(this)->updateCurrentTimingState(TimingUpdateOnD emand); 201 const_cast<AnimationPlayer*>(this)->updateCurrentTimingState(TimingUpdateOnD emand);
201 ASSERT(result == (m_held ? m_holdTime : calculateCurrentTime())); 202 ASSERT(result == (m_held ? m_holdTime : calculateCurrentTime()));
202 #endif 203 #endif
203 return result; 204 return result;
204 } 205 }
205 206
206 void AnimationPlayer::preCommit(bool startOnCompositor) 207 void AnimationPlayer::preCommit(int compositorGroup, bool startOnCompositor)
207 { 208 {
208 if (m_compositorState && m_compositorState->pendingAction == Start) { 209 if (m_compositorState && m_compositorState->pendingAction == Start) {
209 // Still waiting for a start time. 210 // Still waiting for a start time.
210 return; 211 return;
211 } 212 }
212 213
213 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, DoNotSetCompos itorPending); 214 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, DoNotSetCompos itorPending);
214 215
215 bool softChange = m_compositorState && (paused() || m_compositorState->playb ackRate != m_playbackRate); 216 bool softChange = m_compositorState && (paused() || m_compositorState->playb ackRate != m_playbackRate);
216 bool hardChange = m_compositorState && (m_compositorState->sourceChanged || (m_compositorState->startTime != m_startTime && !std::isnan(m_compositorState->s tartTime) && !std::isnan(m_startTime))); 217 bool hardChange = m_compositorState && (m_compositorState->sourceChanged || (m_compositorState->startTime != m_startTime && !std::isnan(m_compositorState->s tartTime) && !std::isnan(m_startTime)));
217 218
218 // FIXME: softChange && !hardChange should generate a Pause/ThenStart, 219 // FIXME: softChange && !hardChange should generate a Pause/ThenStart,
219 // not a Cancel, but we can't communicate these to the compositor yet. 220 // not a Cancel, but we can't communicate these to the compositor yet.
220 221
221 bool changed = softChange || hardChange; 222 bool changed = softChange || hardChange;
222 bool shouldCancel = (!playing() && m_compositorState) || changed; 223 bool shouldCancel = (!playing() && m_compositorState) || changed;
223 bool shouldStart = playing() && (!m_compositorState || changed); 224 bool shouldStart = playing() && (!m_compositorState || changed);
224 225
225 if (shouldCancel) { 226 if (shouldCancel) {
226 cancelAnimationOnCompositor(); 227 cancelAnimationOnCompositor();
227 m_compositorState = nullptr; 228 m_compositorState = nullptr;
228 } 229 }
229 230
230 if (!shouldStart) { 231 if (!shouldStart) {
231 m_currentTimePending = false; 232 m_currentTimePending = false;
232 } 233 }
233 234
234 if (shouldStart && startOnCompositor && maybeStartAnimationOnCompositor()) { 235 if (shouldStart) {
235 m_compositorState = adoptPtr(new CompositorState(*this)); 236 m_compositorGroup = compositorGroup;
237 if (startOnCompositor && maybeStartAnimationOnCompositor()) {
238 m_compositorState = adoptPtr(new CompositorState(*this));
239 }
236 } 240 }
237 } 241 }
238 242
239 void AnimationPlayer::postCommit(double timelineTime) 243 void AnimationPlayer::postCommit(double timelineTime)
240 { 244 {
241 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, DoNotSetCompos itorPending); 245 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, DoNotSetCompos itorPending);
242 246
243 m_compositorPending = false; 247 m_compositorPending = false;
244 248
245 if (!m_compositorState || m_compositorState->pendingAction == None) 249 if (!m_compositorState || m_compositorState->pendingAction == None)
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 double startTime = timeline()->zeroTime() + startTimeInternal(); 620 double startTime = timeline()->zeroTime() + startTimeInternal();
617 if (reversed) { 621 if (reversed) {
618 startTime -= sourceEnd() / fabs(m_playbackRate); 622 startTime -= sourceEnd() / fabs(m_playbackRate);
619 } 623 }
620 624
621 double timeOffset = 0; 625 double timeOffset = 0;
622 if (std::isnan(startTime)) { 626 if (std::isnan(startTime)) {
623 timeOffset = reversed ? sourceEnd() - currentTimeInternal() : currentTim eInternal(); 627 timeOffset = reversed ? sourceEnd() - currentTimeInternal() : currentTim eInternal();
624 timeOffset = timeOffset / fabs(m_playbackRate); 628 timeOffset = timeOffset / fabs(m_playbackRate);
625 } 629 }
626 return toAnimation(m_content.get())->maybeStartAnimationOnCompositor(startTi me, timeOffset, m_playbackRate); 630 ASSERT(m_compositorGroup != 0);
631 return toAnimation(m_content.get())->maybeStartAnimationOnCompositor(m_compo sitorGroup, startTime, timeOffset, m_playbackRate);
627 } 632 }
628 633
629 void AnimationPlayer::setCompositorPending(bool sourceChanged) 634 void AnimationPlayer::setCompositorPending(bool sourceChanged)
630 { 635 {
631 // FIXME: Animation could notify this directly? 636 // FIXME: Animation could notify this directly?
632 if (!hasActiveAnimationsOnCompositor()) { 637 if (!hasActiveAnimationsOnCompositor()) {
633 m_compositorState.release(); 638 m_compositorState.release();
634 } 639 }
635 if (sourceChanged && m_compositorState) { 640 if (sourceChanged && m_compositorState) {
636 m_compositorState->sourceChanged = true; 641 m_compositorState->sourceChanged = true;
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 838
834 void AnimationPlayer::trace(Visitor* visitor) 839 void AnimationPlayer::trace(Visitor* visitor)
835 { 840 {
836 visitor->trace(m_content); 841 visitor->trace(m_content);
837 visitor->trace(m_timeline); 842 visitor->trace(m_timeline);
838 visitor->trace(m_pendingFinishedEvent); 843 visitor->trace(m_pendingFinishedEvent);
839 EventTargetWithInlineData::trace(visitor); 844 EventTargetWithInlineData::trace(visitor);
840 } 845 }
841 846
842 } // namespace 847 } // namespace
OLDNEW
« no previous file with comments | « Source/core/animation/AnimationPlayer.h ('k') | Source/core/animation/CompositorAnimations.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698