| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index f5c6d6012d6591bd020484c3cc9df5f0562471a7..7dcf7389c7624c3f51c4b2e15a840aa51b524a65 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,6 +68,7 @@ Scheduler::Scheduler(
|
| begin_impl_frame_deadline_closure_ = base::Bind(
|
| &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr());
|
|
|
| + SetBeginFrameSource(begin_frame_source);
|
| ProcessScheduledActions();
|
| }
|
|
|
| @@ -113,6 +114,17 @@ void Scheduler::NotifyReadyToDraw() {
|
| ProcessScheduledActions();
|
| }
|
|
|
| +void Scheduler::SetBeginFrameSource(BeginFrameSource* source) {
|
| + DCHECK(source);
|
| + if (source == begin_frame_source_)
|
| + return;
|
| + 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);
|
| +}
|
| +
|
| void Scheduler::SetNeedsBeginMainFrame() {
|
| state_machine_.SetNeedsBeginMainFrame();
|
| ProcessScheduledActions();
|
| @@ -744,7 +756,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();
|
|
|