Chromium Code Reviews| Index: cc/scheduler/scheduler.cc |
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
| index 143c3ff54489573b1e22bf3a2a35ee17fecb1d95..95e91b9c198b888e104f327f878002c9c747a566 100644 |
| --- a/cc/scheduler/scheduler.cc |
| +++ b/cc/scheduler/scheduler.cc |
| @@ -85,6 +85,7 @@ Scheduler::Scheduler( |
| primary_frame_source_internal_(external_begin_frame_source.Pass()), |
| background_frame_source_internal_(), |
| vsync_observer_(NULL), |
| + authoritative_vsync_interval_(base::TimeDelta()), |
| settings_(scheduler_settings), |
| client_(client), |
| layer_tree_host_id_(layer_tree_host_id), |
| @@ -166,9 +167,12 @@ void Scheduler::OnPowerStateChange(bool on_battery_power) { |
| 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(); |
| + } |
| if (vsync_observer_) |
| vsync_observer_->OnUpdateVSyncParameters(timebase, interval); |
| @@ -449,6 +453,10 @@ void Scheduler::SetChildrenNeedBeginFrames(bool children_need_begin_frames) { |
| DCHECK_EQ(state_machine_.NextAction(), SchedulerStateMachine::ACTION_NONE); |
| } |
| +void Scheduler::SetAuthoritativeVSyncInterval(base::TimeDelta interval) { |
|
simonhong
2014/12/11 23:09:46
nit: How about add DCHECK(settings_.forward_begin_
|
| + authoritative_vsync_interval_ = 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() { |