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