| Index: mc/scheduler/scheduler.cc
|
| diff --git a/mc/scheduler/scheduler.cc b/mc/scheduler/scheduler.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..788c702ccfb974d1c483d06e19ef2fa4af156e15
|
| --- /dev/null
|
| +++ b/mc/scheduler/scheduler.cc
|
| @@ -0,0 +1,45 @@
|
| +// 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 "mc/scheduler/scheduler.h"
|
| +
|
| +namespace mc {
|
| +
|
| +Scheduler::Client::~Client() {
|
| +}
|
| +
|
| +Scheduler::Scheduler(Client* client,
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
| + : client_(client), timer_(this, task_runner) {
|
| +}
|
| +
|
| +Scheduler::~Scheduler() {
|
| +}
|
| +
|
| +void Scheduler::SetNeedsFrame() {
|
| + timer_.SetEnabled(true);
|
| +}
|
| +
|
| +void Scheduler::UpdateFrameDuration(base::TimeDelta estimate) {
|
| + frame_duration_ = estimate;
|
| + UpdateTimerInterval();
|
| +}
|
| +
|
| +void Scheduler::UpdateVSync(const TimeInterval& vsync) {
|
| + vsync_ = vsync;
|
| + UpdateTimerInterval();
|
| +}
|
| +
|
| +void Scheduler::UpdateTimerInterval() {
|
| + TimeInterval interval = vsync_;
|
| + interval.base -= frame_duration_;
|
| + timer_.SetInterval(interval);
|
| +}
|
| +
|
| +void Scheduler::OnTimerTick(base::TimeTicks now) {
|
| + timer_.SetEnabled(false);
|
| + client_->BeginFrame(now, vsync_.NextAfter(now));
|
| + // We might be deleted here.
|
| +}
|
| +}
|
|
|