| Index: cc/scheduler/scheduler.cc
|
| diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
|
| index d2520335c0cd77a605b651ec633c04462f65828c..340936166ee300e9ca5d87bc8876f105d156f308 100644
|
| --- a/cc/scheduler/scheduler.cc
|
| +++ b/cc/scheduler/scheduler.cc
|
| @@ -169,6 +169,11 @@ void Scheduler::NotifyReadyToActivate() {
|
| ProcessScheduledActions();
|
| }
|
|
|
| +void Scheduler::SetRequiresHighResToDraw(bool required) {
|
| + state_machine_.SetRequiresHighResToDraw(required);
|
| + ProcessScheduledActions();
|
| +}
|
| +
|
| void Scheduler::NotifyReadyToDraw() {
|
| // Future work might still needed for crbug.com/352894.
|
| state_machine_.NotifyReadyToDraw();
|
| @@ -200,9 +205,9 @@ void Scheduler::SetNeedsAnimate() {
|
| ProcessScheduledActions();
|
| }
|
|
|
| -void Scheduler::SetNeedsPrepareTiles() {
|
| +void Scheduler::SetNeedsPrepareTiles(bool for_commit) {
|
| DCHECK(!IsInsideAction(SchedulerStateMachine::ACTION_PREPARE_TILES));
|
| - state_machine_.SetNeedsPrepareTiles();
|
| + state_machine_.SetNeedsPrepareTiles(for_commit);
|
| ProcessScheduledActions();
|
| }
|
|
|
| @@ -248,10 +253,6 @@ void Scheduler::BeginMainFrameAborted(CommitEarlyOutReason reason) {
|
| ProcessScheduledActions();
|
| }
|
|
|
| -void Scheduler::DidPrepareTiles() {
|
| - state_machine_.DidPrepareTiles();
|
| -}
|
| -
|
| void Scheduler::DidLoseOutputSurface() {
|
| TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface");
|
| begin_retro_frame_args_.clear();
|
| @@ -292,8 +293,9 @@ base::TimeTicks Scheduler::LastBeginImplFrameTime() {
|
| void Scheduler::SetupNextBeginFrameIfNeeded() {
|
| // Never call SetNeedsBeginFrames if the frame source already has the right
|
| // value.
|
| - if (frame_source_->NeedsBeginFrames() != state_machine_.BeginFrameNeeded()) {
|
| - if (state_machine_.BeginFrameNeeded()) {
|
| + bool begin_frames_needed = state_machine_.BeginFrameNeeded();
|
| + if (frame_source_->NeedsBeginFrames() != begin_frames_needed) {
|
| + if (begin_frames_needed) {
|
| // Call SetNeedsBeginFrames(true) as soon as possible.
|
| frame_source_->SetNeedsBeginFrames(true);
|
| } else if (state_machine_.begin_impl_frame_state() ==
|
| @@ -302,6 +304,7 @@ void Scheduler::SetupNextBeginFrameIfNeeded() {
|
| frame_source_->SetNeedsBeginFrames(false);
|
| client_->SendBeginMainFrameNotExpectedSoon();
|
| }
|
| + state_machine_.NotifyBeginFrameSourceActive(begin_frames_needed);
|
| }
|
|
|
| PostBeginRetroFrameIfNeeded();
|
| @@ -576,6 +579,13 @@ void Scheduler::ScheduleBeginImplFrameDeadline() {
|
| begin_impl_frame_args_.frame_time + begin_impl_frame_args_.interval;
|
| break;
|
| case SchedulerStateMachine::
|
| + BEGIN_IMPL_FRAME_DEADLINE_MODE_TRY_TO_AVOID_CHECKERBOARD:
|
| + // We will wait up until this deadline for the ReadyToDraw signal.
|
| + // TODO(brianderson): Use a different timeout for touch vs. mouse wheel.
|
| + deadline = begin_impl_frame_args_.frame_time +
|
| + (1 * begin_impl_frame_args_.interval);
|
| + break;
|
| + case SchedulerStateMachine::
|
| BEGIN_IMPL_FRAME_DEADLINE_MODE_BLOCKED_ON_READY_TO_DRAW:
|
| // We are blocked because we are waiting for ReadyToDraw signal. We would
|
| // post deadline after we received ReadyToDraw singal.
|
| @@ -639,7 +649,12 @@ void Scheduler::PollToAdvanceCommitState() {
|
|
|
| void Scheduler::DrawAndSwapIfPossible() {
|
| DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible();
|
| - state_machine_.DidDrawIfPossibleCompleted(result);
|
| + state_machine_.SetDrawResult(result);
|
| +}
|
| +
|
| +void Scheduler::DrawAndSwapForced() {
|
| + DrawResult result = client_->ScheduledActionDrawAndSwapForced();
|
| + state_machine_.SetDrawResult(result);
|
| }
|
|
|
| void Scheduler::SetDeferCommits(bool defer_commits) {
|
| @@ -668,56 +683,60 @@ void Scheduler::ProcessScheduledActions() {
|
| VLOG(2) << "Scheduler::ProcessScheduledActions: "
|
| << SchedulerStateMachine::ActionToString(action) << " "
|
| << state_machine_.GetStatesForDebugging();
|
| - state_machine_.UpdateState(action);
|
| - base::AutoReset<SchedulerStateMachine::Action>
|
| - mark_inside_action(&inside_action_, action);
|
| - switch (action) {
|
| - case SchedulerStateMachine::ACTION_NONE:
|
| - break;
|
| - case SchedulerStateMachine::ACTION_ANIMATE:
|
| - client_->ScheduledActionAnimate();
|
| - break;
|
| - case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME:
|
| - client_->ScheduledActionSendBeginMainFrame();
|
| - break;
|
| - case SchedulerStateMachine::ACTION_COMMIT: {
|
| - // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is
|
| - // fixed.
|
| - tracked_objects::ScopedTracker tracking_profile4(
|
| - FROM_HERE_WITH_EXPLICIT_FUNCTION(
|
| - "461509 Scheduler::ProcessScheduledActions4"));
|
| - client_->ScheduledActionCommit();
|
| - break;
|
| - }
|
| - case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE:
|
| - client_->ScheduledActionActivateSyncTree();
|
| - break;
|
| - case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: {
|
| - // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is
|
| - // fixed.
|
| - tracked_objects::ScopedTracker tracking_profile6(
|
| - FROM_HERE_WITH_EXPLICIT_FUNCTION(
|
| - "461509 Scheduler::ProcessScheduledActions6"));
|
| - DrawAndSwapIfPossible();
|
| - break;
|
| - }
|
| - case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED:
|
| - client_->ScheduledActionDrawAndSwapForced();
|
| - break;
|
| - case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT:
|
| - // No action is actually performed, but this allows the state machine to
|
| - // advance out of its waiting to draw state without actually drawing.
|
| - break;
|
| - case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION:
|
| - client_->ScheduledActionBeginOutputSurfaceCreation();
|
| - break;
|
| - case SchedulerStateMachine::ACTION_PREPARE_TILES:
|
| - client_->ScheduledActionPrepareTiles();
|
| - break;
|
| - case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: {
|
| - client_->ScheduledActionInvalidateOutputSurface();
|
| - break;
|
| + {
|
| + base::AutoReset<SchedulerStateMachine::Action> mark_inside_action(
|
| + &inside_action_, action);
|
| + switch (action) {
|
| + case SchedulerStateMachine::ACTION_NONE:
|
| + break;
|
| + case SchedulerStateMachine::ACTION_ANIMATE:
|
| + client_->ScheduledActionAnimate();
|
| + break;
|
| + case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME:
|
| + client_->ScheduledActionSendBeginMainFrame();
|
| + break;
|
| + case SchedulerStateMachine::ACTION_COMMIT: {
|
| + // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is
|
| + // fixed.
|
| + tracked_objects::ScopedTracker tracking_profile4(
|
| + FROM_HERE_WITH_EXPLICIT_FUNCTION(
|
| + "461509 Scheduler::ProcessScheduledActions4"));
|
| + client_->ScheduledActionCommit();
|
| + break;
|
| + }
|
| + case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE:
|
| + client_->ScheduledActionActivateSyncTree();
|
| + break;
|
| + case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: {
|
| + // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is
|
| + // fixed.
|
| + tracked_objects::ScopedTracker tracking_profile6(
|
| + FROM_HERE_WITH_EXPLICIT_FUNCTION(
|
| + "461509 Scheduler::ProcessScheduledActions6"));
|
| + DrawAndSwapIfPossible();
|
| + break;
|
| + }
|
| + case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED:
|
| + DrawAndSwapForced();
|
| + break;
|
| + case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT:
|
| + // No action is actually performed, but this allows the state machine
|
| + // to
|
| + // advance out of its waiting to draw state without actually drawing.
|
| + state_machine_.SetDrawResult(DRAW_SUCCESS);
|
| + break;
|
| + case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION:
|
| + client_->ScheduledActionBeginOutputSurfaceCreation();
|
| + break;
|
| + case SchedulerStateMachine::ACTION_PREPARE_TILES:
|
| + client_->ScheduledActionPrepareTiles();
|
| + break;
|
| + case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: {
|
| + client_->ScheduledActionInvalidateOutputSurface();
|
| + break;
|
| + }
|
| }
|
| + state_machine_.UpdateState(action);
|
| }
|
| } while (action != SchedulerStateMachine::ACTION_NONE);
|
|
|
|
|