Index: cc/scheduler/scheduler_state_machine.cc |
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc |
index 2bbf2563264bb1365654663e8d13435346357137..25ac240249f006372e6322ec8590e0c2087ccf39 100644 |
--- a/cc/scheduler/scheduler_state_machine.cc |
+++ b/cc/scheduler/scheduler_state_machine.cc |
@@ -23,6 +23,7 @@ SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
readback_state_(READBACK_STATE_IDLE), |
commit_count_(0), |
current_frame_number_(0), |
+ last_frame_number_animate_performed_(-1), |
last_frame_number_swap_performed_(-1), |
last_frame_number_begin_main_frame_sent_(-1), |
last_frame_number_update_visible_tiles_was_called_(-1), |
@@ -154,6 +155,8 @@ const char* SchedulerStateMachine::ActionToString(Action action) { |
switch (action) { |
case ACTION_NONE: |
return "ACTION_NONE"; |
+ case ACTION_ANIMATE: |
+ return "ACTION_ANIMATE"; |
case ACTION_SEND_BEGIN_MAIN_FRAME: |
return "ACTION_SEND_BEGIN_MAIN_FRAME"; |
case ACTION_COMMIT: |
@@ -235,6 +238,8 @@ scoped_ptr<base::Value> SchedulerStateMachine::AsValue() const { |
minor_state->SetInteger("commit_count", commit_count_); |
minor_state->SetInteger("current_frame_number", current_frame_number_); |
+ minor_state->SetInteger("last_frame_number_animate_performed", |
+ last_frame_number_animate_performed_); |
minor_state->SetInteger("last_frame_number_swap_performed", |
last_frame_number_swap_performed_); |
minor_state->SetInteger( |
@@ -455,6 +460,16 @@ bool SchedulerStateMachine::ShouldUpdateVisibleTiles() const { |
return false; |
} |
+bool SchedulerStateMachine::ShouldAnimate() const { |
+ if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) |
+ return false; |
+ |
+ if (last_frame_number_animate_performed_ == current_frame_number_) |
+ return false; |
+ |
+ return true; |
+} |
+ |
bool SchedulerStateMachine::ShouldSendBeginMainFrame() const { |
if (!needs_commit_) |
return false; |
@@ -568,6 +583,8 @@ SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { |
} |
if (ShouldManageTiles()) |
return ACTION_MANAGE_TILES; |
+ if (ShouldAnimate()) |
+ return ACTION_ANIMATE; |
if (ShouldSendBeginMainFrame()) |
return ACTION_SEND_BEGIN_MAIN_FRAME; |
if (ShouldBeginOutputSurfaceCreation()) |
@@ -601,6 +618,10 @@ void SchedulerStateMachine::UpdateState(Action action) { |
UpdateStateOnActivation(); |
return; |
+ case ACTION_ANIMATE: |
+ last_frame_number_animate_performed_ = current_frame_number_; |
+ return; |
+ |
case ACTION_SEND_BEGIN_MAIN_FRAME: |
DCHECK(!has_pending_tree_ || |
settings_.main_frame_before_activation_enabled); |