146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/compositor/layer_animator_collection.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <set> 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/time/time.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/compositor/layer_animator.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/gfx/frame_time.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace ui { 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)LayerAnimatorCollection::LayerAnimatorCollection( 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LayerAnimatorCollectionDelegate* delegate) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : delegate_(delegate), 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) last_tick_time_(gfx::FrameTime::Now()) { 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)LayerAnimatorCollection::~LayerAnimatorCollection() { 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void LayerAnimatorCollection::StartAnimator( 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<LayerAnimator> animator) { 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK_EQ(0U, animators_.count(animator)); 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!animators_.size()) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) last_tick_time_ = gfx::FrameTime::Now(); 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) animators_.insert(animator); 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (delegate_) 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->ScheduleAnimationForLayerCollection(); 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void LayerAnimatorCollection::StopAnimator( 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<LayerAnimator> animator) { 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK_GT(animators_.count(animator), 0U); 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) animators_.erase(animator); 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool LayerAnimatorCollection::HasActiveAnimators() const { 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return !animators_.empty(); 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void LayerAnimatorCollection::Progress(base::TimeTicks now) { 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) last_tick_time_ = now; 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::set<scoped_refptr<LayerAnimator> > list = animators_; 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (std::set<scoped_refptr<LayerAnimator> >::iterator iter = list.begin(); 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) iter != list.end(); 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ++iter) { 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Make sure the animator is still valid. 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (animators_.count(*iter) > 0) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (*iter)->Step(now); 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace ui 57