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