| 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 cancelAffectedAnimationsOnCompositor(); |
| 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(CSSPropertyID property) const |
| 338 { |
| 339 if (!m_content || !m_content->isAnimation()) |
| 340 return false; |
| 341 |
| 342 return toAnimation(m_content.get())->affects(property); |
| 343 } |
| 344 |
| 334 double AnimationPlayer::calculateStartTime(double currentTime) const | 345 double AnimationPlayer::calculateStartTime(double currentTime) const |
| 335 { | 346 { |
| 336 return m_timeline->effectiveTime() - currentTime / m_playbackRate; | 347 return m_timeline->effectiveTime() - currentTime / m_playbackRate; |
| 337 } | 348 } |
| 338 | 349 |
| 339 double AnimationPlayer::calculateCurrentTime() const | 350 double AnimationPlayer::calculateCurrentTime() const |
| 340 { | 351 { |
| 341 ASSERT(!m_held); | 352 ASSERT(!m_held); |
| 342 if (isNull(m_startTime) || !m_timeline) | 353 if (isNull(m_startTime) || !m_timeline) |
| 343 return 0; | 354 return 0; |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 } | 694 } |
| 684 | 695 |
| 685 if (sourceChanged || !m_compositorState | 696 if (sourceChanged || !m_compositorState |
| 686 || !playing() || m_compositorState->playbackRate != m_playbackRate | 697 || !playing() || m_compositorState->playbackRate != m_playbackRate |
| 687 || m_compositorState->startTime != m_startTime) { | 698 || m_compositorState->startTime != m_startTime) { |
| 688 m_compositorPending = true; | 699 m_compositorPending = true; |
| 689 timeline()->document()->compositorPendingAnimations().add(this); | 700 timeline()->document()->compositorPendingAnimations().add(this); |
| 690 } | 701 } |
| 691 } | 702 } |
| 692 | 703 |
| 704 void AnimationPlayer::cancelAnimationOnCompositor() |
| 705 { |
| 706 if (hasActiveAnimationsOnCompositor()) |
| 707 toAnimation(m_content.get())->cancelAnimationOnCompositor(); |
| 708 } |
| 709 |
| 710 void AnimationPlayer::cancelAffectedAnimationsOnCompositor() |
| 711 { |
| 712 if (m_content && m_content->isAnimation()) |
| 713 toAnimation(m_content.get())->cancelAffectedAnimationsOnCompositor(); |
| 714 } |
| 715 |
| 693 bool AnimationPlayer::hasActiveAnimationsOnCompositor() | 716 bool AnimationPlayer::hasActiveAnimationsOnCompositor() |
| 694 { | 717 { |
| 695 if (!m_content || !m_content->isAnimation()) | 718 if (!m_content || !m_content->isAnimation()) |
| 696 return false; | 719 return false; |
| 697 | 720 |
| 698 return toAnimation(m_content.get())->hasActiveAnimationsOnCompositor(); | 721 return toAnimation(m_content.get())->hasActiveAnimationsOnCompositor(); |
| 699 } | 722 } |
| 700 | 723 |
| 701 void AnimationPlayer::cancelAnimationOnCompositor() | |
| 702 { | |
| 703 if (hasActiveAnimationsOnCompositor()) | |
| 704 toAnimation(m_content.get())->cancelAnimationOnCompositor(); | |
| 705 } | |
| 706 | |
| 707 bool AnimationPlayer::update(TimingUpdateReason reason) | 724 bool AnimationPlayer::update(TimingUpdateReason reason) |
| 708 { | 725 { |
| 709 if (!m_timeline) | 726 if (!m_timeline) |
| 710 return false; | 727 return false; |
| 711 | 728 |
| 712 PlayStateUpdateScope updateScope(*this, reason, DoNotSetCompositorPending); | 729 PlayStateUpdateScope updateScope(*this, reason, DoNotSetCompositorPending); |
| 713 | 730 |
| 714 m_outdated = false; | 731 m_outdated = false; |
| 715 bool idle = playStateInternal() == Idle; | 732 bool idle = playStateInternal() == Idle; |
| 716 | 733 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 | 816 |
| 800 AnimationPlayer::PlayStateUpdateScope::~PlayStateUpdateScope() | 817 AnimationPlayer::PlayStateUpdateScope::~PlayStateUpdateScope() |
| 801 { | 818 { |
| 802 AnimationPlayState oldPlayState = m_initialPlayState; | 819 AnimationPlayState oldPlayState = m_initialPlayState; |
| 803 AnimationPlayState newPlayState = m_player->calculatePlayState(); | 820 AnimationPlayState newPlayState = m_player->calculatePlayState(); |
| 804 | 821 |
| 805 m_player->m_playState = newPlayState; | 822 m_player->m_playState = newPlayState; |
| 806 if (oldPlayState != newPlayState) { | 823 if (oldPlayState != newPlayState) { |
| 807 bool wasActive = oldPlayState == Pending || oldPlayState == Running; | 824 bool wasActive = oldPlayState == Pending || oldPlayState == Running; |
| 808 bool isActive = newPlayState == Pending || newPlayState == Running; | 825 bool isActive = newPlayState == Pending || newPlayState == Running; |
| 809 | |
| 810 if (!wasActive && isActive) | 826 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)); | 827 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) | 828 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)); | 829 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 | 830 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)); | 831 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("blink.animations," TRACE_DISABL
ED_BY_DEFAULT("devtools.timeline"), "Animation", m_player, "data", InspectorAnim
ationStateEvent::data(*m_player)); |
| 816 } | 832 } |
| 817 | 833 |
| 818 // Ordering is important, the ready promise should resolve/reject before | 834 // Ordering is important, the ready promise should resolve/reject before |
| 819 // the finished promise. | 835 // the finished promise. |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 visitor->trace(m_content); | 917 visitor->trace(m_content); |
| 902 visitor->trace(m_timeline); | 918 visitor->trace(m_timeline); |
| 903 visitor->trace(m_pendingFinishedEvent); | 919 visitor->trace(m_pendingFinishedEvent); |
| 904 visitor->trace(m_finishedPromise); | 920 visitor->trace(m_finishedPromise); |
| 905 visitor->trace(m_readyPromise); | 921 visitor->trace(m_readyPromise); |
| 906 EventTargetWithInlineData::trace(visitor); | 922 EventTargetWithInlineData::trace(visitor); |
| 907 ActiveDOMObject::trace(visitor); | 923 ActiveDOMObject::trace(visitor); |
| 908 } | 924 } |
| 909 | 925 |
| 910 } // namespace | 926 } // namespace |
| OLD | NEW |