| Index: cc/scheduler/begin_frame_manager.cc
|
| diff --git a/cc/scheduler/begin_frame_manager.cc b/cc/scheduler/begin_frame_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..43572a6675d0545023cb981ac609bbf2f66ca5f6
|
| --- /dev/null
|
| +++ b/cc/scheduler/begin_frame_manager.cc
|
| @@ -0,0 +1,57 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "cc/scheduler/begin_frame_manager.h"
|
| +
|
| +namespace cc {
|
| +
|
| +BeginFrameManager::BeginFrameManager() : delegate_(NULL),
|
| + num_of_observers_(0) {}
|
| +
|
| +BeginFrameManager::~BeginFrameManager() {
|
| + DCHECK_EQ(0, num_of_observers_);
|
| +}
|
| +
|
| +void BeginFrameManager::SendBeginFrameToChildren(const BeginFrameArgs& args) {
|
| + DCHECK(CalledOnValidThread());
|
| + FOR_EACH_OBSERVER(Observer,
|
| + observer_list_,
|
| + OnSendBeginFrame(args));
|
| + last_begin_frame_args_ = args;
|
| +}
|
| +
|
| +void BeginFrameManager::SetAuthoritativeVSyncInterval(
|
| + base::TimeDelta interval) const {
|
| + DCHECK(delegate_);
|
| + delegate_->SetAuthoritativeVSyncInterval(interval);
|
| +}
|
| +
|
| +void BeginFrameManager::AddObserver(
|
| + Observer* observer,
|
| + const BeginFrameArgs& last_begin_frame_args_sent_to_observer) {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK_GE(num_of_observers_, 0);
|
| +
|
| + observer_list_.AddObserver(observer);
|
| + if (++num_of_observers_ == 1)
|
| + delegate_->SetChildrenNeedBeginFrames(true);
|
| +
|
| + // If |last_begin_frame_args_| is still effective, send it to the new
|
| + // |observer| immediately.
|
| + if (!last_begin_frame_args_sent_to_observer.deadline.is_null() &&
|
| + last_begin_frame_args_sent_to_observer != last_begin_frame_args_ &&
|
| + last_begin_frame_args_.deadline > base::TimeTicks::Now())
|
| + observer->OnSendBeginFrame(last_begin_frame_args_);
|
| +}
|
| +
|
| +void BeginFrameManager::RemoveObserver(Observer* observer) {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK_GE(num_of_observers_, 1);
|
| +
|
| + observer_list_.RemoveObserver(observer);
|
| + if (--num_of_observers_ == 0)
|
| + delegate_->SetChildrenNeedBeginFrames(false);
|
| +}
|
| +
|
| +} // namespace cc
|
|
|