Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3848)

Unified Diff: cc/scheduler/scheduler.cc

Issue 1774323003: Allow cc::Scheduler begin frame source to be changed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scheduler_always_external
Patch Set: Add a null check for tracing too Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698