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

Unified Diff: cc/scheduler/scheduler.cc

Issue 1781663004: Allow null begin frame sources in cc::Scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scheduler_change_begin_frame_source
Patch Set: 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
« no previous file with comments | « cc/scheduler/scheduler.h ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/scheduler.cc
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 7dcf7389c7624c3f51c4b2e15a840aa51b524a65..3fb8b3b13de76c935daf8d28d9b8cdd529ac2cb9 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -73,8 +73,7 @@ Scheduler::Scheduler(
}
Scheduler::~Scheduler() {
- if (observing_begin_frame_source_)
- begin_frame_source_->RemoveObserver(this);
+ SetBeginFrameSource(nullptr);
}
base::TimeTicks Scheduler::Now() const {
@@ -115,12 +114,13 @@ void Scheduler::NotifyReadyToDraw() {
}
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 (!begin_frame_source_)
+ return;
if (observing_begin_frame_source_)
begin_frame_source_->AddObserver(this);
}
@@ -245,14 +245,16 @@ void Scheduler::SetupNextBeginFrameIfNeeded() {
if (state_machine_.BeginFrameNeeded()) {
// Call AddObserver as soon as possible.
observing_begin_frame_source_ = true;
- begin_frame_source_->AddObserver(this);
+ if (begin_frame_source_)
+ begin_frame_source_->AddObserver(this);
devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_,
true);
} else if (state_machine_.begin_impl_frame_state() ==
SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE) {
// Call RemoveObserver in between frames only.
observing_begin_frame_source_ = false;
- begin_frame_source_->RemoveObserver(this);
+ if (begin_frame_source_)
+ begin_frame_source_->RemoveObserver(this);
BeginImplFrameNotExpectedSoon();
devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_,
false);
@@ -381,7 +383,8 @@ void Scheduler::BeginRetroFrame() {
"expiration_time - now", (expiration_time - now).InMillisecondsF(),
"BeginFrameArgs", begin_retro_frame_args_.front().AsValue());
begin_retro_frame_args_.pop_front();
- begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
}
if (begin_retro_frame_args_.empty()) {
@@ -474,7 +477,8 @@ void Scheduler::BeginImplFrameWithDeadline(const BeginFrameArgs& args) {
can_activate_before_deadline)) {
TRACE_EVENT_INSTANT0("cc", "SkipBeginImplFrameToReduceLatency",
TRACE_EVENT_SCOPE_THREAD);
- begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
return;
}
@@ -506,7 +510,8 @@ void Scheduler::FinishImplFrame() {
ProcessScheduledActions();
client_->DidFinishImplFrame();
- begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(begin_retro_frame_args_.size());
begin_impl_frame_tracker_.Finish();
}
« no previous file with comments | « cc/scheduler/scheduler.h ('k') | cc/scheduler/scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698