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