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

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

Issue 946323002: Animations: Introduce compositor AnimationPlayer and AnimationTimeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Implement layer attach/detach. Fix code review issues. Created 5 years, 9 months 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
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 21 matching lines...) Expand all
32 #include "core/animation/AnimationPlayer.h" 32 #include "core/animation/AnimationPlayer.h"
33 33
34 #include "core/animation/Animation.h" 34 #include "core/animation/Animation.h"
35 #include "core/animation/AnimationTimeline.h" 35 #include "core/animation/AnimationTimeline.h"
36 #include "core/dom/Document.h" 36 #include "core/dom/Document.h"
37 #include "core/dom/ExceptionCode.h" 37 #include "core/dom/ExceptionCode.h"
38 #include "core/events/AnimationPlayerEvent.h" 38 #include "core/events/AnimationPlayerEvent.h"
39 #include "core/frame/UseCounter.h" 39 #include "core/frame/UseCounter.h"
40 #include "core/inspector/InspectorInstrumentation.h" 40 #include "core/inspector/InspectorInstrumentation.h"
41 #include "core/inspector/InspectorTraceEvents.h" 41 #include "core/inspector/InspectorTraceEvents.h"
42 #include "platform/RuntimeEnabledFeatures.h"
42 #include "platform/TraceEvent.h" 43 #include "platform/TraceEvent.h"
44 #include "public/platform/Platform.h"
45 #include "public/platform/WebCompositorAnimationPlayer.h"
46 #include "public/platform/WebCompositorSupport.h"
43 #include "wtf/MathExtras.h" 47 #include "wtf/MathExtras.h"
44 48
45 namespace blink { 49 namespace blink {
46 50
47 namespace { 51 namespace {
48 52
49 static unsigned nextSequenceNumber() 53 static unsigned nextSequenceNumber()
50 { 54 {
51 static unsigned next = 0; 55 static unsigned next = 0;
52 return ++next; 56 return ++next;
(...skipping 28 matching lines...) Expand all
81 , m_content(content) 85 , m_content(content)
82 , m_timeline(&timeline) 86 , m_timeline(&timeline)
83 , m_paused(false) 87 , m_paused(false)
84 , m_held(true) 88 , m_held(true)
85 , m_isPausedForTesting(false) 89 , m_isPausedForTesting(false)
86 , m_outdated(false) 90 , m_outdated(false)
87 , m_finished(true) 91 , m_finished(true)
88 , m_compositorState(nullptr) 92 , m_compositorState(nullptr)
89 , m_compositorPending(false) 93 , m_compositorPending(false)
90 , m_compositorGroup(0) 94 , m_compositorGroup(0)
95 , m_attachCompositorPlayerToElement(false)
91 , m_currentTimePending(false) 96 , m_currentTimePending(false)
92 , m_stateIsBeingUpdated(false) 97 , m_stateIsBeingUpdated(false)
93 { 98 {
99 createCompositorPlayer();
100
94 if (m_content) { 101 if (m_content) {
95 if (m_content->player()) { 102 if (m_content->player()) {
96 m_content->player()->cancel(); 103 m_content->player()->cancel();
97 m_content->player()->setSource(0); 104 m_content->player()->setSource(0);
98 } 105 }
99 m_content->attach(this); 106 m_content->attach(this);
107 attachElementToPlayer();
100 } 108 }
101 } 109 }
102 110
103 AnimationPlayer::~AnimationPlayer() 111 AnimationPlayer::~AnimationPlayer()
104 { 112 {
105 #if !ENABLE(OILPAN) 113 #if !ENABLE(OILPAN)
106 if (m_content) 114 if (m_content) {
115 detachElementFromPlayer();
107 m_content->detach(); 116 m_content->detach();
117 }
108 if (m_timeline) 118 if (m_timeline)
109 m_timeline->playerDestroyed(this); 119 m_timeline->playerDestroyed(this);
110 #endif 120 #endif
121
122 destroyCompositorPlayer();
111 } 123 }
112 124
113 double AnimationPlayer::sourceEnd() const 125 double AnimationPlayer::sourceEnd() const
114 { 126 {
115 return m_content ? m_content->endTimeInternal() : 0; 127 return m_content ? m_content->endTimeInternal() : 0;
116 } 128 }
117 129
118 bool AnimationPlayer::limited(double currentTime) const 130 bool AnimationPlayer::limited(double currentTime) const
119 { 131 {
120 return (m_playbackRate < 0 && currentTime <= 0) || (m_playbackRate > 0 && cu rrentTime >= sourceEnd()); 132 return (m_playbackRate < 0 && currentTime <= 0) || (m_playbackRate > 0 && cu rrentTime >= sourceEnd());
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 438 }
427 439
428 void AnimationPlayer::setSource(AnimationNode* newSource) 440 void AnimationPlayer::setSource(AnimationNode* newSource)
429 { 441 {
430 if (m_content == newSource) 442 if (m_content == newSource)
431 return; 443 return;
432 444
433 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, SetCompositorP endingWithSourceChanged); 445 PlayStateUpdateScope updateScope(*this, TimingUpdateOnDemand, SetCompositorP endingWithSourceChanged);
434 446
435 double storedCurrentTime = currentTimeInternal(); 447 double storedCurrentTime = currentTimeInternal();
436 if (m_content) 448 if (m_content) {
449 detachElementFromPlayer();
437 m_content->detach(); 450 m_content->detach();
451 }
438 m_content = newSource; 452 m_content = newSource;
439 if (newSource) { 453 if (newSource) {
440 // FIXME: This logic needs to be updated once groups are implemented 454 // FIXME: This logic needs to be updated once groups are implemented
441 if (newSource->player()) { 455 if (newSource->player()) {
442 newSource->player()->cancel(); 456 newSource->player()->cancel();
443 newSource->player()->setSource(0); 457 newSource->player()->setSource(0);
444 } 458 }
445 newSource->attach(this); 459 newSource->attach(this);
460 attachElementToPlayer();
446 setOutdated(); 461 setOutdated();
447 } 462 }
448 setCurrentTimeInternal(storedCurrentTime, TimingUpdateOnDemand); 463 setCurrentTimeInternal(storedCurrentTime, TimingUpdateOnDemand);
449 } 464 }
450 465
451 const char* AnimationPlayer::playStateString(AnimationPlayState playState) 466 const char* AnimationPlayer::playStateString(AnimationPlayState playState)
452 { 467 {
453 switch (playState) { 468 switch (playState) {
454 case Idle: 469 case Idle:
455 return "idle"; 470 return "idle";
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 ASSERT(!m_stateIsBeingUpdated); 838 ASSERT(!m_stateIsBeingUpdated);
824 m_stateIsBeingUpdated = true; 839 m_stateIsBeingUpdated = true;
825 } 840 }
826 841
827 void AnimationPlayer::endUpdatingState() 842 void AnimationPlayer::endUpdatingState()
828 { 843 {
829 ASSERT(m_stateIsBeingUpdated); 844 ASSERT(m_stateIsBeingUpdated);
830 m_stateIsBeingUpdated = false; 845 m_stateIsBeingUpdated = false;
831 } 846 }
832 847
848 void AnimationPlayer::createCompositorPlayer()
849 {
850 if (RuntimeEnabledFeatures::compositorAnimationTimelinesEnabled() && Platfor m::current()->compositorSupport()) {
851 m_compositorPlayer = adoptPtr(Platform::current()->compositorSupport()-> createAnimationPlayer());
852 ASSERT(m_compositorPlayer);
853 m_compositorPlayer->setAnimationDelegate(this);
854 }
855 }
856
857 void AnimationPlayer::destroyCompositorPlayer()
858 {
859 if (m_compositorPlayer)
860 m_compositorPlayer->setAnimationDelegate(nullptr);
861 m_compositorPlayer.clear();
862 }
863
864 void AnimationPlayer::attachElementToPlayer()
865 {
866 m_attachCompositorPlayerToElement = true;
867 updateCompositorPlayerToElementAttachment();
868 }
869
870 void AnimationPlayer::detachElementFromPlayer()
871 {
872 m_attachCompositorPlayerToElement = false;
873 if (m_compositorPlayer && m_compositorPlayer->isLayerAttached())
874 m_compositorPlayer->detachLayer();
875 }
876
877 void AnimationPlayer::updateCompositorPlayerToElementAttachment()
878 {
879 if (!RuntimeEnabledFeatures::compositorAnimationTimelinesEnabled() || !m_att achCompositorPlayerToElement)
880 return;
881 if (!m_compositorPlayer || !m_content || !m_content->isAnimation() || !toAni mation(m_content.get())->canAttachElementToCompositorPlayer())
882 return;
883
884 m_attachCompositorPlayerToElement = false;
885 toAnimation(m_content.get())->attachElementToCompositorPlayer();
886 }
887
888 void AnimationPlayer::notifyAnimationStarted(double monotonicTime, int group)
889 {
890 ASSERT(RuntimeEnabledFeatures::compositorAnimationTimelinesEnabled());
891 timeline()->document()->compositorPendingAnimations().notifyCompositorAnimat ionStarted(monotonicTime, group);
892 }
893
833 AnimationPlayer::PlayStateUpdateScope::PlayStateUpdateScope(AnimationPlayer& pla yer, TimingUpdateReason reason, CompositorPendingChange compositorPendingChange) 894 AnimationPlayer::PlayStateUpdateScope::PlayStateUpdateScope(AnimationPlayer& pla yer, TimingUpdateReason reason, CompositorPendingChange compositorPendingChange)
834 : m_player(player) 895 : m_player(player)
835 , m_initialPlayState(m_player->playStateInternal()) 896 , m_initialPlayState(m_player->playStateInternal())
836 , m_compositorPendingChange(compositorPendingChange) 897 , m_compositorPendingChange(compositorPendingChange)
837 { 898 {
838 m_player->beginUpdatingState(); 899 m_player->beginUpdatingState();
839 m_player->updateCurrentTimingState(reason); 900 m_player->updateCurrentTimingState(reason);
840 } 901 }
841 902
842 AnimationPlayer::PlayStateUpdateScope::~PlayStateUpdateScope() 903 AnimationPlayer::PlayStateUpdateScope::~PlayStateUpdateScope()
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 visitor->trace(m_content); 997 visitor->trace(m_content);
937 visitor->trace(m_timeline); 998 visitor->trace(m_timeline);
938 visitor->trace(m_pendingFinishedEvent); 999 visitor->trace(m_pendingFinishedEvent);
939 visitor->trace(m_finishedPromise); 1000 visitor->trace(m_finishedPromise);
940 visitor->trace(m_readyPromise); 1001 visitor->trace(m_readyPromise);
941 EventTargetWithInlineData::trace(visitor); 1002 EventTargetWithInlineData::trace(visitor);
942 ActiveDOMObject::trace(visitor); 1003 ActiveDOMObject::trace(visitor);
943 } 1004 }
944 1005
945 } // namespace 1006 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698