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. |
+} |
+} |