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

Unified Diff: cc/scheduler/scheduler.cc

Issue 577643002: Making OutputSurface a begin frame source and vsync source. (Closed)
Patch Set: Created 6 years, 3 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_state_machine.h » ('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 906e85a31a9cabeb2c06b85ccd5aec9ed52eb26f..a05994fbde21c2ea3d4fbcff089140f7b7faac79 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -61,11 +61,9 @@ BeginFrameSource* Scheduler::GetPrimaryBeginFrameSource() {
BackToBackBeginFrameSource::Create(task_runner_.get());
return primary_frame_source_internal_.get();
} else if (settings_.begin_frame_scheduling_enabled) {
- TRACE_EVENT1("cc",
- "Scheduler::Scheduler()",
- "PrimaryFrameSource",
- "SchedulerClient");
- return client_->GetExternalBeginFrameSource();
+ TRACE_EVENT1(
+ "cc", "Scheduler::Scheduler()", "PrimaryFrameSource", "OutputSurface");
+ return NULL;
} else {
TRACE_EVENT1("cc",
"Scheduler::Scheduler()",
@@ -130,13 +128,17 @@ void Scheduler::SetCanStart() {
ProcessScheduledActions();
}
-void Scheduler::SetVisible(bool visible) {
- state_machine_.SetVisible(visible);
- if (visible) {
+void Scheduler::UpdateActiveFrameSource() {
+ if (state_machine_.visible() && primary_frame_source_) {
frame_source_->SetActiveSource(primary_frame_source_);
} else {
frame_source_->SetActiveSource(background_frame_source_);
}
+}
+
+void Scheduler::SetVisible(bool visible) {
+ state_machine_.SetVisible(visible);
+ UpdateActiveFrameSource();
ProcessScheduledActions();
}
@@ -219,16 +221,33 @@ void Scheduler::DidManageTiles() {
void Scheduler::DidLoseOutputSurface() {
TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface");
state_machine_.DidLoseOutputSurface();
+
+ if (settings_.throttle_frame_production &&
+ settings_.begin_frame_scheduling_enabled && primary_frame_source_) {
+ frame_source_->RemoveSource(primary_frame_source_);
+ primary_frame_source_ = NULL;
+ UpdateActiveFrameSource();
+ }
+
if (frame_source_->NeedsBeginFrames())
frame_source_->SetNeedsBeginFrames(false);
+
begin_retro_frame_args_.clear();
ProcessScheduledActions();
}
-void Scheduler::DidCreateAndInitializeOutputSurface() {
+void Scheduler::DidCreateAndInitializeOutputSurface(
+ OutputSurface* output_surface) {
TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface");
- DCHECK(!frame_source_->NeedsBeginFrames());
DCHECK(begin_impl_frame_deadline_task_.IsCancelled());
+
+ if (settings_.throttle_frame_production &&
+ settings_.begin_frame_scheduling_enabled) {
+ DCHECK(!primary_frame_source_);
+ primary_frame_source_ = output_surface;
+ frame_source_->AddSource(primary_frame_source_);
+ }
+ UpdateActiveFrameSource();
state_machine_.DidCreateAndInitializeOutputSurface();
ProcessScheduledActions();
}
« no previous file with comments | « cc/scheduler/scheduler.h ('k') | cc/scheduler/scheduler_state_machine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698