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

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: Rebase and rename hasActiveAnimationOnCompositor to hasActiveAnimationsOnCompositor 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
« no previous file with comments | « Source/core/animation/css/CSSAnimations.h ('k') | Source/core/animation/css/CSSPendingAnimations.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/animation/css/CSSAnimations.cpp
diff --git a/Source/core/animation/css/CSSAnimations.cpp b/Source/core/animation/css/CSSAnimations.cpp
index 01392dea61accb0037a44497fcf2a1680cb567bf..9b4861ef21f020aaf447071233897df678f2087d 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"
@@ -521,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());
- Player* player = element->document().timeline()->play(animation.get());
+ Player* player = element->document().timeline()->createPlayer(animation.get());
player->setPaused(inertAnimation->paused());
+ element->document().cssPendingAnimations().add(player);
players.add(player);
}
m_animations.set(iter->name, players);
@@ -544,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);
@@ -688,6 +691,35 @@ void CSSAnimations::calculateTransitionCompositableValues(CSSAnimationUpdate* up
update->adoptCompositableValuesForTransitions(compositableValuesForTransitions);
}
+bool CSSAnimations::shouldCompositeForPendingAnimations(bool renderViewInCompositingMode) 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());
+ AnimationEffect* effect = (*it)->effect();
+ // FIXME: Perhaps pass a predicate function so that we can remove the explicit checks from this file?
+ if ((effect->affects(CSSPropertyOpacity) && renderViewInCompositingMode)
+ || effect->affects(CSSPropertyWebkitTransform)
+ || effect->affects(CSSPropertyWebkitFilter))
+ return true;
+ }
+ }
+
+ for (size_t i = 0; i < m_pendingUpdate->newTransitions().size(); ++i) {
+ AnimationEffect* effect = m_pendingUpdate->newTransitions()[i].animation->effect();
+ if ((effect->affects(CSSPropertyOpacity) && renderViewInCompositingMode)
+ || effect->affects(CSSPropertyWebkitTransform)
+ || effect->affects(CSSPropertyWebkitFilter))
+ return true;
+ }
+
+ return false;
+}
+
void CSSAnimations::AnimationEventDelegate::maybeDispatch(Document::ListenerType listenerType, const AtomicString& eventName, double elapsedTime)
{
if (m_target->document().hasListenerType(listenerType))
« no previous file with comments | « Source/core/animation/css/CSSAnimations.h ('k') | Source/core/animation/css/CSSPendingAnimations.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698