Chromium Code Reviews| Index: cc/scheduler/scheduler.cc |
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc |
| index 3f5c3a39e3a429680375f6cb665bff39dc519c0f..394986ec55981df2a1191e32820b4b984751fdd7 100644 |
| --- a/cc/scheduler/scheduler.cc |
| +++ b/cc/scheduler/scheduler.cc |
| @@ -49,7 +49,7 @@ Scheduler::Scheduler( |
| client_(client), |
| layer_tree_host_id_(layer_tree_host_id), |
| task_runner_(task_runner), |
| - begin_frame_source_(begin_frame_source), |
| + begin_frame_source_(nullptr), |
| observing_begin_frame_source_(false), |
| compositor_timing_history_(std::move(compositor_timing_history)), |
| begin_impl_frame_deadline_mode_( |
| @@ -68,7 +68,7 @@ Scheduler::Scheduler( |
| begin_impl_frame_deadline_closure_ = base::Bind( |
| &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr()); |
| - begin_frame_source_->SetClientReady(); |
| + SetBeginFrameSource(begin_frame_source); |
| ProcessScheduledActions(); |
| } |
| @@ -114,6 +114,16 @@ void Scheduler::NotifyReadyToDraw() { |
| ProcessScheduledActions(); |
| } |
| +void Scheduler::SetBeginFrameSource(BeginFrameSource* source) { |
|
Sami
2016/03/09 17:09:15
Not sure how often this would actually be used, bu
enne (OOO)
2016/03/09 19:46:10
Yeah, I think something needs to change here, as t
|
| + DCHECK(source); |
| + if (begin_frame_source_ && observing_begin_frame_source_) |
| + begin_frame_source_->RemoveObserver(this); |
| + begin_frame_source_ = source; |
| + if (observing_begin_frame_source_) |
| + begin_frame_source_->AddObserver(this); |
| + begin_frame_source_->SetClientReady(); |
|
Sami
2016/03/09 17:09:15
One problem here is that some begin frame sources
|
| +} |
| + |
| void Scheduler::SetNeedsBeginMainFrame() { |
| state_machine_.SetNeedsBeginMainFrame(); |
| ProcessScheduledActions(); |
| @@ -745,7 +755,7 @@ void Scheduler::AsValueInto(base::trace_event::TracedValue* state) const { |
| TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
| TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"), |
| &frame_tracing_enabled); |
| - if (frame_tracing_enabled) { |
| + if (frame_tracing_enabled && begin_frame_source_) { |
| state->BeginDictionary("begin_frame_source_"); |
| begin_frame_source_->AsValueInto(state); |
| state->EndDictionary(); |