| // 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 "sky/scheduler/scheduler.h" |
| |
| namespace sky { |
| |
| 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. |
| } |
| } |