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

Unified Diff: Source/core/animation/css/CSSAnimations.cpp

Issue 23874019: Web Animations CSS: Start running animations on the compositor (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/animation/css/CSSAnimations.cpp
diff --git a/Source/core/animation/css/CSSAnimations.cpp b/Source/core/animation/css/CSSAnimations.cpp
index 6ce4345c2c685b45d244aff8daf680c279ce6a48..0e6c4b14e5ee1a752e7a604b3bb2d9bea7871d14 100644
--- a/Source/core/animation/css/CSSAnimations.cpp
+++ b/Source/core/animation/css/CSSAnimations.cpp
@@ -33,6 +33,7 @@
#include "StylePropertyShorthand.h"
#include "core/animation/ActiveAnimations.h"
+#include "core/animation/CompositorAnimations.h"
#include "core/animation/DocumentTimeline.h"
#include "core/animation/KeyframeAnimationEffect.h"
#include "core/animation/css/CSSAnimatableValueFactory.h"
@@ -70,15 +71,17 @@ namespace {
bool isEarlierPhase(TimedItem::Phase target, TimedItem::Phase reference)
{
- ASSERT(target != TimedItem::PhaseNone);
- ASSERT(reference != TimedItem::PhaseNone);
+ // FIXME!
+ // ASSERT(target != TimedItem::PhaseNone);
+ // ASSERT(reference != TimedItem::PhaseNone);
return target < reference;
}
bool isLaterPhase(TimedItem::Phase target, TimedItem::Phase reference)
{
- ASSERT(target != TimedItem::PhaseNone);
- ASSERT(reference != TimedItem::PhaseNone);
+ // FIXME!
+ // ASSERT(target != TimedItem::PhaseNone);
+ // ASSERT(reference != TimedItem::PhaseNone);
return target > reference;
}
@@ -519,8 +522,9 @@ void CSSAnimations::maybeApplyPendingUpdate(Element* element)
// The event delegate is set on the the first animation only. We
// rely on the behavior of OwnPtr::release() to achieve this.
RefPtr<Animation> animation = Animation::create(element, inertAnimation->effect(), inertAnimation->specified(), Animation::DefaultPriority, eventDelegate.release());
- RefPtr<Player> player = element->document().timeline()->play(animation.get());
+ RefPtr<Player> player = element->document().timeline()->createPlayer(animation.get());
player->setPaused(inertAnimation->paused());
+ element->document().cssPendingAnimations().add(player.get());
players.add(player.release());
}
m_animations.set(iter->name, players);
@@ -542,7 +546,8 @@ void CSSAnimations::maybeApplyPendingUpdate(Element* element)
InertAnimation* inertAnimation = newTransition.animation.get();
OwnPtr<TransitionEventDelegate> eventDelegate = adoptPtr(new TransitionEventDelegate(element, id));
RefPtr<Animation> transition = Animation::create(element, inertAnimation->effect(), inertAnimation->specified(), Animation::TransitionPriority, eventDelegate.release());
- element->document().transitionTimeline()->play(transition.get());
+ RefPtr<Player> player = element->document().transitionTimeline()->createPlayer(transition.get());
+ element->document().cssPendingAnimations().add(player.get());
runningTransition.transition = transition.get();
m_transitions.set(id, runningTransition);
ASSERT(id != CSSPropertyInvalid);
@@ -686,6 +691,30 @@ void CSSAnimations::calculateTransitionCompositableValues(CSSAnimationUpdate* up
update->adoptCompositableValuesForTransitions(compositableValuesForTransitions);
}
+bool CSSAnimations::hasPendingCandidateForCompositorAnimation() const
+{
+ if (!m_pendingUpdate)
+ return false;
+
+ for (size_t i = 0; i < m_pendingUpdate->newAnimations().size(); ++i) {
+ HashSet<RefPtr<InertAnimation> > animations = m_pendingUpdate->newAnimations()[i].animations;
+ for (HashSet<RefPtr<InertAnimation> >::const_iterator it = animations.begin(); it != animations.end(); ++it) {
+ ASSERT((*it)->effect());
+ if (CompositorAnimations::instance()->isCandidateForCompositorAnimation((*it)->specified(), *(*it)->effect()))
+ return true;
+ }
+ }
+
+ for (size_t i = 0; i < m_pendingUpdate->newTransitions().size(); ++i) {
+ const InertAnimation* animation = m_pendingUpdate->newTransitions()[i].animation.get();
+ ASSERT(animation->effect());
+ if (CompositorAnimations::instance()->isCandidateForCompositorAnimation(animation->specified(), *animation->effect()))
+ return true;
+ }
+
+ return false;
+}
+
void CSSAnimations::AnimationEventDelegate::maybeDispatch(Document::ListenerType listenerType, const AtomicString& eventName, double elapsedTime)
{
if (m_target->document().hasListenerType(listenerType))

Powered by Google App Engine
This is Rietveld 408576698