| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index 68214cd96b762f5ba0c96581f6ba0c0fb00c1a38..9fcf7b8eb9cf3a9fcac7c7cc49aeaeafa572fc9d 100644
|
| --- a/cc/scheduler/scheduler.cc
|
| +++ b/cc/scheduler/scheduler.cc
|
| @@ -87,6 +87,8 @@ Scheduler::Scheduler(
|
| primary_frame_source_internal_(external_begin_frame_source.Pass()),
|
| background_frame_source_internal_(),
|
| vsync_observer_(NULL),
|
| + authoritative_vsync_interval_(base::TimeDelta()),
|
| + last_vsync_timebase_(base::TimeTicks()),
|
| throttle_frame_production_(scheduler_settings.throttle_frame_production),
|
| settings_(scheduler_settings),
|
| client_(client),
|
| @@ -148,9 +150,14 @@ base::TimeTicks Scheduler::Now() const {
|
|
|
| void Scheduler::CommitVSyncParameters(base::TimeTicks timebase,
|
| base::TimeDelta interval) {
|
| - // TODO(brianderson): We should not be receiving 0 intervals.
|
| - if (interval == base::TimeDelta())
|
| + if (authoritative_vsync_interval_ != base::TimeDelta()) {
|
| + interval = authoritative_vsync_interval_;
|
| + } else if (interval == base::TimeDelta()) {
|
| + // TODO(brianderson): We should not be receiving 0 intervals.
|
| interval = BeginFrameArgs::DefaultInterval();
|
| + }
|
| +
|
| + last_vsync_timebase_ = timebase;
|
|
|
| if (vsync_observer_)
|
| vsync_observer_->OnUpdateVSyncParameters(timebase, interval);
|
| @@ -431,6 +438,12 @@ void Scheduler::SetChildrenNeedBeginFrames(bool children_need_begin_frames) {
|
| ProcessScheduledActions();
|
| }
|
|
|
| +void Scheduler::SetAuthoritativeVSyncInterval(const base::TimeDelta& interval) {
|
| + authoritative_vsync_interval_ = interval;
|
| + if (vsync_observer_)
|
| + vsync_observer_->OnUpdateVSyncParameters(last_vsync_timebase_, interval);
|
| +}
|
| +
|
| // BeginRetroFrame is called for BeginFrames that we've deferred because
|
| // the scheduler was in the middle of processing a previous BeginFrame.
|
| void Scheduler::BeginRetroFrame() {
|
|
|