| Index: cc/scheduler/scheduler_state_machine.cc
|
| diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
|
| index 5f56255926f47b667cf9f39aa28e85e3ab3dff05..2946a2c1dfa1fbf2d6e9d0b9ae8fc6d7f1c481bb 100644
|
| --- a/cc/scheduler/scheduler_state_machine.cc
|
| +++ b/cc/scheduler/scheduler_state_machine.cc
|
| @@ -97,6 +97,8 @@ const char* SchedulerStateMachine::CommitStateToString(CommitState state) {
|
| return "COMMIT_STATE_READY_TO_COMMIT";
|
| case COMMIT_STATE_WAITING_FOR_ACTIVATION:
|
| return "COMMIT_STATE_WAITING_FOR_ACTIVATION";
|
| + case COMMIT_STATE_WAITING_FOR_DRAW:
|
| + return "COMMIT_STATE_WAITING_FOR_DRAW";
|
| }
|
| NOTREACHED();
|
| return "???";
|
| @@ -592,9 +594,11 @@ void SchedulerStateMachine::UpdateStateOnCommit(bool commit_was_aborted) {
|
|
|
| if (commit_was_aborted || settings_.main_frame_before_activation_enabled) {
|
| commit_state_ = COMMIT_STATE_IDLE;
|
| + } else if (settings_.impl_side_painting) {
|
| + commit_state_ = COMMIT_STATE_WAITING_FOR_ACTIVATION;
|
| } else {
|
| - commit_state_ = settings_.impl_side_painting
|
| - ? COMMIT_STATE_WAITING_FOR_ACTIVATION
|
| + commit_state_ = settings_.main_thread_should_always_be_low_latency
|
| + ? COMMIT_STATE_WAITING_FOR_DRAW
|
| : COMMIT_STATE_IDLE;
|
| }
|
|
|
| @@ -637,8 +641,11 @@ void SchedulerStateMachine::UpdateStateOnCommit(bool commit_was_aborted) {
|
| }
|
|
|
| void SchedulerStateMachine::UpdateStateOnActivation() {
|
| - if (commit_state_ == COMMIT_STATE_WAITING_FOR_ACTIVATION)
|
| - commit_state_ = COMMIT_STATE_IDLE;
|
| + if (commit_state_ == COMMIT_STATE_WAITING_FOR_ACTIVATION) {
|
| + commit_state_ = settings_.main_thread_should_always_be_low_latency
|
| + ? COMMIT_STATE_WAITING_FOR_DRAW
|
| + : COMMIT_STATE_IDLE;
|
| + }
|
|
|
| if (output_surface_state_ == OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION)
|
| output_surface_state_ = OUTPUT_SURFACE_ACTIVE;
|
| @@ -656,6 +663,9 @@ void SchedulerStateMachine::UpdateStateOnDraw(bool did_request_swap) {
|
| if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW)
|
| forced_redraw_state_ = FORCED_REDRAW_STATE_IDLE;
|
|
|
| + if (commit_state_ == COMMIT_STATE_WAITING_FOR_DRAW)
|
| + commit_state_ = COMMIT_STATE_IDLE;
|
| +
|
| needs_redraw_ = false;
|
| active_tree_needs_first_draw_ = false;
|
|
|
| @@ -991,6 +1001,11 @@ void SchedulerStateMachine::NotifyReadyToCommit() {
|
| DCHECK(commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED)
|
| << AsValue()->ToString();
|
| commit_state_ = COMMIT_STATE_READY_TO_COMMIT;
|
| + // In main thread low latency mode, commit should happen right after
|
| + // BeginFrame, meaning when this function is called, next action should be
|
| + // commit.
|
| + if (settings_.main_thread_should_always_be_low_latency)
|
| + DCHECK(ShouldCommit());
|
| }
|
|
|
| void SchedulerStateMachine::BeginMainFrameAborted(bool did_handle) {
|
|
|