blob: 371d49db0efdfedb7e953b46006b23e428b3b1e9 [file] [log] [blame]
// 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.
}
}