OLD | NEW |
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 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 cancelAnimationOnCompositor(); | 239 cancelAnimationOnCompositor(); |
240 m_compositorState = nullptr; | 240 m_compositorState = nullptr; |
241 } | 241 } |
242 | 242 |
243 if (!shouldStart) { | 243 if (!shouldStart) { |
244 m_currentTimePending = false; | 244 m_currentTimePending = false; |
245 } | 245 } |
246 | 246 |
247 if (shouldStart) { | 247 if (shouldStart) { |
248 m_compositorGroup = compositorGroup; | 248 m_compositorGroup = compositorGroup; |
249 if (startOnCompositor && maybeStartAnimationOnCompositor()) { | 249 if (startOnCompositor) { |
250 m_compositorState = adoptPtr(new CompositorState(*this)); | 250 if (maybeStartAnimationOnCompositor()) |
| 251 m_compositorState = adoptPtr(new CompositorState(*this)); |
| 252 else |
| 253 cancelIncompatibleAnimationsOnCompositor(); |
251 } | 254 } |
252 } | 255 } |
253 } | 256 } |
254 | 257 |
255 void AnimationPlayer::postCommit(double timelineTime) | 258 void AnimationPlayer::postCommit(double timelineTime) |
256 { | 259 { |
257 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, DoNotSetCompos
itorPending); | 260 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, DoNotSetCompos
itorPending); |
258 | 261 |
259 m_compositorPending = false; | 262 m_compositorPending = false; |
260 | 263 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 } | 327 } |
325 | 328 |
326 // FIXME: This avoids marking this player as outdated needlessly when a
start time | 329 // FIXME: This avoids marking this player as outdated needlessly when a
start time |
327 // is notified, but we should refactor how outdating works to avoid this
. | 330 // is notified, but we should refactor how outdating works to avoid this
. |
328 m_outdated = false; | 331 m_outdated = false; |
329 | 332 |
330 m_currentTimePending = false; | 333 m_currentTimePending = false; |
331 } | 334 } |
332 } | 335 } |
333 | 336 |
| 337 bool AnimationPlayer::affects(const Element& element, CSSPropertyID property) co
nst |
| 338 { |
| 339 if (!m_content || !m_content->isAnimation()) |
| 340 return false; |
| 341 |
| 342 const Animation* animation = toAnimation(m_content.get()); |
| 343 return (animation->target() == &element) && animation->affects(property); |
| 344 } |
| 345 |
334 double AnimationPlayer::calculateStartTime(double currentTime) const | 346 double AnimationPlayer::calculateStartTime(double currentTime) const |
335 { | 347 { |
336 return m_timeline->effectiveTime() - currentTime / m_playbackRate; | 348 return m_timeline->effectiveTime() - currentTime / m_playbackRate; |
337 } | 349 } |
338 | 350 |
339 double AnimationPlayer::calculateCurrentTime() const | 351 double AnimationPlayer::calculateCurrentTime() const |
340 { | 352 { |
341 ASSERT(!m_held); | 353 ASSERT(!m_held); |
342 if (isNull(m_startTime) || !m_timeline) | 354 if (isNull(m_startTime) || !m_timeline) |
343 return 0; | 355 return 0; |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 } | 695 } |
684 | 696 |
685 if (sourceChanged || !m_compositorState | 697 if (sourceChanged || !m_compositorState |
686 || !playing() || m_compositorState->playbackRate != m_playbackRate | 698 || !playing() || m_compositorState->playbackRate != m_playbackRate |
687 || m_compositorState->startTime != m_startTime) { | 699 || m_compositorState->startTime != m_startTime) { |
688 m_compositorPending = true; | 700 m_compositorPending = true; |
689 timeline()->document()->compositorPendingAnimations().add(this); | 701 timeline()->document()->compositorPendingAnimations().add(this); |
690 } | 702 } |
691 } | 703 } |
692 | 704 |
| 705 void AnimationPlayer::cancelAnimationOnCompositor() |
| 706 { |
| 707 if (hasActiveAnimationsOnCompositor()) |
| 708 toAnimation(m_content.get())->cancelAnimationOnCompositor(); |
| 709 } |
| 710 |
| 711 void AnimationPlayer::cancelIncompatibleAnimationsOnCompositor() |
| 712 { |
| 713 if (m_content && m_content->isAnimation()) |
| 714 toAnimation(m_content.get())->cancelIncompatibleAnimationsOnCompositor()
; |
| 715 } |
| 716 |
693 bool AnimationPlayer::hasActiveAnimationsOnCompositor() | 717 bool AnimationPlayer::hasActiveAnimationsOnCompositor() |
694 { | 718 { |
695 if (!m_content || !m_content->isAnimation()) | 719 if (!m_content || !m_content->isAnimation()) |
696 return false; | 720 return false; |
697 | 721 |
698 return toAnimation(m_content.get())->hasActiveAnimationsOnCompositor(); | 722 return toAnimation(m_content.get())->hasActiveAnimationsOnCompositor(); |
699 } | 723 } |
700 | 724 |
701 void AnimationPlayer::cancelAnimationOnCompositor() | |
702 { | |
703 if (hasActiveAnimationsOnCompositor()) | |
704 toAnimation(m_content.get())->cancelAnimationOnCompositor(); | |
705 } | |
706 | |
707 bool AnimationPlayer::update(TimingUpdateReason reason) | 725 bool AnimationPlayer::update(TimingUpdateReason reason) |
708 { | 726 { |
709 if (!m_timeline) | 727 if (!m_timeline) |
710 return false; | 728 return false; |
711 | 729 |
712 PlayStateUpdateScope updateScope(*this, reason, DoNotSetCompositorPending); | 730 PlayStateUpdateScope updateScope(*this, reason, DoNotSetCompositorPending); |
713 | 731 |
714 m_outdated = false; | 732 m_outdated = false; |
715 bool idle = playStateInternal() == Idle; | 733 bool idle = playStateInternal() == Idle; |
716 | 734 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
799 | 817 |
800 AnimationPlayer::PlayStateUpdateScope::~PlayStateUpdateScope() | 818 AnimationPlayer::PlayStateUpdateScope::~PlayStateUpdateScope() |
801 { | 819 { |
802 AnimationPlayState oldPlayState = m_initialPlayState; | 820 AnimationPlayState oldPlayState = m_initialPlayState; |
803 AnimationPlayState newPlayState = m_player->calculatePlayState(); | 821 AnimationPlayState newPlayState = m_player->calculatePlayState(); |
804 | 822 |
805 m_player->m_playState = newPlayState; | 823 m_player->m_playState = newPlayState; |
806 if (oldPlayState != newPlayState) { | 824 if (oldPlayState != newPlayState) { |
807 bool wasActive = oldPlayState == Pending || oldPlayState == Running; | 825 bool wasActive = oldPlayState == Pending || oldPlayState == Running; |
808 bool isActive = newPlayState == Pending || newPlayState == Running; | 826 bool isActive = newPlayState == Pending || newPlayState == Running; |
809 | |
810 if (!wasActive && isActive) | 827 if (!wasActive && isActive) |
811 TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("blink.animations," TRACE_DISABLED
_BY_DEFAULT("devtools.timeline"), "Animation", m_player, "data", InspectorAnimat
ionEvent::data(*m_player)); | 828 TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("blink.animations," TRACE_DISABLED
_BY_DEFAULT("devtools.timeline"), "Animation", m_player, "data", InspectorAnimat
ionEvent::data(*m_player)); |
812 else if (wasActive && !isActive) | 829 else if (wasActive && !isActive) |
813 TRACE_EVENT_NESTABLE_ASYNC_END1("blink.animations," TRACE_DISABLED_B
Y_DEFAULT("devtools.timeline"), "Animation", m_player, "endData", InspectorAnima
tionStateEvent::data(*m_player)); | 830 TRACE_EVENT_NESTABLE_ASYNC_END1("blink.animations," TRACE_DISABLED_B
Y_DEFAULT("devtools.timeline"), "Animation", m_player, "endData", InspectorAnima
tionStateEvent::data(*m_player)); |
814 else | 831 else |
815 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("blink.animations," TRACE_DISABL
ED_BY_DEFAULT("devtools.timeline"), "Animation", m_player, "data", InspectorAnim
ationStateEvent::data(*m_player)); | 832 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("blink.animations," TRACE_DISABL
ED_BY_DEFAULT("devtools.timeline"), "Animation", m_player, "data", InspectorAnim
ationStateEvent::data(*m_player)); |
816 } | 833 } |
817 | 834 |
818 // Ordering is important, the ready promise should resolve/reject before | 835 // Ordering is important, the ready promise should resolve/reject before |
819 // the finished promise. | 836 // the finished promise. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 visitor->trace(m_content); | 918 visitor->trace(m_content); |
902 visitor->trace(m_timeline); | 919 visitor->trace(m_timeline); |
903 visitor->trace(m_pendingFinishedEvent); | 920 visitor->trace(m_pendingFinishedEvent); |
904 visitor->trace(m_finishedPromise); | 921 visitor->trace(m_finishedPromise); |
905 visitor->trace(m_readyPromise); | 922 visitor->trace(m_readyPromise); |
906 EventTargetWithInlineData::trace(visitor); | 923 EventTargetWithInlineData::trace(visitor); |
907 ActiveDOMObject::trace(visitor); | 924 ActiveDOMObject::trace(visitor); |
908 } | 925 } |
909 | 926 |
910 } // namespace | 927 } // namespace |
OLD | NEW |