Chromium Code Reviews| Index: cc/scheduler/scheduler_state_machine.cc |
| diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc |
| index 334c8480c19b8c26978a02ff6bb913f95a7d543f..02e4a1ed508071bcfd930fbdcb361e4eadffd396 100644 |
| --- a/cc/scheduler/scheduler_state_machine.cc |
| +++ b/cc/scheduler/scheduler_state_machine.cc |
| @@ -27,7 +27,7 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
| last_frame_number_begin_main_frame_sent_(-1), |
| last_frame_number_update_visible_tiles_was_called_(-1), |
| manage_tiles_funnel_(0), |
| - consecutive_failed_draws_(0), |
| + consecutive_checkerboard_animations_(0), |
| needs_redraw_(false), |
| needs_manage_tiles_(false), |
| swap_used_incomplete_tile_(false), |
| @@ -240,8 +240,8 @@ scoped_ptr<base::Value> SchedulerStateMachine::AsValue() const { |
| last_frame_number_update_visible_tiles_was_called_); |
| minor_state->SetInteger("manage_tiles_funnel", manage_tiles_funnel_); |
| - minor_state->SetInteger("consecutive_failed_draws", |
| - consecutive_failed_draws_); |
| + minor_state->SetInteger("consecutive_checkerboard_animations", |
| + consecutive_checkerboard_animations_); |
| minor_state->SetBoolean("needs_redraw", needs_redraw_); |
| minor_state->SetBoolean("needs_manage_tiles", needs_manage_tiles_); |
| minor_state->SetBoolean("swap_used_incomplete_tile", |
| @@ -1022,29 +1022,41 @@ void SchedulerStateMachine::SetSmoothnessTakesPriority( |
| smoothness_takes_priority_ = smoothness_takes_priority; |
| } |
| -void SchedulerStateMachine::DidDrawIfPossibleCompleted(bool success) { |
| - draw_if_possible_failed_ = !success; |
| - if (draw_if_possible_failed_) { |
| - needs_redraw_ = true; |
| - |
| - // If we're already in the middle of a redraw, we don't need to |
| - // restart it. |
| - if (forced_redraw_state_ != FORCED_REDRAW_STATE_IDLE) |
| - return; |
| - |
| - needs_commit_ = true; |
| - consecutive_failed_draws_++; |
| - if (settings_.timeout_and_draw_when_animation_checkerboards && |
| - consecutive_failed_draws_ >= |
| - settings_.maximum_number_of_failed_draws_before_draw_is_forced_) { |
| - consecutive_failed_draws_ = 0; |
| - // We need to force a draw, but it doesn't make sense to do this until |
| - // we've committed and have new textures. |
| - forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_COMMIT; |
| - } |
| - } else { |
| - consecutive_failed_draws_ = 0; |
| - forced_redraw_state_ = FORCED_REDRAW_STATE_IDLE; |
| +void SchedulerStateMachine::DidDrawIfPossibleCompleted( |
| + DrawSwapReadbackResult::DrawResult result) { |
| + switch (result) { |
| + case DrawSwapReadbackResult::INVALID_RESULT: |
| + // Uninitialized DrawSwapReadbackResult. |
| + NOTREACHED(); |
| + break; |
| + case DrawSwapReadbackResult::DID_DRAW: |
| + consecutive_checkerboard_animations_ = 0; |
| + forced_redraw_state_ = FORCED_REDRAW_STATE_IDLE; |
| + break; |
| + case DrawSwapReadbackResult::DRAW_ABORTED_CANT_DRAW: |
| + case DrawSwapReadbackResult::DRAW_ABORTED_NO_TREE: |
| + case DrawSwapReadbackResult::DRAW_ABORTED_NO_RENDERER: |
| + // Nothing to do in these cases. External state needs to change first. |
|
brianderson
2014/01/29 01:31:22
I suppose this is one of the few logic changes, bu
|
| + break; |
| + case DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS: |
| + needs_redraw_ = true; |
| + |
| + // If we're already in the middle of a redraw, we don't need to |
| + // restart it. |
| + if (forced_redraw_state_ != FORCED_REDRAW_STATE_IDLE) |
| + return; |
| + |
| + needs_commit_ = true; |
| + consecutive_checkerboard_animations_++; |
| + if (settings_.timeout_and_draw_when_animation_checkerboards && |
| + consecutive_checkerboard_animations_ >= |
| + settings_.maximum_number_of_failed_draws_before_draw_is_forced_) { |
|
brianderson
2014/01/29 01:31:22
Should we change the name of this setting? Doesn't
|
| + consecutive_checkerboard_animations_ = 0; |
| + // We need to force a draw, but it doesn't make sense to do this until |
| + // we've committed and have new textures. |
| + forced_redraw_state_ = FORCED_REDRAW_STATE_WAITING_FOR_COMMIT; |
| + } |
| + break; |
| } |
| } |