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

Unified Diff: cc/layer_tree_host.cc

Issue 11783037: Not for review: Enable accelerated animations for orphaned layers (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Wait for layout to complete before starting orphaned animations Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layer_tree_host.h ('k') | cc/test/animation_test_common.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layer_tree_host.cc
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc
index a6e2a76179913ae4edee0ed72f7d5a19e2aae2b5..e70dec205d83e244f801f13f2c4d52d99eda5d2f 100644
--- a/cc/layer_tree_host.cc
+++ b/cc/layer_tree_host.cc
@@ -90,8 +90,9 @@ LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client, const LayerTreeSetting
, m_backgroundColor(SK_ColorWHITE)
, m_hasTransparentBackground(false)
, m_partialTextureUpdateRequests(0)
- , m_animationRegistrar(AnimationRegistrar::create())
{
+ if (m_settings.acceleratedAnimationEnabled)
+ m_animationRegistrar = AnimationRegistrar::create();
numLayerTreeInstances++;
}
@@ -219,11 +220,11 @@ void LayerTreeHost::didBeginFrame()
m_client->didBeginFrame();
}
-void LayerTreeHost::updateAnimations(base::TimeTicks frameBeginTime)
+void LayerTreeHost::updateAnimations(base::TimeTicks monotonicFrameBeginTime, base::Time wallClockFrameBeginTime)
{
m_animating = true;
- m_client->animate((frameBeginTime - base::TimeTicks()).InSecondsF());
- animateLayers(frameBeginTime);
+ m_client->animate((monotonicFrameBeginTime - base::TimeTicks()).InSecondsF());
+ animateLayers(monotonicFrameBeginTime, wallClockFrameBeginTime);
m_animating = false;
m_renderingStats.numAnimationFrames++;
@@ -835,18 +836,35 @@ bool LayerTreeHost::blocksPendingCommit() const
return m_rootLayer->blocksPendingCommitRecursive();
}
-void LayerTreeHost::animateLayers(base::TimeTicks time)
+void LayerTreeHost::didUpdateLayout()
+{
+ AnimationRegistrar::AnimationControllerMap copy = m_animationRegistrar->active_animation_controllers();
+ for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin(); iter != copy.end(); ++iter) {
+ if ((*iter).second->orphanWaitStatus() == LayerAnimationController::WaitingForLayout)
+ (*iter).second->setOrphanWaitStatus(LayerAnimationController::WaitedForLayout);
+ }
+}
+
+void LayerTreeHost::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime)
{
if (!m_settings.acceleratedAnimationEnabled || m_animationRegistrar->active_animation_controllers().empty())
return;
TRACE_EVENT0("cc", "LayerTreeHostImpl::animateLayers");
- double monotonicTime = (time - base::TimeTicks()).InSecondsF();
+ double monotonicTimeInSeconds = (monotonicTime - base::TimeTicks()).InSecondsF();
+ scoped_ptr<AnimationEventsVector> events(make_scoped_ptr(new AnimationEventsVector));
AnimationRegistrar::AnimationControllerMap copy = m_animationRegistrar->active_animation_controllers();
- for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin(); iter != copy.end(); ++iter)
- (*iter).second->animate(monotonicTime, 0);
+ for (AnimationRegistrar::AnimationControllerMap::iterator iter = copy.begin(); iter != copy.end(); ++iter) {
+ if ((*iter).second->hasNonOrphanedObserver())
+ (*iter).second->animate(monotonicTimeInSeconds, 0);
+ else if ((*iter).second->orphanWaitStatus() == LayerAnimationController::WaitedForLayout)
+ (*iter).second->animate(monotonicTimeInSeconds, events.get());
+ }
+
+ if (!events->empty())
+ setAnimationEvents(events.Pass(), wallClockTime);
}
void LayerTreeHost::setAnimationEventsRecursive(const AnimationEventsVector& events, Layer* layer, base::Time wallClockTime)
« no previous file with comments | « cc/layer_tree_host.h ('k') | cc/test/animation_test_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698