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

Unified Diff: ui/compositor/layer.cc

Issue 291843012: compositor: Tick the UI animations from cc, instead of from timer callbacks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 7 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
Index: ui/compositor/layer.cc
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index cfa02f27f7e64d399f7af7e887b17c1ed8e21037..f0998117d9d45310354033fd84c05fa320508a61 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -159,6 +159,11 @@ void Layer::Add(Layer* child) {
child->OnDeviceScaleFactorChanged(device_scale_factor_);
if (GetCompositor())
child->SendPendingThreadedAnimations();
+ if (child->GetAnimator() && child->GetAnimator()->is_animating()) {
piman 2014/05/23 21:38:56 nit: GetAnimator() is non-trivial: 1- can we call
sadrul 2014/05/23 21:56:11 Done. Added Layer::IsAnimating() const { return an
+ LayerAnimatorCollection* collection = GetLayerAnimatorCollection();
+ if (collection)
+ collection->StartAnimator(child->GetAnimator());
+ }
}
void Layer::Remove(Layer* child) {
@@ -167,6 +172,11 @@ void Layer::Remove(Layer* child) {
if (child->GetAnimator()) {
child->GetAnimator()->StopAnimatingProperty(
ui::LayerAnimationElement::BOUNDS);
+ if (child->GetAnimator()->is_animating()) {
+ LayerAnimatorCollection* collection = GetLayerAnimatorCollection();
+ if (collection)
+ collection->StopAnimator(child->GetAnimator());
+ }
}
std::vector<Layer*>::iterator i =
std::find(children_.begin(), children_.end(), child);
@@ -874,6 +884,11 @@ void Layer::RemoveThreadedAnimation(int animation_id) {
pending_threaded_animations_.end());
}
+LayerAnimatorCollection* Layer::GetLayerAnimatorCollection() {
+ Compositor* compositor = GetCompositor();
+ return compositor ? compositor->layer_animator_collection() : NULL;
+}
+
void Layer::SendPendingThreadedAnimations() {
for (cc::ScopedPtrVector<cc::Animation>::iterator it =
pending_threaded_animations_.begin();

Powered by Google App Engine
This is Rietveld 408576698