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(); |