| OLD | NEW | 
|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "cc/scheduler/scheduler_state_machine.h" | 5 #include "cc/scheduler/scheduler_state_machine.h" | 
| 6 | 6 | 
| 7 #include "base/trace_event/trace_event.h" | 7 #include "base/trace_event/trace_event.h" | 
| 8 #include "cc/scheduler/scheduler.h" | 8 #include "cc/scheduler/scheduler.h" | 
| 9 #include "cc/test/begin_frame_args_test.h" | 9 #include "cc/test/begin_frame_args_test.h" | 
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" | 
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 145         SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) | 145         SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION) | 
| 146     state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 146     state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 147     state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 147     state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 148     state.SetNeedsRedraw(false); | 148     state.SetNeedsRedraw(false); | 
| 149     state.SetVisible(true); | 149     state.SetVisible(true); | 
| 150 | 150 | 
| 151     EXPECT_FALSE(state.BeginFrameNeeded()); | 151     EXPECT_FALSE(state.BeginFrameNeeded()); | 
| 152 | 152 | 
| 153     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 153     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 154     EXPECT_FALSE(state.BeginFrameNeeded()); | 154     EXPECT_FALSE(state.BeginFrameNeeded()); | 
| 155     state.OnBeginImplFrame( | 155     state.OnBeginImplFrame(); | 
| 156         CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |  | 
| 157 | 156 | 
| 158     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 157     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 159     state.OnBeginImplFrameDeadline(); | 158     state.OnBeginImplFrameDeadline(); | 
| 160   } | 159   } | 
| 161 | 160 | 
| 162   // If commit requested but can_start is still false, do nothing. | 161   // If commit requested but can_start is still false, do nothing. | 
| 163   { | 162   { | 
| 164     StateMachine state(default_scheduler_settings); | 163     StateMachine state(default_scheduler_settings); | 
| 165     state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 164     state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 166     state.SetNeedsRedraw(false); | 165     state.SetNeedsRedraw(false); | 
| 167     state.SetVisible(true); | 166     state.SetVisible(true); | 
| 168     state.SetNeedsCommit(); | 167     state.SetNeedsCommit(); | 
| 169 | 168 | 
| 170     EXPECT_FALSE(state.BeginFrameNeeded()); | 169     EXPECT_FALSE(state.BeginFrameNeeded()); | 
| 171 | 170 | 
| 172     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 171     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 173     EXPECT_FALSE(state.BeginFrameNeeded()); | 172     EXPECT_FALSE(state.BeginFrameNeeded()); | 
| 174     state.OnBeginImplFrame( | 173     state.OnBeginImplFrame(); | 
| 175         CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |  | 
| 176     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 174     EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 177     state.OnBeginImplFrameDeadline(); | 175     state.OnBeginImplFrameDeadline(); | 
| 178   } | 176   } | 
| 179 | 177 | 
| 180   // If commit requested, begin a main frame. | 178   // If commit requested, begin a main frame. | 
| 181   { | 179   { | 
| 182     StateMachine state(default_scheduler_settings); | 180     StateMachine state(default_scheduler_settings); | 
| 183     state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 181     state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 184     state.SetCanStart(); | 182     state.SetCanStart(); | 
| 185     state.UpdateState(state.NextAction()); | 183     state.UpdateState(state.NextAction()); | 
| 186     state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 184     state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 187     state.SetNeedsRedraw(false); | 185     state.SetNeedsRedraw(false); | 
| 188     state.SetVisible(true); | 186     state.SetVisible(true); | 
| 189     state.SetNeedsCommit(); | 187     state.SetNeedsCommit(); | 
| 190 | 188 | 
| 191     EXPECT_TRUE(state.BeginFrameNeeded()); | 189     EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 192 | 190 | 
| 193     state.OnBeginImplFrame( | 191     state.OnBeginImplFrame(); | 
| 194         CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |  | 
| 195     EXPECT_ACTION_UPDATE_STATE( | 192     EXPECT_ACTION_UPDATE_STATE( | 
| 196         SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 193         SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 197   } | 194   } | 
| 198 | 195 | 
| 199   // Begin the frame, make sure needs_commit and commit_state update correctly. | 196   // Begin the frame, make sure needs_commit and commit_state update correctly. | 
| 200   { | 197   { | 
| 201     StateMachine state(default_scheduler_settings); | 198     StateMachine state(default_scheduler_settings); | 
| 202     state.SetCanStart(); | 199     state.SetCanStart(); | 
| 203     state.UpdateState(state.NextAction()); | 200     state.UpdateState(state.NextAction()); | 
| 204     state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 201     state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 217   scheduler_settings.main_frame_before_activation_enabled = true; | 214   scheduler_settings.main_frame_before_activation_enabled = true; | 
| 218   StateMachine state(scheduler_settings); | 215   StateMachine state(scheduler_settings); | 
| 219   state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 216   state.SetCommitState(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 220   SET_UP_STATE(state) | 217   SET_UP_STATE(state) | 
| 221   state.SetNeedsRedraw(false); | 218   state.SetNeedsRedraw(false); | 
| 222   state.SetNeedsCommit(); | 219   state.SetNeedsCommit(); | 
| 223 | 220 | 
| 224   EXPECT_TRUE(state.BeginFrameNeeded()); | 221   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 225 | 222 | 
| 226   // Commit to the pending tree. | 223   // Commit to the pending tree. | 
| 227   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 224   state.OnBeginImplFrame(); | 
| 228   EXPECT_ACTION_UPDATE_STATE( | 225   EXPECT_ACTION_UPDATE_STATE( | 
| 229       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 226       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 230   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 227   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 231 | 228 | 
| 232   state.NotifyBeginMainFrameStarted(); | 229   state.NotifyBeginMainFrameStarted(); | 
| 233   state.NotifyReadyToCommit(); | 230   state.NotifyReadyToCommit(); | 
| 234   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 231   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 235   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 232   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 236   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 233   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 237 | 234 | 
| 238   state.OnBeginImplFrameDeadline(); | 235   state.OnBeginImplFrameDeadline(); | 
| 239   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 236   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 240 | 237 | 
| 241   // Verify that the next commit starts while there is still a pending tree. | 238   // Verify that the next commit starts while there is still a pending tree. | 
| 242   state.SetNeedsCommit(); | 239   state.SetNeedsCommit(); | 
| 243   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 240   state.OnBeginImplFrame(); | 
| 244   EXPECT_ACTION_UPDATE_STATE( | 241   EXPECT_ACTION_UPDATE_STATE( | 
| 245       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 242       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 246   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 243   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 247 | 244 | 
| 248   // Verify the pending commit doesn't overwrite the pending | 245   // Verify the pending commit doesn't overwrite the pending | 
| 249   // tree until the pending tree has been activated. | 246   // tree until the pending tree has been activated. | 
| 250   state.NotifyBeginMainFrameStarted(); | 247   state.NotifyBeginMainFrameStarted(); | 
| 251   state.NotifyReadyToCommit(); | 248   state.NotifyReadyToCommit(); | 
| 252   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 249   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 253 | 250 | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 270 } | 267 } | 
| 271 | 268 | 
| 272 TEST(SchedulerStateMachineTest, | 269 TEST(SchedulerStateMachineTest, | 
| 273      TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 270      TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 
| 274   SchedulerSettings default_scheduler_settings; | 271   SchedulerSettings default_scheduler_settings; | 
| 275   StateMachine state(default_scheduler_settings); | 272   StateMachine state(default_scheduler_settings); | 
| 276   SET_UP_STATE(state) | 273   SET_UP_STATE(state) | 
| 277   state.SetNeedsRedraw(true); | 274   state.SetNeedsRedraw(true); | 
| 278   EXPECT_TRUE(state.RedrawPending()); | 275   EXPECT_TRUE(state.RedrawPending()); | 
| 279   EXPECT_TRUE(state.BeginFrameNeeded()); | 276   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 280   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 277   state.OnBeginImplFrame(); | 
| 281   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 278   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 282   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 279   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 283   state.OnBeginImplFrameDeadline(); | 280   state.OnBeginImplFrameDeadline(); | 
| 284 | 281 | 
| 285   // We're drawing now. | 282   // We're drawing now. | 
| 286   EXPECT_ACTION_UPDATE_STATE( | 283   EXPECT_ACTION_UPDATE_STATE( | 
| 287       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 284       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 288   state.DidSwapBuffers(); | 285   state.DidSwapBuffers(); | 
| 289   state.DidSwapBuffersComplete(); | 286   state.DidSwapBuffersComplete(); | 
| 290   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 287   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 291 | 288 | 
| 292   EXPECT_FALSE(state.RedrawPending()); | 289   EXPECT_FALSE(state.RedrawPending()); | 
| 293   EXPECT_FALSE(state.CommitPending()); | 290   EXPECT_FALSE(state.CommitPending()); | 
| 294 | 291 | 
| 295   // Failing the draw makes us require a commit. | 292   // Failing the draw makes us require a commit. | 
| 296   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 293   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 
| 297   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 294   state.OnBeginImplFrame(); | 
| 298   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 295   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 299   EXPECT_ACTION_UPDATE_STATE( | 296   EXPECT_ACTION_UPDATE_STATE( | 
| 300       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 297       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 301   EXPECT_TRUE(state.RedrawPending()); | 298   EXPECT_TRUE(state.RedrawPending()); | 
| 302   EXPECT_TRUE(state.CommitPending()); | 299   EXPECT_TRUE(state.CommitPending()); | 
| 303 } | 300 } | 
| 304 | 301 | 
| 305 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 302 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 
| 306   SchedulerSettings default_scheduler_settings; | 303   SchedulerSettings default_scheduler_settings; | 
| 307   StateMachine state(default_scheduler_settings); | 304   StateMachine state(default_scheduler_settings); | 
| 308   SET_UP_STATE(state) | 305   SET_UP_STATE(state) | 
| 309   state.SetNeedsRedraw(true); | 306   state.SetNeedsRedraw(true); | 
| 310   EXPECT_TRUE(state.RedrawPending()); | 307   EXPECT_TRUE(state.RedrawPending()); | 
| 311   EXPECT_TRUE(state.BeginFrameNeeded()); | 308   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 312 | 309 | 
| 313   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 310   state.OnBeginImplFrame(); | 
| 314   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 311   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 315   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 312   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 316   state.OnBeginImplFrameDeadline(); | 313   state.OnBeginImplFrameDeadline(); | 
| 317   EXPECT_ACTION_UPDATE_STATE( | 314   EXPECT_ACTION_UPDATE_STATE( | 
| 318       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 315       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 319   state.DidSwapBuffers(); | 316   state.DidSwapBuffers(); | 
| 320   state.DidSwapBuffersComplete(); | 317   state.DidSwapBuffersComplete(); | 
| 321   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 318   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 322   EXPECT_FALSE(state.RedrawPending()); | 319   EXPECT_FALSE(state.RedrawPending()); | 
| 323   EXPECT_FALSE(state.CommitPending()); | 320   EXPECT_FALSE(state.CommitPending()); | 
| 324 | 321 | 
| 325   // Missing high res content requires a commit (but not a redraw) | 322   // Missing high res content requires a commit (but not a redraw) | 
| 326   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 323   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 
| 327   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 324   state.OnBeginImplFrame(); | 
| 328   EXPECT_ACTION_UPDATE_STATE( | 325   EXPECT_ACTION_UPDATE_STATE( | 
| 329       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 326       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 330   EXPECT_FALSE(state.RedrawPending()); | 327   EXPECT_FALSE(state.RedrawPending()); | 
| 331   EXPECT_TRUE(state.CommitPending()); | 328   EXPECT_TRUE(state.CommitPending()); | 
| 332 } | 329 } | 
| 333 | 330 | 
| 334 TEST(SchedulerStateMachineTest, | 331 TEST(SchedulerStateMachineTest, | 
| 335      TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 332      TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 
| 336   SchedulerSettings default_scheduler_settings; | 333   SchedulerSettings default_scheduler_settings; | 
| 337   StateMachine state(default_scheduler_settings); | 334   StateMachine state(default_scheduler_settings); | 
| 338   SET_UP_STATE(state) | 335   SET_UP_STATE(state) | 
| 339   state.SetNeedsRedraw(true); | 336   state.SetNeedsRedraw(true); | 
| 340   EXPECT_TRUE(state.RedrawPending()); | 337   EXPECT_TRUE(state.RedrawPending()); | 
| 341   EXPECT_TRUE(state.BeginFrameNeeded()); | 338   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 342   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 339   state.OnBeginImplFrame(); | 
| 343   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 340   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 344   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 341   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 345   state.OnBeginImplFrameDeadline(); | 342   state.OnBeginImplFrameDeadline(); | 
| 346 | 343 | 
| 347   // We're drawing now. | 344   // We're drawing now. | 
| 348   EXPECT_ACTION_UPDATE_STATE( | 345   EXPECT_ACTION_UPDATE_STATE( | 
| 349       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 346       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 350   state.DidSwapBuffers(); | 347   state.DidSwapBuffers(); | 
| 351   state.DidSwapBuffersComplete(); | 348   state.DidSwapBuffersComplete(); | 
| 352   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 349   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 353   EXPECT_FALSE(state.RedrawPending()); | 350   EXPECT_FALSE(state.RedrawPending()); | 
| 354   EXPECT_FALSE(state.CommitPending()); | 351   EXPECT_FALSE(state.CommitPending()); | 
| 355 | 352 | 
| 356   // While still in the same BeginMainFrame callback on the main thread, | 353   // While still in the same BeginMainFrame callback on the main thread, | 
| 357   // set needs redraw again. This should not redraw. | 354   // set needs redraw again. This should not redraw. | 
| 358   state.SetNeedsRedraw(true); | 355   state.SetNeedsRedraw(true); | 
| 359   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 356   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 360 | 357 | 
| 361   // Failing the draw for animation checkerboards makes us require a commit. | 358   // Failing the draw for animation checkerboards makes us require a commit. | 
| 362   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 359   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 
| 363   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 360   state.OnBeginImplFrame(); | 
| 364   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 361   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 365   EXPECT_ACTION_UPDATE_STATE( | 362   EXPECT_ACTION_UPDATE_STATE( | 
| 366       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 363       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 367   EXPECT_TRUE(state.RedrawPending()); | 364   EXPECT_TRUE(state.RedrawPending()); | 
| 368 } | 365 } | 
| 369 | 366 | 
| 370 TEST(SchedulerStateMachineTest, | 367 TEST(SchedulerStateMachineTest, | 
| 371      TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 368      TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 
| 372   SchedulerSettings scheduler_settings; | 369   SchedulerSettings scheduler_settings; | 
| 373   scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 370   scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = 1; | 
| 374   StateMachine state(scheduler_settings); | 371   StateMachine state(scheduler_settings); | 
| 375   SET_UP_STATE(state) | 372   SET_UP_STATE(state) | 
| 376 | 373 | 
| 377   // Start a commit. | 374   // Start a commit. | 
| 378   state.SetNeedsCommit(); | 375   state.SetNeedsCommit(); | 
| 379   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 376   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 380   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 377   state.OnBeginImplFrame(); | 
| 381   EXPECT_ACTION_UPDATE_STATE( | 378   EXPECT_ACTION_UPDATE_STATE( | 
| 382       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 379       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 383   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 380   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 384   EXPECT_TRUE(state.CommitPending()); | 381   EXPECT_TRUE(state.CommitPending()); | 
| 385 | 382 | 
| 386   // Then initiate a draw. | 383   // Then initiate a draw. | 
| 387   state.SetNeedsRedraw(true); | 384   state.SetNeedsRedraw(true); | 
| 388   state.OnBeginImplFrameDeadline(); | 385   state.OnBeginImplFrameDeadline(); | 
| 389   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 386   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 390   EXPECT_ACTION_UPDATE_STATE( | 387   EXPECT_ACTION_UPDATE_STATE( | 
| 391       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 388       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 392 | 389 | 
| 393   // Fail the draw. | 390   // Fail the draw. | 
| 394   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 391   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 
| 395   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 392   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 396   EXPECT_TRUE(state.BeginFrameNeeded()); | 393   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 397   EXPECT_TRUE(state.RedrawPending()); | 394   EXPECT_TRUE(state.RedrawPending()); | 
| 398   // But the commit is ongoing. | 395   // But the commit is ongoing. | 
| 399   EXPECT_TRUE(state.CommitPending()); | 396   EXPECT_TRUE(state.CommitPending()); | 
| 400 | 397 | 
| 401   // Finish the commit. Note, we should not yet be forcing a draw, but should | 398   // Finish the commit. Note, we should not yet be forcing a draw, but should | 
| 402   // continue the commit as usual. | 399   // continue the commit as usual. | 
| 403   state.NotifyBeginMainFrameStarted(); | 400   state.NotifyBeginMainFrameStarted(); | 
| 404   state.NotifyReadyToCommit(); | 401   state.NotifyReadyToCommit(); | 
| 405   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 402   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 406   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 403   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 407   EXPECT_TRUE(state.RedrawPending()); | 404   EXPECT_TRUE(state.RedrawPending()); | 
| 408 | 405 | 
| 409   // The redraw should be forced at the end of the next BeginImplFrame. | 406   // The redraw should be forced at the end of the next BeginImplFrame. | 
| 410   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 407   state.OnBeginImplFrame(); | 
| 411   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 408   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 412   EXPECT_ACTION_UPDATE_STATE( | 409   EXPECT_ACTION_UPDATE_STATE( | 
| 413       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 410       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 414   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 411   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 415   state.OnBeginImplFrameDeadline(); | 412   state.OnBeginImplFrameDeadline(); | 
| 416   EXPECT_ACTION_UPDATE_STATE( | 413   EXPECT_ACTION_UPDATE_STATE( | 
| 417       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 414       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 
| 418   state.DidSwapBuffers(); | 415   state.DidSwapBuffers(); | 
| 419   state.DidSwapBuffersComplete(); | 416   state.DidSwapBuffersComplete(); | 
| 420 } | 417 } | 
| 421 | 418 | 
| 422 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 419 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 
| 423   SchedulerSettings scheduler_settings; | 420   SchedulerSettings scheduler_settings; | 
| 424   int draw_limit = 1; | 421   int draw_limit = 1; | 
| 425   scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = | 422   scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced_ = | 
| 426       draw_limit; | 423       draw_limit; | 
| 427   scheduler_settings.impl_side_painting = true; | 424   scheduler_settings.impl_side_painting = true; | 
| 428   StateMachine state(scheduler_settings); | 425   StateMachine state(scheduler_settings); | 
| 429   SET_UP_STATE(state) | 426   SET_UP_STATE(state) | 
| 430 | 427 | 
| 431   // Start a commit. | 428   // Start a commit. | 
| 432   state.SetNeedsCommit(); | 429   state.SetNeedsCommit(); | 
| 433   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 430   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 434   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 431   state.OnBeginImplFrame(); | 
| 435   EXPECT_ACTION_UPDATE_STATE( | 432   EXPECT_ACTION_UPDATE_STATE( | 
| 436       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 433       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 437   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 434   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 438   EXPECT_TRUE(state.CommitPending()); | 435   EXPECT_TRUE(state.CommitPending()); | 
| 439 | 436 | 
| 440   // Then initiate a draw. | 437   // Then initiate a draw. | 
| 441   state.SetNeedsRedraw(true); | 438   state.SetNeedsRedraw(true); | 
| 442   state.OnBeginImplFrameDeadline(); | 439   state.OnBeginImplFrameDeadline(); | 
| 443   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 440   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 444   EXPECT_ACTION_UPDATE_STATE( | 441   EXPECT_ACTION_UPDATE_STATE( | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 477 } | 474 } | 
| 478 | 475 | 
| 479 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 476 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 
| 480   SchedulerSettings default_scheduler_settings; | 477   SchedulerSettings default_scheduler_settings; | 
| 481   StateMachine state(default_scheduler_settings); | 478   StateMachine state(default_scheduler_settings); | 
| 482   SET_UP_STATE(state) | 479   SET_UP_STATE(state) | 
| 483 | 480 | 
| 484   // Start a draw. | 481   // Start a draw. | 
| 485   state.SetNeedsRedraw(true); | 482   state.SetNeedsRedraw(true); | 
| 486   EXPECT_TRUE(state.BeginFrameNeeded()); | 483   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 487   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 484   state.OnBeginImplFrame(); | 
| 488   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 485   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 489   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 486   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 490   state.OnBeginImplFrameDeadline(); | 487   state.OnBeginImplFrameDeadline(); | 
| 491   EXPECT_TRUE(state.RedrawPending()); | 488   EXPECT_TRUE(state.RedrawPending()); | 
| 492   EXPECT_ACTION_UPDATE_STATE( | 489   EXPECT_ACTION_UPDATE_STATE( | 
| 493       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 490       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 494 | 491 | 
| 495   // Failing the draw for animation checkerboards makes us require a commit. | 492   // Failing the draw for animation checkerboards makes us require a commit. | 
| 496   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 493   state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 
| 497   EXPECT_ACTION_UPDATE_STATE( | 494   EXPECT_ACTION_UPDATE_STATE( | 
| 498       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 495       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 499   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 496   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 500   EXPECT_TRUE(state.RedrawPending()); | 497   EXPECT_TRUE(state.RedrawPending()); | 
| 501 | 498 | 
| 502   // We should not be trying to draw again now, but we have a commit pending. | 499   // We should not be trying to draw again now, but we have a commit pending. | 
| 503   EXPECT_TRUE(state.BeginFrameNeeded()); | 500   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 504   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 501   state.OnBeginImplFrame(); | 
| 505   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 502   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 506   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 503   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 507 | 504 | 
| 508   // We should try to draw again at the end of the next BeginImplFrame on | 505   // We should try to draw again at the end of the next BeginImplFrame on | 
| 509   // the impl thread. | 506   // the impl thread. | 
| 510   state.OnBeginImplFrameDeadline(); | 507   state.OnBeginImplFrameDeadline(); | 
| 511   EXPECT_ACTION_UPDATE_STATE( | 508   EXPECT_ACTION_UPDATE_STATE( | 
| 512       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 509       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 513   state.DidSwapBuffers(); | 510   state.DidSwapBuffers(); | 
| 514   state.DidSwapBuffersComplete(); | 511   state.DidSwapBuffersComplete(); | 
| 515   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 512   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 516 } | 513 } | 
| 517 | 514 | 
| 518 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 515 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 
| 519   SchedulerSettings default_scheduler_settings; | 516   SchedulerSettings default_scheduler_settings; | 
| 520   StateMachine state(default_scheduler_settings); | 517   StateMachine state(default_scheduler_settings); | 
| 521   SET_UP_STATE(state) | 518   SET_UP_STATE(state) | 
| 522   state.SetNeedsRedraw(true); | 519   state.SetNeedsRedraw(true); | 
| 523 | 520 | 
| 524   // Draw the first frame. | 521   // Draw the first frame. | 
| 525   EXPECT_TRUE(state.BeginFrameNeeded()); | 522   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 526   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 523   state.OnBeginImplFrame(); | 
| 527   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 524   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 528   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 525   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 529 | 526 | 
| 530   state.OnBeginImplFrameDeadline(); | 527   state.OnBeginImplFrameDeadline(); | 
| 531   EXPECT_ACTION_UPDATE_STATE( | 528   EXPECT_ACTION_UPDATE_STATE( | 
| 532       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 529       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 533   state.DidSwapBuffers(); | 530   state.DidSwapBuffers(); | 
| 534   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 531   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 
| 535   state.DidSwapBuffersComplete(); | 532   state.DidSwapBuffersComplete(); | 
| 536   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 533   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 537 | 534 | 
| 538   // Before the next BeginImplFrame, set needs redraw again. | 535   // Before the next BeginImplFrame, set needs redraw again. | 
| 539   // This should not redraw until the next BeginImplFrame. | 536   // This should not redraw until the next BeginImplFrame. | 
| 540   state.SetNeedsRedraw(true); | 537   state.SetNeedsRedraw(true); | 
| 541   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 538   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 542 | 539 | 
| 543   // Move to another frame. This should now draw. | 540   // Move to another frame. This should now draw. | 
| 544   EXPECT_TRUE(state.BeginFrameNeeded()); | 541   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 545   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 542   state.OnBeginImplFrame(); | 
| 546 | 543 | 
| 547   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 544   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 548   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 545   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 549 | 546 | 
| 550   state.OnBeginImplFrameDeadline(); | 547   state.OnBeginImplFrameDeadline(); | 
| 551   EXPECT_ACTION_UPDATE_STATE( | 548   EXPECT_ACTION_UPDATE_STATE( | 
| 552       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 549       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 553   state.DidSwapBuffers(); | 550   state.DidSwapBuffers(); | 
| 554   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 551   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 
| 555   state.DidSwapBuffersComplete(); | 552   state.DidSwapBuffersComplete(); | 
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 670     // There shouldn't be any drawing regardless of BeginImplFrame. | 667     // There shouldn't be any drawing regardless of BeginImplFrame. | 
| 671     for (size_t j = 0; j < 2; ++j) { | 668     for (size_t j = 0; j < 2; ++j) { | 
| 672       StateMachine state(default_scheduler_settings); | 669       StateMachine state(default_scheduler_settings); | 
| 673       state.SetCanStart(); | 670       state.SetCanStart(); | 
| 674       state.UpdateState(state.NextAction()); | 671       state.UpdateState(state.NextAction()); | 
| 675       state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 672       state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 676       state.SetCommitState(all_commit_states[i]); | 673       state.SetCommitState(all_commit_states[i]); | 
| 677       state.SetVisible(false); | 674       state.SetVisible(false); | 
| 678       state.SetNeedsRedraw(true); | 675       state.SetNeedsRedraw(true); | 
| 679       if (j == 1) | 676       if (j == 1) | 
| 680         state.OnBeginImplFrame( | 677         state.OnBeginImplFrame(); | 
| 681             CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |  | 
| 682 | 678 | 
| 683       state.SetCanDraw(false); | 679       state.SetCanDraw(false); | 
| 684       EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 680       EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE, | 
| 685                 state.NextAction()); | 681                 state.NextAction()); | 
| 686     } | 682     } | 
| 687   } | 683   } | 
| 688 } | 684 } | 
| 689 | 685 | 
| 690 TEST(SchedulerStateMachineTest, | 686 TEST(SchedulerStateMachineTest, | 
| 691      TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 687      TestCanRedrawWithWaitingForFirstDrawMakesProgress) { | 
| 692   SchedulerSettings default_scheduler_settings; | 688   SchedulerSettings default_scheduler_settings; | 
| 693   StateMachine state(default_scheduler_settings); | 689   StateMachine state(default_scheduler_settings); | 
| 694   state.SetCanStart(); | 690   state.SetCanStart(); | 
| 695   state.UpdateState(state.NextAction()); | 691   state.UpdateState(state.NextAction()); | 
| 696   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 692   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 697 | 693 | 
| 698   state.SetActiveTreeNeedsFirstDraw(true); | 694   state.SetActiveTreeNeedsFirstDraw(true); | 
| 699   state.SetNeedsCommit(); | 695   state.SetNeedsCommit(); | 
| 700   state.SetNeedsRedraw(true); | 696   state.SetNeedsRedraw(true); | 
| 701   state.SetVisible(true); | 697   state.SetVisible(true); | 
| 702   state.SetCanDraw(false); | 698   state.SetCanDraw(false); | 
| 703   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 699   state.OnBeginImplFrame(); | 
| 704   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 700   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 705   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 701   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 
| 706   EXPECT_ACTION_UPDATE_STATE( | 702   EXPECT_ACTION_UPDATE_STATE( | 
| 707       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 703       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 708   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 704   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 709   state.NotifyBeginMainFrameStarted(); | 705   state.NotifyBeginMainFrameStarted(); | 
| 710   state.NotifyReadyToCommit(); | 706   state.NotifyReadyToCommit(); | 
| 711   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 707   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 712   state.OnBeginImplFrameDeadline(); | 708   state.OnBeginImplFrameDeadline(); | 
| 713   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 709   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 714   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 710   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 
| 715   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 711   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 716 } | 712 } | 
| 717 | 713 | 
| 718 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 714 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 
| 719   SchedulerSettings scheduler_settings; | 715   SchedulerSettings scheduler_settings; | 
| 720   StateMachine state(scheduler_settings); | 716   StateMachine state(scheduler_settings); | 
| 721   SET_UP_STATE(state) | 717   SET_UP_STATE(state) | 
| 722   state.SetNeedsCommit(); | 718   state.SetNeedsCommit(); | 
| 723 | 719 | 
| 724   EXPECT_TRUE(state.BeginFrameNeeded()); | 720   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 725 | 721 | 
| 726   // Begin the frame. | 722   // Begin the frame. | 
| 727   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 723   state.OnBeginImplFrame(); | 
| 728   EXPECT_ACTION_UPDATE_STATE( | 724   EXPECT_ACTION_UPDATE_STATE( | 
| 729       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 725       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 730   EXPECT_COMMIT_STATE( | 726   EXPECT_COMMIT_STATE( | 
| 731       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 727       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 732 | 728 | 
| 733   // Now, while the frame is in progress, set another commit. | 729   // Now, while the frame is in progress, set another commit. | 
| 734   state.SetNeedsCommit(); | 730   state.SetNeedsCommit(); | 
| 735   EXPECT_TRUE(state.NeedsCommit()); | 731   EXPECT_TRUE(state.NeedsCommit()); | 
| 736 | 732 | 
| 737   // Let the frame finish. | 733   // Let the frame finish. | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 751 | 747 | 
| 752   state.OnBeginImplFrameDeadline(); | 748   state.OnBeginImplFrameDeadline(); | 
| 753   EXPECT_IMPL_FRAME_STATE( | 749   EXPECT_IMPL_FRAME_STATE( | 
| 754       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 750       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 
| 755   EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 751   EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 
| 756 | 752 | 
| 757   state.OnBeginImplFrameIdle(); | 753   state.OnBeginImplFrameIdle(); | 
| 758   EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 754   EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 
| 759   EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 755   EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 
| 760 | 756 | 
| 761   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 757   state.OnBeginImplFrame(); | 
| 762   EXPECT_IMPL_FRAME_STATE( | 758   EXPECT_IMPL_FRAME_STATE( | 
| 763       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 759       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 
| 764   EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 760   EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 
| 765 | 761 | 
| 766   // Finish the commit, then make sure we start the next commit immediately | 762   // Finish the commit, then make sure we start the next commit immediately | 
| 767   // and draw on the next BeginImplFrame. | 763   // and draw on the next BeginImplFrame. | 
| 768   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 764   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 769   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 765   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 770   EXPECT_ACTION_UPDATE_STATE( | 766   EXPECT_ACTION_UPDATE_STATE( | 
| 771       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 767       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 784 | 780 | 
| 785 TEST(SchedulerStateMachineTest, TestFullCycle) { | 781 TEST(SchedulerStateMachineTest, TestFullCycle) { | 
| 786   SchedulerSettings default_scheduler_settings; | 782   SchedulerSettings default_scheduler_settings; | 
| 787   StateMachine state(default_scheduler_settings); | 783   StateMachine state(default_scheduler_settings); | 
| 788   SET_UP_STATE(state) | 784   SET_UP_STATE(state) | 
| 789 | 785 | 
| 790   // Start clean and set commit. | 786   // Start clean and set commit. | 
| 791   state.SetNeedsCommit(); | 787   state.SetNeedsCommit(); | 
| 792 | 788 | 
| 793   // Begin the frame. | 789   // Begin the frame. | 
| 794   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 790   state.OnBeginImplFrame(); | 
| 795   EXPECT_ACTION_UPDATE_STATE( | 791   EXPECT_ACTION_UPDATE_STATE( | 
| 796       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 792       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 797   EXPECT_COMMIT_STATE( | 793   EXPECT_COMMIT_STATE( | 
| 798       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 794       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 799   EXPECT_FALSE(state.NeedsCommit()); | 795   EXPECT_FALSE(state.NeedsCommit()); | 
| 800   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 796   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 801 | 797 | 
| 802   // Tell the scheduler the frame finished. | 798   // Tell the scheduler the frame finished. | 
| 803   state.NotifyBeginMainFrameStarted(); | 799   state.NotifyBeginMainFrameStarted(); | 
| 804   state.NotifyReadyToCommit(); | 800   state.NotifyReadyToCommit(); | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 830 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { | 826 TEST(SchedulerStateMachineTest, TestFullCycleWithMainThreadLowLatencyMode) { | 
| 831   SchedulerSettings scheduler_settings; | 827   SchedulerSettings scheduler_settings; | 
| 832   scheduler_settings.main_thread_should_always_be_low_latency = true; | 828   scheduler_settings.main_thread_should_always_be_low_latency = true; | 
| 833   StateMachine state(scheduler_settings); | 829   StateMachine state(scheduler_settings); | 
| 834   SET_UP_STATE(state) | 830   SET_UP_STATE(state) | 
| 835 | 831 | 
| 836   // Start clean and set commit. | 832   // Start clean and set commit. | 
| 837   state.SetNeedsCommit(); | 833   state.SetNeedsCommit(); | 
| 838 | 834 | 
| 839   // Begin the frame. | 835   // Begin the frame. | 
| 840   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 836   state.OnBeginImplFrame(); | 
| 841   EXPECT_ACTION_UPDATE_STATE( | 837   EXPECT_ACTION_UPDATE_STATE( | 
| 842       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 838       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 843   EXPECT_COMMIT_STATE( | 839   EXPECT_COMMIT_STATE( | 
| 844       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 840       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 845   EXPECT_FALSE(state.NeedsCommit()); | 841   EXPECT_FALSE(state.NeedsCommit()); | 
| 846   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 842   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 847 | 843 | 
| 848   // Tell the scheduler the frame finished. | 844   // Tell the scheduler the frame finished. | 
| 849   state.NotifyBeginMainFrameStarted(); | 845   state.NotifyBeginMainFrameStarted(); | 
| 850   state.NotifyReadyToCommit(); | 846   state.NotifyReadyToCommit(); | 
| 851   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); | 847   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT); | 
| 852 | 848 | 
| 853   // Commit. | 849   // Commit. | 
| 854   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 850   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 855   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 851   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 
| 856   EXPECT_TRUE(state.needs_redraw()); | 852   EXPECT_TRUE(state.needs_redraw()); | 
| 857 | 853 | 
| 858   // Now commit should wait for draw. | 854   // Now commit should wait for draw. | 
| 859   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); | 855   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); | 
| 860 | 856 | 
| 861   // Swap throttled. Do not draw. | 857   // Swap throttled. Do not draw. | 
| 862   state.DidSwapBuffers(); | 858   state.DidSwapBuffers(); | 
| 863   state.OnBeginImplFrameDeadline(); | 859   state.OnBeginImplFrameDeadline(); | 
| 864   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 860   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 865   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 861   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 866   state.DidSwapBuffersComplete(); | 862   state.DidSwapBuffersComplete(); | 
| 867 | 863 | 
| 868   // Haven't draw since last commit, do not begin new main frame. | 864   // Haven't draw since last commit, do not begin new main frame. | 
| 869   state.SetNeedsCommit(); | 865   state.SetNeedsCommit(); | 
| 870   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 866   state.OnBeginImplFrame(); | 
| 871   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 867   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 872   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 868   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 873 | 869 | 
| 874   // At BeginImplFrame deadline, draw. | 870   // At BeginImplFrame deadline, draw. | 
| 875   state.OnBeginImplFrameDeadline(); | 871   state.OnBeginImplFrameDeadline(); | 
| 876   EXPECT_ACTION_UPDATE_STATE( | 872   EXPECT_ACTION_UPDATE_STATE( | 
| 877       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 873       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 878   state.DidSwapBuffers(); | 874   state.DidSwapBuffers(); | 
| 879   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 875   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 
| 880   state.DidSwapBuffersComplete(); | 876   state.DidSwapBuffersComplete(); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 891   SchedulerSettings scheduler_settings; | 887   SchedulerSettings scheduler_settings; | 
| 892   scheduler_settings.main_thread_should_always_be_low_latency = true; | 888   scheduler_settings.main_thread_should_always_be_low_latency = true; | 
| 893   scheduler_settings.impl_side_painting = true; | 889   scheduler_settings.impl_side_painting = true; | 
| 894   StateMachine state(scheduler_settings); | 890   StateMachine state(scheduler_settings); | 
| 895   SET_UP_STATE(state) | 891   SET_UP_STATE(state) | 
| 896 | 892 | 
| 897   // Start clean and set commit. | 893   // Start clean and set commit. | 
| 898   state.SetNeedsCommit(); | 894   state.SetNeedsCommit(); | 
| 899 | 895 | 
| 900   // Begin the frame. | 896   // Begin the frame. | 
| 901   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 897   state.OnBeginImplFrame(); | 
| 902   EXPECT_ACTION_UPDATE_STATE( | 898   EXPECT_ACTION_UPDATE_STATE( | 
| 903       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 899       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 904   EXPECT_COMMIT_STATE( | 900   EXPECT_COMMIT_STATE( | 
| 905       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 901       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 906   EXPECT_FALSE(state.NeedsCommit()); | 902   EXPECT_FALSE(state.NeedsCommit()); | 
| 907   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 903   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 908 | 904 | 
| 909   // Tell the scheduler the frame finished. | 905   // Tell the scheduler the frame finished. | 
| 910   state.NotifyBeginMainFrameStarted(); | 906   state.NotifyBeginMainFrameStarted(); | 
| 911   state.NotifyReadyToCommit(); | 907   state.NotifyReadyToCommit(); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 922   // frame, and still block BeginMainFrame. | 918   // frame, and still block BeginMainFrame. | 
| 923   state.SetNeedsRedraw(true); | 919   state.SetNeedsRedraw(true); | 
| 924   state.SetNeedsCommit(); | 920   state.SetNeedsCommit(); | 
| 925   state.OnBeginImplFrameDeadline(); | 921   state.OnBeginImplFrameDeadline(); | 
| 926   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 922   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 927   EXPECT_ACTION_UPDATE_STATE( | 923   EXPECT_ACTION_UPDATE_STATE( | 
| 928       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 924       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 929   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 925   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 930 | 926 | 
| 931   // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. | 927   // Cannot BeginMainFrame yet since last commit is not yet activated and drawn. | 
| 932   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 928   state.OnBeginImplFrame(); | 
| 933   EXPECT_COMMIT_STATE( | 929   EXPECT_COMMIT_STATE( | 
| 934       SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); | 930       SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_ACTIVATION); | 
| 935   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 931   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 936 | 932 | 
| 937   // Now activate sync tree. | 933   // Now activate sync tree. | 
| 938   state.NotifyReadyToActivate(); | 934   state.NotifyReadyToActivate(); | 
| 939   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 935   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 
| 940   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 936   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 941   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 937   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 
| 942   EXPECT_TRUE(state.needs_redraw()); | 938   EXPECT_TRUE(state.needs_redraw()); | 
| 943   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); | 939   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_DRAW); | 
| 944 | 940 | 
| 945   // Swap throttled. Do not draw. | 941   // Swap throttled. Do not draw. | 
| 946   state.DidSwapBuffers(); | 942   state.DidSwapBuffers(); | 
| 947   state.OnBeginImplFrameDeadline(); | 943   state.OnBeginImplFrameDeadline(); | 
| 948   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 944   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 949   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 945   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 950   state.DidSwapBuffersComplete(); | 946   state.DidSwapBuffersComplete(); | 
| 951 | 947 | 
| 952   // Haven't draw since last commit, do not begin new main frame. | 948   // Haven't draw since last commit, do not begin new main frame. | 
| 953   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 949   state.OnBeginImplFrame(); | 
| 954   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 950   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 955   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 951   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 956 | 952 | 
| 957   // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. | 953   // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. | 
| 958   state.OnBeginImplFrameDeadline(); | 954   state.OnBeginImplFrameDeadline(); | 
| 959   EXPECT_ACTION_UPDATE_STATE( | 955   EXPECT_ACTION_UPDATE_STATE( | 
| 960       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 956       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 961   state.DidSwapBuffers(); | 957   state.DidSwapBuffers(); | 
| 962   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 958   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 
| 963   state.DidSwapBuffersComplete(); | 959   state.DidSwapBuffersComplete(); | 
| 964 | 960 | 
| 965   // Now will be able to start main frame. | 961   // Now will be able to start main frame. | 
| 966   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 962   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 967   EXPECT_FALSE(state.needs_redraw()); | 963   EXPECT_FALSE(state.needs_redraw()); | 
| 968   EXPECT_ACTION_UPDATE_STATE( | 964   EXPECT_ACTION_UPDATE_STATE( | 
| 969       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 965       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 970 } | 966 } | 
| 971 | 967 | 
| 972 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 968 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 
| 973   SchedulerSettings default_scheduler_settings; | 969   SchedulerSettings default_scheduler_settings; | 
| 974   StateMachine state(default_scheduler_settings); | 970   StateMachine state(default_scheduler_settings); | 
| 975   SET_UP_STATE(state) | 971   SET_UP_STATE(state) | 
| 976 | 972 | 
| 977   // Start clean and set commit. | 973   // Start clean and set commit. | 
| 978   state.SetNeedsCommit(); | 974   state.SetNeedsCommit(); | 
| 979 | 975 | 
| 980   // Begin the frame. | 976   // Begin the frame. | 
| 981   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 977   state.OnBeginImplFrame(); | 
| 982   EXPECT_ACTION_UPDATE_STATE( | 978   EXPECT_ACTION_UPDATE_STATE( | 
| 983       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 979       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 984   EXPECT_COMMIT_STATE( | 980   EXPECT_COMMIT_STATE( | 
| 985       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 981       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 986   EXPECT_FALSE(state.NeedsCommit()); | 982   EXPECT_FALSE(state.NeedsCommit()); | 
| 987   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 983   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 988 | 984 | 
| 989   // Request another commit while the commit is in flight. | 985   // Request another commit while the commit is in flight. | 
| 990   state.SetNeedsCommit(); | 986   state.SetNeedsCommit(); | 
| 991   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 987   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 1011   state.DidSwapBuffers(); | 1007   state.DidSwapBuffers(); | 
| 1012   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 1008   state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | 
| 1013   state.DidSwapBuffersComplete(); | 1009   state.DidSwapBuffersComplete(); | 
| 1014 | 1010 | 
| 1015   // Should be synchronized, no draw needed, no action needed. | 1011   // Should be synchronized, no draw needed, no action needed. | 
| 1016   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1012   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1017   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1013   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 1018   EXPECT_FALSE(state.needs_redraw()); | 1014   EXPECT_FALSE(state.needs_redraw()); | 
| 1019 | 1015 | 
| 1020   // Next BeginImplFrame should initiate second commit. | 1016   // Next BeginImplFrame should initiate second commit. | 
| 1021   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1017   state.OnBeginImplFrame(); | 
| 1022   EXPECT_ACTION_UPDATE_STATE( | 1018   EXPECT_ACTION_UPDATE_STATE( | 
| 1023       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1019       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1024 } | 1020 } | 
| 1025 | 1021 | 
| 1026 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 1022 TEST(SchedulerStateMachineTest, TestRequestCommitInvisible) { | 
| 1027   SchedulerSettings default_scheduler_settings; | 1023   SchedulerSettings default_scheduler_settings; | 
| 1028   StateMachine state(default_scheduler_settings); | 1024   StateMachine state(default_scheduler_settings); | 
| 1029   state.SetCanStart(); | 1025   state.SetCanStart(); | 
| 1030   state.UpdateState(state.NextAction()); | 1026   state.UpdateState(state.NextAction()); | 
| 1031   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1027   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 1032   state.SetNeedsCommit(); | 1028   state.SetNeedsCommit(); | 
| 1033   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1029   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1034 } | 1030 } | 
| 1035 | 1031 | 
| 1036 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / | 1032 // See ThreadProxy::BeginMainFrame "EarlyOut_NotVisible" / | 
| 1037 // "EarlyOut_OutputSurfaceLost" cases. | 1033 // "EarlyOut_OutputSurfaceLost" cases. | 
| 1038 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { | 1034 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseInvisible) { | 
| 1039   SchedulerSettings default_scheduler_settings; | 1035   SchedulerSettings default_scheduler_settings; | 
| 1040   StateMachine state(default_scheduler_settings); | 1036   StateMachine state(default_scheduler_settings); | 
| 1041   SET_UP_STATE(state) | 1037   SET_UP_STATE(state) | 
| 1042 | 1038 | 
| 1043   // Start clean and set commit. | 1039   // Start clean and set commit. | 
| 1044   state.SetNeedsCommit(); | 1040   state.SetNeedsCommit(); | 
| 1045 | 1041 | 
| 1046   // Begin the frame while visible. | 1042   // Begin the frame while visible. | 
| 1047   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1043   state.OnBeginImplFrame(); | 
| 1048   EXPECT_ACTION_UPDATE_STATE( | 1044   EXPECT_ACTION_UPDATE_STATE( | 
| 1049       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1045       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1050   EXPECT_COMMIT_STATE( | 1046   EXPECT_COMMIT_STATE( | 
| 1051       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1047       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 1052   EXPECT_FALSE(state.NeedsCommit()); | 1048   EXPECT_FALSE(state.NeedsCommit()); | 
| 1053   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1049   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1054 | 1050 | 
| 1055   // Become invisible and abort BeginMainFrame. | 1051   // Become invisible and abort BeginMainFrame. | 
| 1056   state.SetVisible(false); | 1052   state.SetVisible(false); | 
| 1057   state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); | 1053   state.BeginMainFrameAborted(CommitEarlyOutReason::ABORTED_NOT_VISIBLE); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 1071   // Become visible again. | 1067   // Become visible again. | 
| 1072   state.SetVisible(true); | 1068   state.SetVisible(true); | 
| 1073 | 1069 | 
| 1074   // Although we have aborted on this frame and haven't cancelled the commit | 1070   // Although we have aborted on this frame and haven't cancelled the commit | 
| 1075   // (i.e. need another), don't send another BeginMainFrame yet. | 1071   // (i.e. need another), don't send another BeginMainFrame yet. | 
| 1076   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1072   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 1077   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1073   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1078   EXPECT_TRUE(state.NeedsCommit()); | 1074   EXPECT_TRUE(state.NeedsCommit()); | 
| 1079 | 1075 | 
| 1080   // Start a new frame. | 1076   // Start a new frame. | 
| 1081   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1077   state.OnBeginImplFrame(); | 
| 1082   EXPECT_ACTION_UPDATE_STATE( | 1078   EXPECT_ACTION_UPDATE_STATE( | 
| 1083       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1079       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1084 | 1080 | 
| 1085   // We should be starting the commit now. | 1081   // We should be starting the commit now. | 
| 1086   EXPECT_COMMIT_STATE( | 1082   EXPECT_COMMIT_STATE( | 
| 1087       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1083       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 1088   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1084   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1089 } | 1085 } | 
| 1090 | 1086 | 
| 1091 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. | 1087 // See ThreadProxy::BeginMainFrame "EarlyOut_NoUpdates" case. | 
| 1092 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { | 1088 TEST(SchedulerStateMachineTest, TestAbortBeginMainFrameBecauseCommitNotNeeded) { | 
| 1093   SchedulerSettings default_scheduler_settings; | 1089   SchedulerSettings default_scheduler_settings; | 
| 1094   StateMachine state(default_scheduler_settings); | 1090   StateMachine state(default_scheduler_settings); | 
| 1095   state.SetCanStart(); | 1091   state.SetCanStart(); | 
| 1096   state.UpdateState(state.NextAction()); | 1092   state.UpdateState(state.NextAction()); | 
| 1097   state.DidCreateAndInitializeOutputSurface(); | 1093   state.DidCreateAndInitializeOutputSurface(); | 
| 1098   state.SetVisible(true); | 1094   state.SetVisible(true); | 
| 1099   state.SetCanDraw(true); | 1095   state.SetCanDraw(true); | 
| 1100 | 1096 | 
| 1101   // Get into a begin frame / commit state. | 1097   // Get into a begin frame / commit state. | 
| 1102   state.SetNeedsCommit(); | 1098   state.SetNeedsCommit(); | 
| 1103   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1099   state.OnBeginImplFrame(); | 
| 1104   EXPECT_ACTION_UPDATE_STATE( | 1100   EXPECT_ACTION_UPDATE_STATE( | 
| 1105       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1101       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1106   EXPECT_COMMIT_STATE( | 1102   EXPECT_COMMIT_STATE( | 
| 1107       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1103       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 1108   EXPECT_FALSE(state.NeedsCommit()); | 1104   EXPECT_FALSE(state.NeedsCommit()); | 
| 1109   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1105   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1110 | 1106 | 
| 1111   // Abort the commit, true means that the BeginMainFrame was sent but there | 1107   // Abort the commit, true means that the BeginMainFrame was sent but there | 
| 1112   // was no work to do on the main thread. | 1108   // was no work to do on the main thread. | 
| 1113   state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); | 1109   state.BeginMainFrameAborted(CommitEarlyOutReason::FINISHED_NO_UPDATES); | 
| 1114 | 1110 | 
| 1115   // NeedsCommit should now be false because the commit was actually handled. | 1111   // NeedsCommit should now be false because the commit was actually handled. | 
| 1116   EXPECT_FALSE(state.NeedsCommit()); | 1112   EXPECT_FALSE(state.NeedsCommit()); | 
| 1117 | 1113 | 
| 1118   // Even though the commit was aborted, we still expect to draw the new frame. | 1114   // Even though the commit was aborted, we still expect to draw the new frame. | 
| 1119   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1115   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1120   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1116   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1121   state.OnBeginImplFrameDeadline(); | 1117   state.OnBeginImplFrameDeadline(); | 
| 1122   EXPECT_ACTION_UPDATE_STATE( | 1118   EXPECT_ACTION_UPDATE_STATE( | 
| 1123       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1119       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1124   state.DidSwapBuffers(); | 1120   state.DidSwapBuffers(); | 
| 1125   state.DidSwapBuffersComplete(); | 1121   state.DidSwapBuffersComplete(); | 
| 1126   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1122   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1127 | 1123 | 
| 1128   // Verify another commit doesn't start on another frame either. | 1124   // Verify another commit doesn't start on another frame either. | 
| 1129   EXPECT_FALSE(state.NeedsCommit()); | 1125   EXPECT_FALSE(state.NeedsCommit()); | 
| 1130   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1126   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 1131 | 1127 | 
| 1132   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1128   state.OnBeginImplFrame(); | 
| 1133   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1129   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1134   state.OnBeginImplFrameDeadline(); | 1130   state.OnBeginImplFrameDeadline(); | 
| 1135   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1131   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1136 | 1132 | 
| 1137   // Verify another commit can start if requested, though. | 1133   // Verify another commit can start if requested, though. | 
| 1138   state.SetNeedsCommit(); | 1134   state.SetNeedsCommit(); | 
| 1139   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 1135   EXPECT_COMMIT_STATE(SchedulerStateMachine::COMMIT_STATE_IDLE); | 
| 1140   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1136   state.OnBeginImplFrame(); | 
| 1141   EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1137   EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1142 } | 1138 } | 
| 1143 | 1139 | 
| 1144 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { | 1140 TEST(SchedulerStateMachineTest, TestFirstContextCreation) { | 
| 1145   SchedulerSettings default_scheduler_settings; | 1141   SchedulerSettings default_scheduler_settings; | 
| 1146   StateMachine state(default_scheduler_settings); | 1142   StateMachine state(default_scheduler_settings); | 
| 1147   state.SetCanStart(); | 1143   state.SetCanStart(); | 
| 1148   state.SetVisible(true); | 1144   state.SetVisible(true); | 
| 1149   state.SetCanDraw(true); | 1145   state.SetCanDraw(true); | 
| 1150 | 1146 | 
| 1151   EXPECT_ACTION_UPDATE_STATE( | 1147   EXPECT_ACTION_UPDATE_STATE( | 
| 1152       SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1148       SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1153   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1149   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 1154   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1150   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1155 | 1151 | 
| 1156   // Check that the first init does not SetNeedsCommit. | 1152   // Check that the first init does not SetNeedsCommit. | 
| 1157   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1153   state.OnBeginImplFrame(); | 
| 1158   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1154   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1159   state.OnBeginImplFrameDeadline(); | 1155   state.OnBeginImplFrameDeadline(); | 
| 1160   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1156   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1161 | 1157 | 
| 1162   // Check that a needs commit initiates a BeginMainFrame. | 1158   // Check that a needs commit initiates a BeginMainFrame. | 
| 1163   state.SetNeedsCommit(); | 1159   state.SetNeedsCommit(); | 
| 1164   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1160   state.OnBeginImplFrame(); | 
| 1165   EXPECT_ACTION_UPDATE_STATE( | 1161   EXPECT_ACTION_UPDATE_STATE( | 
| 1166       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1162       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1167 } | 1163 } | 
| 1168 | 1164 | 
| 1169 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { | 1165 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) { | 
| 1170   SchedulerSettings default_scheduler_settings; | 1166   SchedulerSettings default_scheduler_settings; | 
| 1171   StateMachine state(default_scheduler_settings); | 1167   StateMachine state(default_scheduler_settings); | 
| 1172   SET_UP_STATE(state) | 1168   SET_UP_STATE(state) | 
| 1173 | 1169 | 
| 1174   EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1170   EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 
| 1175             state.NextAction()); | 1171             state.NextAction()); | 
| 1176   state.DidLoseOutputSurface(); | 1172   state.DidLoseOutputSurface(); | 
| 1177 | 1173 | 
| 1178   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1174   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1179   state.UpdateState(state.NextAction()); | 1175   state.UpdateState(state.NextAction()); | 
| 1180 | 1176 | 
| 1181   // Once context recreation begins, nothing should happen. | 1177   // Once context recreation begins, nothing should happen. | 
| 1182   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1178   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1183 | 1179 | 
| 1184   // Recreate the context. | 1180   // Recreate the context. | 
| 1185   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1181   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 1186 | 1182 | 
| 1187   // When the context is recreated, we should begin a commit. | 1183   // When the context is recreated, we should begin a commit. | 
| 1188   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1184   state.OnBeginImplFrame(); | 
| 1189   EXPECT_ACTION_UPDATE_STATE( | 1185   EXPECT_ACTION_UPDATE_STATE( | 
| 1190       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1186       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1191 } | 1187 } | 
| 1192 | 1188 | 
| 1193 TEST(SchedulerStateMachineTest, | 1189 TEST(SchedulerStateMachineTest, | 
| 1194      TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { | 1190      TestContextLostWhenIdleAndCommitRequestedWhileRecreating) { | 
| 1195   SchedulerSettings default_scheduler_settings; | 1191   SchedulerSettings default_scheduler_settings; | 
| 1196   // We use impl side painting because it's the more complicated version. | 1192   // We use impl side painting because it's the more complicated version. | 
| 1197   default_scheduler_settings.impl_side_painting = true; | 1193   default_scheduler_settings.impl_side_painting = true; | 
| 1198   StateMachine state(default_scheduler_settings); | 1194   StateMachine state(default_scheduler_settings); | 
| 1199   SET_UP_STATE(state) | 1195   SET_UP_STATE(state) | 
| 1200 | 1196 | 
| 1201   EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 1197   EXPECT_NE(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION, | 
| 1202             state.NextAction()); | 1198             state.NextAction()); | 
| 1203   state.DidLoseOutputSurface(); | 1199   state.DidLoseOutputSurface(); | 
| 1204   EXPECT_EQ(state.output_surface_state(), | 1200   EXPECT_EQ(state.output_surface_state(), | 
| 1205             SchedulerStateMachine::OUTPUT_SURFACE_LOST); | 1201             SchedulerStateMachine::OUTPUT_SURFACE_LOST); | 
| 1206 | 1202 | 
| 1207   EXPECT_ACTION_UPDATE_STATE( | 1203   EXPECT_ACTION_UPDATE_STATE( | 
| 1208       SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1204       SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1209   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1205   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1210 | 1206 | 
| 1211   // Once context recreation begins, nothing should happen. | 1207   // Once context recreation begins, nothing should happen. | 
| 1212   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1208   state.OnBeginImplFrame(); | 
| 1213   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1209   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1214   state.OnBeginImplFrameDeadline(); | 1210   state.OnBeginImplFrameDeadline(); | 
| 1215   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1211   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1216 | 1212 | 
| 1217   // While context is recreating, commits shouldn't begin. | 1213   // While context is recreating, commits shouldn't begin. | 
| 1218   state.SetNeedsCommit(); | 1214   state.SetNeedsCommit(); | 
| 1219   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1215   state.OnBeginImplFrame(); | 
| 1220   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1216   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1221   state.OnBeginImplFrameDeadline(); | 1217   state.OnBeginImplFrameDeadline(); | 
| 1222   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1218   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1223 | 1219 | 
| 1224   // Recreate the context | 1220   // Recreate the context | 
| 1225   state.DidCreateAndInitializeOutputSurface(); | 1221   state.DidCreateAndInitializeOutputSurface(); | 
| 1226   EXPECT_EQ(state.output_surface_state(), | 1222   EXPECT_EQ(state.output_surface_state(), | 
| 1227             SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); | 1223             SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT); | 
| 1228   EXPECT_FALSE(state.RedrawPending()); | 1224   EXPECT_FALSE(state.RedrawPending()); | 
| 1229 | 1225 | 
| 1230   // When the context is recreated, we wait until the next BeginImplFrame | 1226   // When the context is recreated, we wait until the next BeginImplFrame | 
| 1231   // before starting. | 1227   // before starting. | 
| 1232   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1228   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1233 | 1229 | 
| 1234   // When the BeginFrame comes in we should begin a commit | 1230   // When the BeginFrame comes in we should begin a commit | 
| 1235   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1231   state.OnBeginImplFrame(); | 
| 1236   EXPECT_ACTION_UPDATE_STATE( | 1232   EXPECT_ACTION_UPDATE_STATE( | 
| 1237       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1233       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1238   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1234   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1239   EXPECT_COMMIT_STATE( | 1235   EXPECT_COMMIT_STATE( | 
| 1240       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 1236       SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 
| 1241 | 1237 | 
| 1242   // Until that commit finishes, we shouldn't be drawing or animate. | 1238   // Until that commit finishes, we shouldn't be drawing or animate. | 
| 1243   state.OnBeginImplFrameDeadline(); | 1239   state.OnBeginImplFrameDeadline(); | 
| 1244   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1240   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1245 | 1241 | 
| 1246   // Finish the commit, which should make the surface active. | 1242   // Finish the commit, which should make the surface active. | 
| 1247   state.NotifyBeginMainFrameStarted(); | 1243   state.NotifyBeginMainFrameStarted(); | 
| 1248   state.NotifyReadyToCommit(); | 1244   state.NotifyReadyToCommit(); | 
| 1249   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1245   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 1250   EXPECT_EQ(state.output_surface_state(), | 1246   EXPECT_EQ(state.output_surface_state(), | 
| 1251             SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION); | 1247             SchedulerStateMachine::OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION); | 
| 1252   state.NotifyReadyToActivate(); | 1248   state.NotifyReadyToActivate(); | 
| 1253   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1249   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 
| 1254   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1250   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1255   EXPECT_EQ(state.output_surface_state(), | 1251   EXPECT_EQ(state.output_surface_state(), | 
| 1256             SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE); | 1252             SchedulerStateMachine::OUTPUT_SURFACE_ACTIVE); | 
| 1257 | 1253 | 
| 1258   // Finishing the first commit after initializing an output surface should | 1254   // Finishing the first commit after initializing an output surface should | 
| 1259   // automatically cause a redraw. | 1255   // automatically cause a redraw. | 
| 1260   EXPECT_TRUE(state.RedrawPending()); | 1256   EXPECT_TRUE(state.RedrawPending()); | 
| 1261   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1257   state.OnBeginImplFrame(); | 
| 1262   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1258   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1263   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1259   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1264   state.OnBeginImplFrameDeadline(); | 1260   state.OnBeginImplFrameDeadline(); | 
| 1265   EXPECT_ACTION_UPDATE_STATE( | 1261   EXPECT_ACTION_UPDATE_STATE( | 
| 1266       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1262       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1267   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1263   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1268   EXPECT_FALSE(state.RedrawPending()); | 1264   EXPECT_FALSE(state.RedrawPending()); | 
| 1269 | 1265 | 
| 1270   // Next frame as no work to do. | 1266   // Next frame as no work to do. | 
| 1271   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1267   state.OnBeginImplFrame(); | 
| 1272   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1268   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1273   state.OnBeginImplFrameDeadline(); | 1269   state.OnBeginImplFrameDeadline(); | 
| 1274   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1270   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1275 | 1271 | 
| 1276   // Once the context is recreated, whether we draw should be based on | 1272   // Once the context is recreated, whether we draw should be based on | 
| 1277   // SetCanDraw if waiting on first draw after activate. | 1273   // SetCanDraw if waiting on first draw after activate. | 
| 1278   state.SetNeedsRedraw(true); | 1274   state.SetNeedsRedraw(true); | 
| 1279   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1275   state.OnBeginImplFrame(); | 
| 1280   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1276   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1281   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1277   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1282   state.OnBeginImplFrameDeadline(); | 1278   state.OnBeginImplFrameDeadline(); | 
| 1283   EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1279   EXPECT_ACTION(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1284   state.SetCanDraw(false); | 1280   state.SetCanDraw(false); | 
| 1285   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1281   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1286   state.SetCanDraw(true); | 1282   state.SetCanDraw(true); | 
| 1287   EXPECT_ACTION_UPDATE_STATE( | 1283   EXPECT_ACTION_UPDATE_STATE( | 
| 1288       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1284       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1289   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1285   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1290 | 1286 | 
| 1291   // Once the context is recreated, whether we draw should be based on | 1287   // Once the context is recreated, whether we draw should be based on | 
| 1292   // SetCanDraw if waiting on first draw after activate. | 1288   // SetCanDraw if waiting on first draw after activate. | 
| 1293   state.SetNeedsRedraw(true); | 1289   state.SetNeedsRedraw(true); | 
| 1294   state.SetNeedsCommit(); | 1290   state.SetNeedsCommit(); | 
| 1295   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1291   state.OnBeginImplFrame(); | 
| 1296   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1292   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1297   EXPECT_ACTION_UPDATE_STATE( | 1293   EXPECT_ACTION_UPDATE_STATE( | 
| 1298       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1294       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1299   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1295   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1300   // Activate so we need the first draw | 1296   // Activate so we need the first draw | 
| 1301   state.NotifyBeginMainFrameStarted(); | 1297   state.NotifyBeginMainFrameStarted(); | 
| 1302   state.NotifyReadyToCommit(); | 1298   state.NotifyReadyToCommit(); | 
| 1303   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1299   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 1304   state.NotifyReadyToActivate(); | 1300   state.NotifyReadyToActivate(); | 
| 1305   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1301   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 1319 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 1315 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgress) { | 
| 1320   SchedulerSettings scheduler_settings; | 1316   SchedulerSettings scheduler_settings; | 
| 1321   StateMachine state(scheduler_settings); | 1317   StateMachine state(scheduler_settings); | 
| 1322   SET_UP_STATE(state) | 1318   SET_UP_STATE(state) | 
| 1323 | 1319 | 
| 1324   // Get a commit in flight. | 1320   // Get a commit in flight. | 
| 1325   state.SetNeedsCommit(); | 1321   state.SetNeedsCommit(); | 
| 1326 | 1322 | 
| 1327   // Set damage and expect a draw. | 1323   // Set damage and expect a draw. | 
| 1328   state.SetNeedsRedraw(true); | 1324   state.SetNeedsRedraw(true); | 
| 1329   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1325   state.OnBeginImplFrame(); | 
| 1330   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1326   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1331   EXPECT_ACTION_UPDATE_STATE( | 1327   EXPECT_ACTION_UPDATE_STATE( | 
| 1332       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1328       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1333   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1329   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1334   state.OnBeginImplFrameDeadline(); | 1330   state.OnBeginImplFrameDeadline(); | 
| 1335   EXPECT_ACTION_UPDATE_STATE( | 1331   EXPECT_ACTION_UPDATE_STATE( | 
| 1336       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1332       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1337   state.DidSwapBuffers(); | 1333   state.DidSwapBuffers(); | 
| 1338   state.DidSwapBuffersComplete(); | 1334   state.DidSwapBuffersComplete(); | 
| 1339   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1335   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 1352 | 1348 | 
| 1353   // We will abort the draw when the output surface is lost if we are | 1349   // We will abort the draw when the output surface is lost if we are | 
| 1354   // waiting for the first draw to unblock the main thread. | 1350   // waiting for the first draw to unblock the main thread. | 
| 1355   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1351   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 
| 1356   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1352   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 
| 1357 | 1353 | 
| 1358   // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1354   // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 
| 1359   EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1355   EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 
| 1360   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1356   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1361 | 1357 | 
| 1362   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1358   state.OnBeginImplFrame(); | 
| 1363   EXPECT_IMPL_FRAME_STATE( | 1359   EXPECT_IMPL_FRAME_STATE( | 
| 1364       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 1360       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 
| 1365   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1361   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1366 | 1362 | 
| 1367   state.OnBeginImplFrameDeadlinePending(); | 1363   state.OnBeginImplFrameDeadlinePending(); | 
| 1368   EXPECT_IMPL_FRAME_STATE( | 1364   EXPECT_IMPL_FRAME_STATE( | 
| 1369       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1365       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 
| 1370   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1366   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1371 | 1367 | 
| 1372   state.OnBeginImplFrameDeadline(); | 1368   state.OnBeginImplFrameDeadline(); | 
| 1373   EXPECT_IMPL_FRAME_STATE( | 1369   EXPECT_IMPL_FRAME_STATE( | 
| 1374       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1370       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 
| 1375   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1371   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1376 } | 1372 } | 
| 1377 | 1373 | 
| 1378 TEST(SchedulerStateMachineTest, | 1374 TEST(SchedulerStateMachineTest, | 
| 1379      TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { | 1375      TestContextLostWhileCommitInProgressAndAnotherCommitRequested) { | 
| 1380   SchedulerSettings scheduler_settings; | 1376   SchedulerSettings scheduler_settings; | 
| 1381   StateMachine state(scheduler_settings); | 1377   StateMachine state(scheduler_settings); | 
| 1382   SET_UP_STATE(state) | 1378   SET_UP_STATE(state) | 
| 1383 | 1379 | 
| 1384   // Get a commit in flight. | 1380   // Get a commit in flight. | 
| 1385   state.SetNeedsCommit(); | 1381   state.SetNeedsCommit(); | 
| 1386   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1382   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1387 | 1383 | 
| 1388   // Set damage and expect a draw. | 1384   // Set damage and expect a draw. | 
| 1389   state.SetNeedsRedraw(true); | 1385   state.SetNeedsRedraw(true); | 
| 1390   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1386   state.OnBeginImplFrame(); | 
| 1391   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1387   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1392   EXPECT_ACTION_UPDATE_STATE( | 1388   EXPECT_ACTION_UPDATE_STATE( | 
| 1393       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1389       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1394   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1390   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1395   state.OnBeginImplFrameDeadline(); | 1391   state.OnBeginImplFrameDeadline(); | 
| 1396   EXPECT_ACTION_UPDATE_STATE( | 1392   EXPECT_ACTION_UPDATE_STATE( | 
| 1397       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1393       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1398   state.DidSwapBuffers(); | 1394   state.DidSwapBuffers(); | 
| 1399   state.DidSwapBuffersComplete(); | 1395   state.DidSwapBuffersComplete(); | 
| 1400   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1396   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 1413   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1409   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 1414   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1410   EXPECT_TRUE(state.active_tree_needs_first_draw()); | 
| 1415 | 1411 | 
| 1416   // Because the output surface is missing, we expect the draw to abort. | 1412   // Because the output surface is missing, we expect the draw to abort. | 
| 1417   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1413   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 
| 1418 | 1414 | 
| 1419   // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1415   // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 
| 1420   EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1416   EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 
| 1421   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1417   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1422 | 1418 | 
| 1423   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1419   state.OnBeginImplFrame(); | 
| 1424   EXPECT_IMPL_FRAME_STATE( | 1420   EXPECT_IMPL_FRAME_STATE( | 
| 1425       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 1421       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 
| 1426   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1422   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1427 | 1423 | 
| 1428   state.OnBeginImplFrameDeadlinePending(); | 1424   state.OnBeginImplFrameDeadlinePending(); | 
| 1429   EXPECT_IMPL_FRAME_STATE( | 1425   EXPECT_IMPL_FRAME_STATE( | 
| 1430       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1426       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 
| 1431   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1427   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1432 | 1428 | 
| 1433   state.OnBeginImplFrameDeadline(); | 1429   state.OnBeginImplFrameDeadline(); | 
| 1434   EXPECT_IMPL_FRAME_STATE( | 1430   EXPECT_IMPL_FRAME_STATE( | 
| 1435       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1431       SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 
| 1436   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1432   EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 
| 1437 | 1433 | 
| 1438   state.OnBeginImplFrameIdle(); | 1434   state.OnBeginImplFrameIdle(); | 
| 1439   EXPECT_ACTION_UPDATE_STATE( | 1435   EXPECT_ACTION_UPDATE_STATE( | 
| 1440       SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1436       SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1441 | 1437 | 
| 1442   // After we get a new output surface, the commit flow should start. | 1438   // After we get a new output surface, the commit flow should start. | 
| 1443   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1439   state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 
| 1444   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1440   state.OnBeginImplFrame(); | 
| 1445   EXPECT_ACTION_UPDATE_STATE( | 1441   EXPECT_ACTION_UPDATE_STATE( | 
| 1446       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1442       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1447   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1443   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1448   state.NotifyBeginMainFrameStarted(); | 1444   state.NotifyBeginMainFrameStarted(); | 
| 1449   state.NotifyReadyToCommit(); | 1445   state.NotifyReadyToCommit(); | 
| 1450   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1446   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 1451   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1447   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1452   state.OnBeginImplFrameDeadline(); | 1448   state.OnBeginImplFrameDeadline(); | 
| 1453   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1449   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1454   EXPECT_ACTION_UPDATE_STATE( | 1450   EXPECT_ACTION_UPDATE_STATE( | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 1465 | 1461 | 
| 1466   state.SetNeedsRedraw(true); | 1462   state.SetNeedsRedraw(true); | 
| 1467 | 1463 | 
| 1468   // Cause a lost output surface, and restore it. | 1464   // Cause a lost output surface, and restore it. | 
| 1469   state.DidLoseOutputSurface(); | 1465   state.DidLoseOutputSurface(); | 
| 1470   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1466   EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 
| 1471   state.UpdateState(state.NextAction()); | 1467   state.UpdateState(state.NextAction()); | 
| 1472   state.DidCreateAndInitializeOutputSurface(); | 1468   state.DidCreateAndInitializeOutputSurface(); | 
| 1473 | 1469 | 
| 1474   EXPECT_FALSE(state.RedrawPending()); | 1470   EXPECT_FALSE(state.RedrawPending()); | 
| 1475   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1471   state.OnBeginImplFrame(); | 
| 1476   EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1472   EXPECT_ACTION(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1477 } | 1473 } | 
| 1478 | 1474 | 
| 1479 TEST(SchedulerStateMachineTest, | 1475 TEST(SchedulerStateMachineTest, | 
| 1480      TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { | 1476      TestPendingActivationsShouldBeForcedAfterLostOutputSurface) { | 
| 1481   SchedulerSettings settings; | 1477   SchedulerSettings settings; | 
| 1482   settings.impl_side_painting = true; | 1478   settings.impl_side_painting = true; | 
| 1483   StateMachine state(settings); | 1479   StateMachine state(settings); | 
| 1484   SET_UP_STATE(state) | 1480   SET_UP_STATE(state) | 
| 1485 | 1481 | 
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1579 | 1575 | 
| 1580 TEST(SchedulerStateMachineTest, | 1576 TEST(SchedulerStateMachineTest, | 
| 1581      TestTriggerDeadlineImmediatelyAfterAbortedCommit) { | 1577      TestTriggerDeadlineImmediatelyAfterAbortedCommit) { | 
| 1582   SchedulerSettings settings; | 1578   SchedulerSettings settings; | 
| 1583   settings.impl_side_painting = true; | 1579   settings.impl_side_painting = true; | 
| 1584   StateMachine state(settings); | 1580   StateMachine state(settings); | 
| 1585   SET_UP_STATE(state) | 1581   SET_UP_STATE(state) | 
| 1586 | 1582 | 
| 1587   // This test mirrors what happens during the first frame of a scroll gesture. | 1583   // This test mirrors what happens during the first frame of a scroll gesture. | 
| 1588   // First we get the input event and a BeginFrame. | 1584   // First we get the input event and a BeginFrame. | 
| 1589   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1585   state.OnBeginImplFrame(); | 
| 1590 | 1586 | 
| 1591   // As a response the compositor requests a redraw and a commit to tell the | 1587   // As a response the compositor requests a redraw and a commit to tell the | 
| 1592   // main thread about the new scroll offset. | 1588   // main thread about the new scroll offset. | 
| 1593   state.SetNeedsRedraw(true); | 1589   state.SetNeedsRedraw(true); | 
| 1594   state.SetNeedsCommit(); | 1590   state.SetNeedsCommit(); | 
| 1595 | 1591 | 
| 1596   // We should start the commit normally. | 1592   // We should start the commit normally. | 
| 1597   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1593   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1598   EXPECT_ACTION_UPDATE_STATE( | 1594   EXPECT_ACTION_UPDATE_STATE( | 
| 1599       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1595       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 1614   StateMachine& state = *state_ptr; | 1610   StateMachine& state = *state_ptr; | 
| 1615 | 1611 | 
| 1616   state.NotifyBeginMainFrameStarted(); | 1612   state.NotifyBeginMainFrameStarted(); | 
| 1617   state.NotifyReadyToCommit(); | 1613   state.NotifyReadyToCommit(); | 
| 1618   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1614   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 1619   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1615   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1620   state.NotifyReadyToActivate(); | 1616   state.NotifyReadyToActivate(); | 
| 1621   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 1617   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 
| 1622   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1618   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1623 | 1619 | 
| 1624   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1620   state.OnBeginImplFrame(); | 
| 1625   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1621   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1626   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1622   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1627 | 1623 | 
| 1628   EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1624   EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 
| 1629   state.OnBeginImplFrameDeadline(); | 1625   state.OnBeginImplFrameDeadline(); | 
| 1630   EXPECT_ACTION_UPDATE_STATE( | 1626   EXPECT_ACTION_UPDATE_STATE( | 
| 1631       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1627       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1632   state.DidSwapBuffers(); | 1628   state.DidSwapBuffers(); | 
| 1633 } | 1629 } | 
| 1634 | 1630 | 
| 1635 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { | 1631 TEST(SchedulerStateMachineTest, TestImplLatencyTakesPriority) { | 
| 1636   SchedulerSettings settings; | 1632   SchedulerSettings settings; | 
| 1637   settings.impl_side_painting = true; | 1633   settings.impl_side_painting = true; | 
| 1638   StateMachine state(settings); | 1634   StateMachine state(settings); | 
| 1639   SET_UP_STATE(state) | 1635   SET_UP_STATE(state) | 
| 1640 | 1636 | 
| 1641   // This test ensures that impl-draws are prioritized over main thread updates | 1637   // This test ensures that impl-draws are prioritized over main thread updates | 
| 1642   // in prefer impl latency mode. | 1638   // in prefer impl latency mode. | 
| 1643   state.SetNeedsRedraw(true); | 1639   state.SetNeedsRedraw(true); | 
| 1644   state.SetNeedsCommit(); | 1640   state.SetNeedsCommit(); | 
| 1645   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1641   state.OnBeginImplFrame(); | 
| 1646   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1642   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1647   EXPECT_ACTION_UPDATE_STATE( | 1643   EXPECT_ACTION_UPDATE_STATE( | 
| 1648       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1644       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1649   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1645   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1650 | 1646 | 
| 1651   // Verify the deadline is not triggered early until we enter | 1647   // Verify the deadline is not triggered early until we enter | 
| 1652   // prefer impl latency mode. | 1648   // prefer impl latency mode. | 
| 1653   EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1649   EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 
| 1654   state.SetImplLatencyTakesPriority(true); | 1650   state.SetImplLatencyTakesPriority(true); | 
| 1655   EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1651   EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 1672   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1668   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1673 | 1669 | 
| 1674   // Finish the previous commit and draw it. | 1670   // Finish the previous commit and draw it. | 
| 1675   FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 1671   FinishPreviousCommitAndDrawWithoutExitingDeadline(&state); | 
| 1676   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1672   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1677 | 1673 | 
| 1678   // Verify we do not send another BeginMainFrame if was are swap throttled | 1674   // Verify we do not send another BeginMainFrame if was are swap throttled | 
| 1679   // and did not just swap. | 1675   // and did not just swap. | 
| 1680   state.SetNeedsCommit(); | 1676   state.SetNeedsCommit(); | 
| 1681   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1677   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1682   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1678   state.OnBeginImplFrame(); | 
| 1683   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1679   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1684   EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1680   EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 
| 1685   state.OnBeginImplFrameDeadline(); | 1681   state.OnBeginImplFrameDeadline(); | 
| 1686   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1682   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1687 } | 1683 } | 
| 1688 | 1684 | 
| 1689 TEST(SchedulerStateMachineTest, | 1685 TEST(SchedulerStateMachineTest, | 
| 1690      TestTriggerDeadlineImmediatelyOnLostOutputSurface) { | 1686      TestTriggerDeadlineImmediatelyOnLostOutputSurface) { | 
| 1691   SchedulerSettings default_scheduler_settings; | 1687   SchedulerSettings default_scheduler_settings; | 
| 1692   StateMachine state(default_scheduler_settings); | 1688   StateMachine state(default_scheduler_settings); | 
| 1693   SET_UP_STATE(state) | 1689   SET_UP_STATE(state) | 
| 1694 | 1690 | 
| 1695   state.SetNeedsCommit(); | 1691   state.SetNeedsCommit(); | 
| 1696 | 1692 | 
| 1697   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1693   state.OnBeginImplFrame(); | 
| 1698   EXPECT_ACTION_UPDATE_STATE( | 1694   EXPECT_ACTION_UPDATE_STATE( | 
| 1699       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1695       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1700   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1696   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1701   EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1697   EXPECT_FALSE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 
| 1702 | 1698 | 
| 1703   state.DidLoseOutputSurface(); | 1699   state.DidLoseOutputSurface(); | 
| 1704   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1700   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1705   // The deadline should be triggered immediately when output surface is lost. | 1701   // The deadline should be triggered immediately when output surface is lost. | 
| 1706   EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 1702   EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineImmediately()); | 
| 1707 } | 1703 } | 
| 1708 | 1704 | 
| 1709 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { | 1705 TEST(SchedulerStateMachineTest, TestSetNeedsAnimate) { | 
| 1710   SchedulerSettings settings; | 1706   SchedulerSettings settings; | 
| 1711   settings.impl_side_painting = true; | 1707   settings.impl_side_painting = true; | 
| 1712   StateMachine state(settings); | 1708   StateMachine state(settings); | 
| 1713   SET_UP_STATE(state) | 1709   SET_UP_STATE(state) | 
| 1714 | 1710 | 
| 1715   // Test requesting an animation that, when run, causes us to draw. | 1711   // Test requesting an animation that, when run, causes us to draw. | 
| 1716   state.SetNeedsAnimate(); | 1712   state.SetNeedsAnimate(); | 
| 1717   EXPECT_TRUE(state.BeginFrameNeeded()); | 1713   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 1718   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1714   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1719 | 1715 | 
| 1720   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1716   state.OnBeginImplFrame(); | 
| 1721   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1717   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1722 | 1718 | 
| 1723   state.OnBeginImplFrameDeadlinePending(); | 1719   state.OnBeginImplFrameDeadlinePending(); | 
| 1724   state.OnBeginImplFrameDeadline(); | 1720   state.OnBeginImplFrameDeadline(); | 
| 1725   EXPECT_ACTION_UPDATE_STATE( | 1721   EXPECT_ACTION_UPDATE_STATE( | 
| 1726       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1722       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1727 } | 1723 } | 
| 1728 | 1724 | 
| 1729 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { | 1725 TEST(SchedulerStateMachineTest, TestAnimateBeforeCommit) { | 
| 1730   SchedulerSettings settings; | 1726   SchedulerSettings settings; | 
| 1731   settings.impl_side_painting = true; | 1727   settings.impl_side_painting = true; | 
| 1732   StateMachine state(settings); | 1728   StateMachine state(settings); | 
| 1733   SET_UP_STATE(state) | 1729   SET_UP_STATE(state) | 
| 1734 | 1730 | 
| 1735   // Check that animations are updated before we start a commit. | 1731   // Check that animations are updated before we start a commit. | 
| 1736   state.SetNeedsAnimate(); | 1732   state.SetNeedsAnimate(); | 
| 1737   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1733   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1738   state.SetNeedsCommit(); | 1734   state.SetNeedsCommit(); | 
| 1739   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1735   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1740   EXPECT_TRUE(state.BeginFrameNeeded()); | 1736   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 1741 | 1737 | 
| 1742   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1738   state.OnBeginImplFrame(); | 
| 1743   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1739   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1744   EXPECT_ACTION_UPDATE_STATE( | 1740   EXPECT_ACTION_UPDATE_STATE( | 
| 1745       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1741       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1746 | 1742 | 
| 1747   state.OnBeginImplFrameDeadlinePending(); | 1743   state.OnBeginImplFrameDeadlinePending(); | 
| 1748   state.OnBeginImplFrameDeadline(); | 1744   state.OnBeginImplFrameDeadline(); | 
| 1749   EXPECT_ACTION_UPDATE_STATE( | 1745   EXPECT_ACTION_UPDATE_STATE( | 
| 1750       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1746       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1751 } | 1747 } | 
| 1752 | 1748 | 
| 1753 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { | 1749 TEST(SchedulerStateMachineTest, TestAnimateAfterCommitBeforeDraw) { | 
| 1754   SchedulerSettings settings; | 1750   SchedulerSettings settings; | 
| 1755   settings.impl_side_painting = true; | 1751   settings.impl_side_painting = true; | 
| 1756   StateMachine state(settings); | 1752   StateMachine state(settings); | 
| 1757   SET_UP_STATE(state) | 1753   SET_UP_STATE(state) | 
| 1758 | 1754 | 
| 1759   // Check that animations are updated before we start a commit. | 1755   // Check that animations are updated before we start a commit. | 
| 1760   state.SetNeedsAnimate(); | 1756   state.SetNeedsAnimate(); | 
| 1761   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1757   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1762   state.SetNeedsCommit(); | 1758   state.SetNeedsCommit(); | 
| 1763   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1759   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1764   EXPECT_TRUE(state.BeginFrameNeeded()); | 1760   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 1765 | 1761 | 
| 1766   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1762   state.OnBeginImplFrame(); | 
| 1767   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1763   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1768   EXPECT_ACTION_UPDATE_STATE( | 1764   EXPECT_ACTION_UPDATE_STATE( | 
| 1769       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1765       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1770 | 1766 | 
| 1771   state.NotifyBeginMainFrameStarted(); | 1767   state.NotifyBeginMainFrameStarted(); | 
| 1772   state.NotifyReadyToCommit(); | 1768   state.NotifyReadyToCommit(); | 
| 1773   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1769   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 
| 1774 | 1770 | 
| 1775   state.OnBeginImplFrameDeadlinePending(); | 1771   state.OnBeginImplFrameDeadlinePending(); | 
| 1776   state.OnBeginImplFrameDeadline(); | 1772   state.OnBeginImplFrameDeadline(); | 
| 1777   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1773   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1778   EXPECT_ACTION_UPDATE_STATE( | 1774   EXPECT_ACTION_UPDATE_STATE( | 
| 1779       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1775       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1780 } | 1776 } | 
| 1781 | 1777 | 
| 1782 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { | 1778 TEST(SchedulerStateMachineTest, TestSetNeedsAnimateAfterAnimate) { | 
| 1783   SchedulerSettings settings; | 1779   SchedulerSettings settings; | 
| 1784   settings.impl_side_painting = true; | 1780   settings.impl_side_painting = true; | 
| 1785   StateMachine state(settings); | 1781   StateMachine state(settings); | 
| 1786   SET_UP_STATE(state) | 1782   SET_UP_STATE(state) | 
| 1787 | 1783 | 
| 1788   // Test requesting an animation after we have already animated during this | 1784   // Test requesting an animation after we have already animated during this | 
| 1789   // frame. | 1785   // frame. | 
| 1790   state.SetNeedsRedraw(true); | 1786   state.SetNeedsRedraw(true); | 
| 1791   EXPECT_TRUE(state.BeginFrameNeeded()); | 1787   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 1792   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1788   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1793 | 1789 | 
| 1794   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1790   state.OnBeginImplFrame(); | 
| 1795   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1791   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 
| 1796 | 1792 | 
| 1797   state.SetNeedsAnimate(); | 1793   state.SetNeedsAnimate(); | 
| 1798   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1794   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1799 | 1795 | 
| 1800   state.OnBeginImplFrameDeadline(); | 1796   state.OnBeginImplFrameDeadline(); | 
| 1801   EXPECT_ACTION_UPDATE_STATE( | 1797   EXPECT_ACTION_UPDATE_STATE( | 
| 1802       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1798       SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 
| 1803 } | 1799 } | 
| 1804 | 1800 | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 1816   SchedulerSettings settings; | 1812   SchedulerSettings settings; | 
| 1817   StateMachine state(settings); | 1813   StateMachine state(settings); | 
| 1818   SET_UP_STATE(state) | 1814   SET_UP_STATE(state) | 
| 1819 | 1815 | 
| 1820   state.SetDeferCommits(true); | 1816   state.SetDeferCommits(true); | 
| 1821 | 1817 | 
| 1822   state.SetNeedsCommit(); | 1818   state.SetNeedsCommit(); | 
| 1823   EXPECT_TRUE(state.BeginFrameNeeded()); | 1819   EXPECT_TRUE(state.BeginFrameNeeded()); | 
| 1824   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1820   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1825 | 1821 | 
| 1826   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1822   state.OnBeginImplFrame(); | 
| 1827   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1823   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1828 | 1824 | 
| 1829   state.OnBeginImplFrameDeadline(); | 1825   state.OnBeginImplFrameDeadline(); | 
| 1830   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1826   EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 
| 1831 | 1827 | 
| 1832   state.SetDeferCommits(false); | 1828   state.SetDeferCommits(false); | 
| 1833   state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 1829   state.OnBeginImplFrame(); | 
| 1834   EXPECT_ACTION_UPDATE_STATE( | 1830   EXPECT_ACTION_UPDATE_STATE( | 
| 1835       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1831       SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 
| 1836 } | 1832 } | 
| 1837 | 1833 | 
| 1838 }  // namespace | 1834 }  // namespace | 
| 1839 }  // namespace cc | 1835 }  // namespace cc | 
| OLD | NEW | 
|---|