| 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 "cc/scheduler/scheduler.h" | 7 #include "cc/scheduler/scheduler.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 #define EXPECT_ACTION_UPDATE_STATE(action) \ | 10 #define EXPECT_ACTION_UPDATE_STATE(action) \ |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 233 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
| 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 234 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 235 EXPECT_EQ(state.CommitState(), | 235 EXPECT_EQ(state.CommitState(), |
| 236 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); | 236 SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW); |
| 237 | 237 |
| 238 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 238 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 239 state.OnBeginImplFrameDeadline(); | 239 state.OnBeginImplFrameDeadline(); |
| 240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 240 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 241 EXPECT_ACTION_UPDATE_STATE( | 241 EXPECT_ACTION_UPDATE_STATE( |
| 242 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 242 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 243 state.DidSwapBuffers(); |
| 244 state.DidSwapBuffersComplete(); |
| 243 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 245 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 244 EXPECT_ACTION_UPDATE_STATE( | 246 EXPECT_ACTION_UPDATE_STATE( |
| 245 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 247 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 246 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 248 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 247 EXPECT_EQ(state.CommitState(), | 249 EXPECT_EQ(state.CommitState(), |
| 248 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); | 250 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT); |
| 249 | 251 |
| 250 state.NotifyBeginMainFrameStarted(); | 252 state.NotifyBeginMainFrameStarted(); |
| 251 state.NotifyReadyToCommit(); | 253 state.NotifyReadyToCommit(); |
| 252 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 254 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 state.NotifyReadyToActivate(); | 307 state.NotifyReadyToActivate(); |
| 306 EXPECT_ACTION_UPDATE_STATE( | 308 EXPECT_ACTION_UPDATE_STATE( |
| 307 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 309 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
| 308 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 310 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 309 | 311 |
| 310 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); | 312 EXPECT_TRUE(state.ShouldTriggerBeginImplFrameDeadlineEarly()); |
| 311 state.OnBeginImplFrameDeadline(); | 313 state.OnBeginImplFrameDeadline(); |
| 312 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 314 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 313 EXPECT_ACTION_UPDATE_STATE( | 315 EXPECT_ACTION_UPDATE_STATE( |
| 314 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 316 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 317 state.DidSwapBuffers(); |
| 318 state.DidSwapBuffersComplete(); |
| 315 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 319 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 316 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 320 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 317 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); | 321 EXPECT_EQ(state.CommitState(), SchedulerStateMachine::COMMIT_STATE_IDLE); |
| 318 } | 322 } |
| 319 | 323 |
| 320 TEST(SchedulerStateMachineTest, | 324 TEST(SchedulerStateMachineTest, |
| 321 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 325 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { |
| 322 SchedulerSettings default_scheduler_settings; | 326 SchedulerSettings default_scheduler_settings; |
| 323 StateMachine state(default_scheduler_settings); | 327 StateMachine state(default_scheduler_settings); |
| 324 state.SetCanStart(); | 328 state.SetCanStart(); |
| 325 state.UpdateState(state.NextAction()); | 329 state.UpdateState(state.NextAction()); |
| 326 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 330 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 327 state.SetVisible(true); | 331 state.SetVisible(true); |
| 328 state.SetCanDraw(true); | 332 state.SetCanDraw(true); |
| 329 state.SetNeedsRedraw(true); | 333 state.SetNeedsRedraw(true); |
| 330 EXPECT_TRUE(state.RedrawPending()); | 334 EXPECT_TRUE(state.RedrawPending()); |
| 331 EXPECT_TRUE(state.BeginFrameNeeded()); | 335 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 332 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 336 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 333 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 337 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 338 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 335 state.OnBeginImplFrameDeadline(); | 339 state.OnBeginImplFrameDeadline(); |
| 336 | 340 |
| 337 // We're drawing now. | 341 // We're drawing now. |
| 338 EXPECT_ACTION_UPDATE_STATE( | 342 EXPECT_ACTION_UPDATE_STATE( |
| 339 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 343 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 344 state.DidSwapBuffers(); |
| 345 state.DidSwapBuffersComplete(); |
| 340 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 341 | 347 |
| 342 EXPECT_FALSE(state.RedrawPending()); | 348 EXPECT_FALSE(state.RedrawPending()); |
| 343 EXPECT_FALSE(state.CommitPending()); | 349 EXPECT_FALSE(state.CommitPending()); |
| 344 | 350 |
| 345 // Failing the draw makes us require a commit. | 351 // Failing the draw makes us require a commit. |
| 346 state.DidDrawIfPossibleCompleted( | 352 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 347 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 348 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 353 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 354 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 350 EXPECT_ACTION_UPDATE_STATE( | 355 EXPECT_ACTION_UPDATE_STATE( |
| 351 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 356 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 352 EXPECT_TRUE(state.RedrawPending()); | 357 EXPECT_TRUE(state.RedrawPending()); |
| 353 EXPECT_TRUE(state.CommitPending()); | 358 EXPECT_TRUE(state.CommitPending()); |
| 354 } | 359 } |
| 355 | 360 |
| 356 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | 361 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { |
| 357 SchedulerSettings default_scheduler_settings; | 362 SchedulerSettings default_scheduler_settings; |
| 358 StateMachine state(default_scheduler_settings); | 363 StateMachine state(default_scheduler_settings); |
| 359 state.SetCanStart(); | 364 state.SetCanStart(); |
| 360 state.UpdateState(state.NextAction()); | 365 state.UpdateState(state.NextAction()); |
| 361 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 366 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 362 state.SetVisible(true); | 367 state.SetVisible(true); |
| 363 state.SetCanDraw(true); | 368 state.SetCanDraw(true); |
| 364 state.SetNeedsRedraw(true); | 369 state.SetNeedsRedraw(true); |
| 365 EXPECT_TRUE(state.RedrawPending()); | 370 EXPECT_TRUE(state.RedrawPending()); |
| 366 EXPECT_TRUE(state.BeginFrameNeeded()); | 371 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 367 | 372 |
| 368 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 373 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 369 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 375 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 371 state.OnBeginImplFrameDeadline(); | 376 state.OnBeginImplFrameDeadline(); |
| 372 EXPECT_ACTION_UPDATE_STATE( | 377 EXPECT_ACTION_UPDATE_STATE( |
| 373 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 378 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 379 state.DidSwapBuffers(); |
| 380 state.DidSwapBuffersComplete(); |
| 374 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 375 EXPECT_FALSE(state.RedrawPending()); | 382 EXPECT_FALSE(state.RedrawPending()); |
| 376 EXPECT_FALSE(state.CommitPending()); | 383 EXPECT_FALSE(state.CommitPending()); |
| 377 | 384 |
| 378 // Missing high res content requires a commit (but not a redraw) | 385 // Missing high res content requires a commit (but not a redraw) |
| 379 state.DidDrawIfPossibleCompleted( | 386 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 380 DrawSwapReadbackResult::DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | |
| 381 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 387 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 382 EXPECT_ACTION_UPDATE_STATE( | 388 EXPECT_ACTION_UPDATE_STATE( |
| 383 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 389 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 384 EXPECT_FALSE(state.RedrawPending()); | 390 EXPECT_FALSE(state.RedrawPending()); |
| 385 EXPECT_TRUE(state.CommitPending()); | 391 EXPECT_TRUE(state.CommitPending()); |
| 386 } | 392 } |
| 387 | 393 |
| 388 TEST(SchedulerStateMachineTest, | 394 TEST(SchedulerStateMachineTest, |
| 389 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | 395 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { |
| 390 SchedulerSettings default_scheduler_settings; | 396 SchedulerSettings default_scheduler_settings; |
| 391 StateMachine state(default_scheduler_settings); | 397 StateMachine state(default_scheduler_settings); |
| 392 state.SetCanStart(); | 398 state.SetCanStart(); |
| 393 state.UpdateState(state.NextAction()); | 399 state.UpdateState(state.NextAction()); |
| 394 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 400 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 395 | 401 |
| 396 state.SetVisible(true); | 402 state.SetVisible(true); |
| 397 state.SetCanDraw(true); | 403 state.SetCanDraw(true); |
| 398 state.SetNeedsRedraw(true); | 404 state.SetNeedsRedraw(true); |
| 399 EXPECT_TRUE(state.RedrawPending()); | 405 EXPECT_TRUE(state.RedrawPending()); |
| 400 EXPECT_TRUE(state.BeginFrameNeeded()); | 406 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 401 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 407 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 402 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 408 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 404 state.OnBeginImplFrameDeadline(); | 410 state.OnBeginImplFrameDeadline(); |
| 405 | 411 |
| 406 // We're drawing now. | 412 // We're drawing now. |
| 407 EXPECT_ACTION_UPDATE_STATE( | 413 EXPECT_ACTION_UPDATE_STATE( |
| 408 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 414 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 415 state.DidSwapBuffers(); |
| 416 state.DidSwapBuffersComplete(); |
| 409 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 417 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 410 EXPECT_FALSE(state.RedrawPending()); | 418 EXPECT_FALSE(state.RedrawPending()); |
| 411 EXPECT_FALSE(state.CommitPending()); | 419 EXPECT_FALSE(state.CommitPending()); |
| 412 | 420 |
| 413 // While still in the same BeginMainFrame callback on the main thread, | 421 // While still in the same BeginMainFrame callback on the main thread, |
| 414 // set needs redraw again. This should not redraw. | 422 // set needs redraw again. This should not redraw. |
| 415 state.SetNeedsRedraw(true); | 423 state.SetNeedsRedraw(true); |
| 416 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 417 | 425 |
| 418 // Failing the draw for animation checkerboards makes us require a commit. | 426 // Failing the draw for animation checkerboards makes us require a commit. |
| 419 state.DidDrawIfPossibleCompleted( | 427 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 420 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 421 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 428 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 422 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 429 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 423 EXPECT_ACTION_UPDATE_STATE( | 430 EXPECT_ACTION_UPDATE_STATE( |
| 424 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 431 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 425 EXPECT_TRUE(state.RedrawPending()); | 432 EXPECT_TRUE(state.RedrawPending()); |
| 426 } | 433 } |
| 427 | 434 |
| 428 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( | 435 void TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
| 429 bool main_frame_before_draw_enabled) { | 436 bool main_frame_before_draw_enabled) { |
| 430 SchedulerSettings scheduler_settings; | 437 SchedulerSettings scheduler_settings; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 448 EXPECT_TRUE(state.CommitPending()); | 455 EXPECT_TRUE(state.CommitPending()); |
| 449 | 456 |
| 450 // Then initiate a draw. | 457 // Then initiate a draw. |
| 451 state.SetNeedsRedraw(true); | 458 state.SetNeedsRedraw(true); |
| 452 state.OnBeginImplFrameDeadline(); | 459 state.OnBeginImplFrameDeadline(); |
| 453 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 454 EXPECT_ACTION_UPDATE_STATE( | 461 EXPECT_ACTION_UPDATE_STATE( |
| 455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 462 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 456 | 463 |
| 457 // Fail the draw. | 464 // Fail the draw. |
| 458 state.DidDrawIfPossibleCompleted( | 465 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 459 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 460 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 466 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 461 EXPECT_TRUE(state.BeginFrameNeeded()); | 467 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 462 EXPECT_TRUE(state.RedrawPending()); | 468 EXPECT_TRUE(state.RedrawPending()); |
| 463 // But the commit is ongoing. | 469 // But the commit is ongoing. |
| 464 EXPECT_TRUE(state.CommitPending()); | 470 EXPECT_TRUE(state.CommitPending()); |
| 465 | 471 |
| 466 // Finish the commit. Note, we should not yet be forcing a draw, but should | 472 // Finish the commit. Note, we should not yet be forcing a draw, but should |
| 467 // continue the commit as usual. | 473 // continue the commit as usual. |
| 468 state.NotifyBeginMainFrameStarted(); | 474 state.NotifyBeginMainFrameStarted(); |
| 469 state.NotifyReadyToCommit(); | 475 state.NotifyReadyToCommit(); |
| 470 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 477 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 472 EXPECT_TRUE(state.RedrawPending()); | 478 EXPECT_TRUE(state.RedrawPending()); |
| 473 | 479 |
| 474 // The redraw should be forced at the end of the next BeginImplFrame. | 480 // The redraw should be forced at the end of the next BeginImplFrame. |
| 475 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 481 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 477 if (main_frame_before_draw_enabled) { | 483 if (main_frame_before_draw_enabled) { |
| 478 EXPECT_ACTION_UPDATE_STATE( | 484 EXPECT_ACTION_UPDATE_STATE( |
| 479 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 485 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 480 } | 486 } |
| 481 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 487 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 482 state.OnBeginImplFrameDeadline(); | 488 state.OnBeginImplFrameDeadline(); |
| 483 EXPECT_ACTION_UPDATE_STATE( | 489 EXPECT_ACTION_UPDATE_STATE( |
| 484 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 490 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
| 491 state.DidSwapBuffers(); |
| 492 state.DidSwapBuffersComplete(); |
| 485 } | 493 } |
| 486 | 494 |
| 487 TEST(SchedulerStateMachineTest, | 495 TEST(SchedulerStateMachineTest, |
| 488 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 496 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
| 489 bool main_frame_before_draw_enabled = false; | 497 bool main_frame_before_draw_enabled = false; |
| 490 TestFailedDrawsEventuallyForceDrawAfterNextCommit( | 498 TestFailedDrawsEventuallyForceDrawAfterNextCommit( |
| 491 main_frame_before_draw_enabled); | 499 main_frame_before_draw_enabled); |
| 492 } | 500 } |
| 493 | 501 |
| 494 TEST(SchedulerStateMachineTest, | 502 TEST(SchedulerStateMachineTest, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 522 | 530 |
| 523 // Then initiate a draw. | 531 // Then initiate a draw. |
| 524 state.SetNeedsRedraw(true); | 532 state.SetNeedsRedraw(true); |
| 525 state.OnBeginImplFrameDeadline(); | 533 state.OnBeginImplFrameDeadline(); |
| 526 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 527 EXPECT_ACTION_UPDATE_STATE( | 535 EXPECT_ACTION_UPDATE_STATE( |
| 528 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 536 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 529 | 537 |
| 530 // Fail the draw enough times to force a redraw, | 538 // Fail the draw enough times to force a redraw, |
| 531 // then once more for good measure. | 539 // then once more for good measure. |
| 532 for (int i = 0; i < draw_limit + 1; ++i) { | 540 for (int i = 0; i < draw_limit + 1; ++i) |
| 533 state.DidDrawIfPossibleCompleted( | 541 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 534 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 535 } | |
| 536 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 542 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 537 EXPECT_TRUE(state.BeginFrameNeeded()); | 543 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 538 EXPECT_TRUE(state.RedrawPending()); | 544 EXPECT_TRUE(state.RedrawPending()); |
| 539 // But the commit is ongoing. | 545 // But the commit is ongoing. |
| 540 EXPECT_TRUE(state.CommitPending()); | 546 EXPECT_TRUE(state.CommitPending()); |
| 541 EXPECT_TRUE(state.ForcedRedrawState() == | 547 EXPECT_TRUE(state.ForcedRedrawState() == |
| 542 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); | 548 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); |
| 543 | 549 |
| 544 state.NotifyBeginMainFrameStarted(); | 550 state.NotifyBeginMainFrameStarted(); |
| 545 state.NotifyReadyToCommit(); | 551 state.NotifyReadyToCommit(); |
| 546 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 552 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 547 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 553 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 548 EXPECT_TRUE(state.RedrawPending()); | 554 EXPECT_TRUE(state.RedrawPending()); |
| 549 EXPECT_FALSE(state.CommitPending()); | 555 EXPECT_FALSE(state.CommitPending()); |
| 550 | 556 |
| 551 // Now force redraw should be in waiting for activation | 557 // Now force redraw should be in waiting for activation |
| 552 EXPECT_TRUE(state.ForcedRedrawState() == | 558 EXPECT_TRUE(state.ForcedRedrawState() == |
| 553 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 559 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 554 | 560 |
| 555 // After failing additional draws, we should still be in a forced | 561 // After failing additional draws, we should still be in a forced |
| 556 // redraw, but not back in WAITING_FOR_COMMIT. | 562 // redraw, but not back in WAITING_FOR_COMMIT. |
| 557 for (int i = 0; i < draw_limit + 1; ++i) { | 563 for (int i = 0; i < draw_limit + 1; ++i) |
| 558 state.DidDrawIfPossibleCompleted( | 564 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 559 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 560 } | |
| 561 EXPECT_TRUE(state.RedrawPending()); | 565 EXPECT_TRUE(state.RedrawPending()); |
| 562 EXPECT_TRUE(state.ForcedRedrawState() == | 566 EXPECT_TRUE(state.ForcedRedrawState() == |
| 563 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 567 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 564 } | 568 } |
| 565 | 569 |
| 566 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 570 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| 567 SchedulerSettings default_scheduler_settings; | 571 SchedulerSettings default_scheduler_settings; |
| 568 StateMachine state(default_scheduler_settings); | 572 StateMachine state(default_scheduler_settings); |
| 569 state.SetCanStart(); | 573 state.SetCanStart(); |
| 570 state.UpdateState(state.NextAction()); | 574 state.UpdateState(state.NextAction()); |
| 571 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 575 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 572 state.SetVisible(true); | 576 state.SetVisible(true); |
| 573 state.SetCanDraw(true); | 577 state.SetCanDraw(true); |
| 574 | 578 |
| 575 // Start a draw. | 579 // Start a draw. |
| 576 state.SetNeedsRedraw(true); | 580 state.SetNeedsRedraw(true); |
| 577 EXPECT_TRUE(state.BeginFrameNeeded()); | 581 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 578 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 582 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 579 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 583 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 580 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 584 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 581 state.OnBeginImplFrameDeadline(); | 585 state.OnBeginImplFrameDeadline(); |
| 582 EXPECT_TRUE(state.RedrawPending()); | 586 EXPECT_TRUE(state.RedrawPending()); |
| 583 EXPECT_ACTION_UPDATE_STATE( | 587 EXPECT_ACTION_UPDATE_STATE( |
| 584 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 588 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 585 | 589 |
| 586 // Failing the draw for animation checkerboards makes us require a commit. | 590 // Failing the draw for animation checkerboards makes us require a commit. |
| 587 state.DidDrawIfPossibleCompleted( | 591 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 588 DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 589 EXPECT_ACTION_UPDATE_STATE( | 592 EXPECT_ACTION_UPDATE_STATE( |
| 590 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 593 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 592 EXPECT_TRUE(state.RedrawPending()); | 595 EXPECT_TRUE(state.RedrawPending()); |
| 593 | 596 |
| 594 // We should not be trying to draw again now, but we have a commit pending. | 597 // We should not be trying to draw again now, but we have a commit pending. |
| 595 EXPECT_TRUE(state.BeginFrameNeeded()); | 598 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 596 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 599 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 597 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 600 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 601 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 599 | 602 |
| 600 // We should try to draw again at the end of the next BeginImplFrame on | 603 // We should try to draw again at the end of the next BeginImplFrame on |
| 601 // the impl thread. | 604 // the impl thread. |
| 602 state.OnBeginImplFrameDeadline(); | 605 state.OnBeginImplFrameDeadline(); |
| 603 EXPECT_ACTION_UPDATE_STATE( | 606 EXPECT_ACTION_UPDATE_STATE( |
| 604 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 607 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 608 state.DidSwapBuffers(); |
| 609 state.DidSwapBuffersComplete(); |
| 605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 606 } | 611 } |
| 607 | 612 |
| 608 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { | 613 TEST(SchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame) { |
| 609 SchedulerSettings default_scheduler_settings; | 614 SchedulerSettings default_scheduler_settings; |
| 610 StateMachine state(default_scheduler_settings); | 615 StateMachine state(default_scheduler_settings); |
| 611 state.SetCanStart(); | 616 state.SetCanStart(); |
| 612 state.UpdateState(state.NextAction()); | 617 state.UpdateState(state.NextAction()); |
| 613 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 618 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 614 state.SetVisible(true); | 619 state.SetVisible(true); |
| 615 state.SetCanDraw(true); | 620 state.SetCanDraw(true); |
| 616 state.SetNeedsRedraw(true); | 621 state.SetNeedsRedraw(true); |
| 617 | 622 |
| 618 // Draw the first frame. | 623 // Draw the first frame. |
| 619 EXPECT_TRUE(state.BeginFrameNeeded()); | 624 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 620 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 625 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 626 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 623 | 628 |
| 624 state.OnBeginImplFrameDeadline(); | 629 state.OnBeginImplFrameDeadline(); |
| 625 EXPECT_ACTION_UPDATE_STATE( | 630 EXPECT_ACTION_UPDATE_STATE( |
| 626 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 631 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 627 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 632 state.DidSwapBuffers(); |
| 633 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 634 state.DidSwapBuffersComplete(); |
| 628 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 635 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 629 | 636 |
| 630 // Before the next BeginImplFrame, set needs redraw again. | 637 // Before the next BeginImplFrame, set needs redraw again. |
| 631 // This should not redraw until the next BeginImplFrame. | 638 // This should not redraw until the next BeginImplFrame. |
| 632 state.SetNeedsRedraw(true); | 639 state.SetNeedsRedraw(true); |
| 633 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 640 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 634 | 641 |
| 635 // Move to another frame. This should now draw. | 642 // Move to another frame. This should now draw. |
| 636 EXPECT_TRUE(state.BeginFrameNeeded()); | 643 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 637 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 644 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 638 | 645 |
| 639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 640 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 647 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 641 | 648 |
| 642 state.OnBeginImplFrameDeadline(); | 649 state.OnBeginImplFrameDeadline(); |
| 643 EXPECT_ACTION_UPDATE_STATE( | 650 EXPECT_ACTION_UPDATE_STATE( |
| 644 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 651 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 645 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 652 state.DidSwapBuffers(); |
| 653 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 654 state.DidSwapBuffersComplete(); |
| 646 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 647 | 656 |
| 648 // We just swapped, so we should proactively request another BeginImplFrame. | 657 // We just swapped, so we should proactively request another BeginImplFrame. |
| 649 EXPECT_TRUE(state.BeginFrameNeeded()); | 658 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 650 } | 659 } |
| 651 | 660 |
| 652 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { | 661 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
| 653 SchedulerSettings default_scheduler_settings; | 662 SchedulerSettings default_scheduler_settings; |
| 654 | 663 |
| 655 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline | 664 // When not in BeginImplFrame deadline, or in BeginImplFrame deadline |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 882 EXPECT_ACTION_UPDATE_STATE( | 891 EXPECT_ACTION_UPDATE_STATE( |
| 883 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 892 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 884 } | 893 } |
| 885 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 894 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 886 | 895 |
| 887 state.OnBeginImplFrameDeadline(); | 896 state.OnBeginImplFrameDeadline(); |
| 888 | 897 |
| 889 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 898 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 890 EXPECT_ACTION_UPDATE_STATE( | 899 EXPECT_ACTION_UPDATE_STATE( |
| 891 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 900 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 892 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 901 state.DidSwapBuffers(); |
| 902 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 903 state.DidSwapBuffersComplete(); |
| 893 if (!main_frame_before_draw_enabled) { | 904 if (!main_frame_before_draw_enabled) { |
| 894 EXPECT_ACTION_UPDATE_STATE( | 905 EXPECT_ACTION_UPDATE_STATE( |
| 895 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 906 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 896 } | 907 } |
| 897 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 908 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 898 } | 909 } |
| 899 | 910 |
| 900 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { | 911 TEST(SchedulerStateMachineTest, TestSetNeedsCommitIsNotLost) { |
| 901 bool main_frame_before_draw_enabled = false; | 912 bool main_frame_before_draw_enabled = false; |
| 902 TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled); | 913 TestSetNeedsCommitIsNotLost(main_frame_before_draw_enabled); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 EXPECT_TRUE(state.needs_redraw()); | 951 EXPECT_TRUE(state.needs_redraw()); |
| 941 | 952 |
| 942 // Expect to do nothing until BeginImplFrame deadline | 953 // Expect to do nothing until BeginImplFrame deadline |
| 943 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 944 | 955 |
| 945 // At BeginImplFrame deadline, draw. | 956 // At BeginImplFrame deadline, draw. |
| 946 state.OnBeginImplFrameDeadline(); | 957 state.OnBeginImplFrameDeadline(); |
| 947 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 958 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 948 EXPECT_ACTION_UPDATE_STATE( | 959 EXPECT_ACTION_UPDATE_STATE( |
| 949 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 960 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 950 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 961 state.DidSwapBuffers(); |
| 962 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 963 state.DidSwapBuffersComplete(); |
| 951 | 964 |
| 952 // Should be synchronized, no draw needed, no action needed. | 965 // Should be synchronized, no draw needed, no action needed. |
| 953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 966 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 954 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 967 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 955 EXPECT_FALSE(state.needs_redraw()); | 968 EXPECT_FALSE(state.needs_redraw()); |
| 956 } | 969 } |
| 957 | 970 |
| 958 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 971 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| 959 SchedulerSettings default_scheduler_settings; | 972 SchedulerSettings default_scheduler_settings; |
| 960 StateMachine state(default_scheduler_settings); | 973 StateMachine state(default_scheduler_settings); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 EXPECT_TRUE(state.needs_redraw()); | 1005 EXPECT_TRUE(state.needs_redraw()); |
| 993 | 1006 |
| 994 // Expect to do nothing until BeginImplFrame deadline. | 1007 // Expect to do nothing until BeginImplFrame deadline. |
| 995 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1008 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 996 | 1009 |
| 997 // At BeginImplFrame deadline, draw. | 1010 // At BeginImplFrame deadline, draw. |
| 998 state.OnBeginImplFrameDeadline(); | 1011 state.OnBeginImplFrameDeadline(); |
| 999 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1012 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1000 EXPECT_ACTION_UPDATE_STATE( | 1013 EXPECT_ACTION_UPDATE_STATE( |
| 1001 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1014 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1002 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1015 state.DidSwapBuffers(); |
| 1016 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1017 state.DidSwapBuffersComplete(); |
| 1003 | 1018 |
| 1004 // Should be synchronized, no draw needed, no action needed. | 1019 // Should be synchronized, no draw needed, no action needed. |
| 1005 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1020 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1006 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1021 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1007 EXPECT_FALSE(state.needs_redraw()); | 1022 EXPECT_FALSE(state.needs_redraw()); |
| 1008 | 1023 |
| 1009 // Next BeginImplFrame should initiate second commit. | 1024 // Next BeginImplFrame should initiate second commit. |
| 1010 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1025 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1011 EXPECT_ACTION_UPDATE_STATE( | 1026 EXPECT_ACTION_UPDATE_STATE( |
| 1012 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1027 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1103 EXPECT_FALSE(state.NeedsCommit()); | 1118 EXPECT_FALSE(state.NeedsCommit()); |
| 1104 | 1119 |
| 1105 // Start a new frame; draw because this is the first frame since output | 1120 // Start a new frame; draw because this is the first frame since output |
| 1106 // surface init'd. | 1121 // surface init'd. |
| 1107 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1122 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1108 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1123 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1109 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1110 state.OnBeginImplFrameDeadline(); | 1125 state.OnBeginImplFrameDeadline(); |
| 1111 EXPECT_ACTION_UPDATE_STATE( | 1126 EXPECT_ACTION_UPDATE_STATE( |
| 1112 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1127 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1128 state.DidSwapBuffers(); |
| 1129 state.DidSwapBuffersComplete(); |
| 1113 | 1130 |
| 1114 // Verify another commit doesn't start on another frame either. | 1131 // Verify another commit doesn't start on another frame either. |
| 1115 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1132 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1116 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1133 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1117 EXPECT_FALSE(state.NeedsCommit()); | 1134 EXPECT_FALSE(state.NeedsCommit()); |
| 1118 | 1135 |
| 1119 // Verify another commit can start if requested, though. | 1136 // Verify another commit can start if requested, though. |
| 1120 state.SetNeedsCommit(); | 1137 state.SetNeedsCommit(); |
| 1121 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); | 1138 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.CommitState()); |
| 1122 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, | 1139 EXPECT_EQ(SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME, |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1259 // Set damage and expect a draw. | 1276 // Set damage and expect a draw. |
| 1260 state.SetNeedsRedraw(true); | 1277 state.SetNeedsRedraw(true); |
| 1261 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1278 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1262 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1279 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1263 EXPECT_ACTION_UPDATE_STATE( | 1280 EXPECT_ACTION_UPDATE_STATE( |
| 1264 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1281 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1265 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1282 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1266 state.OnBeginImplFrameDeadline(); | 1283 state.OnBeginImplFrameDeadline(); |
| 1267 EXPECT_ACTION_UPDATE_STATE( | 1284 EXPECT_ACTION_UPDATE_STATE( |
| 1268 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1285 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1286 state.DidSwapBuffers(); |
| 1287 state.DidSwapBuffersComplete(); |
| 1269 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1288 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1270 | 1289 |
| 1271 // Cause a lost context while the BeginMainFrame is in flight. | 1290 // Cause a lost context while the BeginMainFrame is in flight. |
| 1272 state.DidLoseOutputSurface(); | 1291 state.DidLoseOutputSurface(); |
| 1273 | 1292 |
| 1274 // Ask for another draw. Expect nothing happens. | 1293 // Ask for another draw. Expect nothing happens. |
| 1275 state.SetNeedsRedraw(true); | 1294 state.SetNeedsRedraw(true); |
| 1276 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); | 1295 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction()); |
| 1277 | 1296 |
| 1278 // Finish the frame, and commit. | 1297 // Finish the frame, and commit. |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1324 // Set damage and expect a draw. | 1343 // Set damage and expect a draw. |
| 1325 state.SetNeedsRedraw(true); | 1344 state.SetNeedsRedraw(true); |
| 1326 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1345 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1327 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1328 EXPECT_ACTION_UPDATE_STATE( | 1347 EXPECT_ACTION_UPDATE_STATE( |
| 1329 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1348 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1330 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1349 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1331 state.OnBeginImplFrameDeadline(); | 1350 state.OnBeginImplFrameDeadline(); |
| 1332 EXPECT_ACTION_UPDATE_STATE( | 1351 EXPECT_ACTION_UPDATE_STATE( |
| 1333 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1352 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1353 state.DidSwapBuffers(); |
| 1354 state.DidSwapBuffersComplete(); |
| 1334 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1355 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1335 | 1356 |
| 1336 // Cause a lost context while the BeginMainFrame is in flight. | 1357 // Cause a lost context while the BeginMainFrame is in flight. |
| 1337 state.DidLoseOutputSurface(); | 1358 state.DidLoseOutputSurface(); |
| 1338 | 1359 |
| 1339 // Ask for another draw and also set needs commit. Expect nothing happens. | 1360 // Ask for another draw and also set needs commit. Expect nothing happens. |
| 1340 state.SetNeedsRedraw(true); | 1361 state.SetNeedsRedraw(true); |
| 1341 state.SetNeedsCommit(); | 1362 state.SetNeedsCommit(); |
| 1342 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1363 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1343 | 1364 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1382 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1403 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1384 state.NotifyBeginMainFrameStarted(); | 1405 state.NotifyBeginMainFrameStarted(); |
| 1385 state.NotifyReadyToCommit(); | 1406 state.NotifyReadyToCommit(); |
| 1386 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1407 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1387 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1408 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1388 state.OnBeginImplFrameDeadline(); | 1409 state.OnBeginImplFrameDeadline(); |
| 1389 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1410 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1390 EXPECT_ACTION_UPDATE_STATE( | 1411 EXPECT_ACTION_UPDATE_STATE( |
| 1391 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1412 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1413 state.DidSwapBuffers(); |
| 1414 state.DidSwapBuffersComplete(); |
| 1392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1415 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1393 } | 1416 } |
| 1394 | 1417 |
| 1395 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { | 1418 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) { |
| 1396 SchedulerSettings default_scheduler_settings; | 1419 SchedulerSettings default_scheduler_settings; |
| 1397 StateMachine state(default_scheduler_settings); | 1420 StateMachine state(default_scheduler_settings); |
| 1398 state.SetCanStart(); | 1421 state.SetCanStart(); |
| 1399 state.UpdateState(state.NextAction()); | 1422 state.UpdateState(state.NextAction()); |
| 1400 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 1423 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1401 state.SetVisible(true); | 1424 state.SetVisible(true); |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 } | 1677 } |
| 1655 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1678 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1656 | 1679 |
| 1657 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1680 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1658 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1681 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1659 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1682 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1660 // Perform the draw & swap of replacement commit. | 1683 // Perform the draw & swap of replacement commit. |
| 1661 state.OnBeginImplFrameDeadline(); | 1684 state.OnBeginImplFrameDeadline(); |
| 1662 EXPECT_ACTION_UPDATE_STATE( | 1685 EXPECT_ACTION_UPDATE_STATE( |
| 1663 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1686 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1687 state.DidSwapBuffers(); |
| 1688 state.DidSwapBuffersComplete(); |
| 1664 if (!settings.main_frame_before_draw_enabled) { | 1689 if (!settings.main_frame_before_draw_enabled) { |
| 1665 // New replacement commit is scheduled. | 1690 // New replacement commit is scheduled. |
| 1666 EXPECT_ACTION_UPDATE_STATE( | 1691 EXPECT_ACTION_UPDATE_STATE( |
| 1667 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1692 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1668 // Forced commit is started. | 1693 // Forced commit is started. |
| 1669 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, | 1694 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_WAITING_FOR_COMMIT, |
| 1670 state.readback_state()); | 1695 state.readback_state()); |
| 1671 } | 1696 } |
| 1672 EXPECT_ACTION_UPDATE_STATE( | 1697 EXPECT_ACTION_UPDATE_STATE( |
| 1673 SchedulerStateMachine::ACTION_NONE); | 1698 SchedulerStateMachine::ACTION_NONE); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1693 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1718 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1694 state.NotifyReadyToActivate(); | 1719 state.NotifyReadyToActivate(); |
| 1695 EXPECT_ACTION_UPDATE_STATE( | 1720 EXPECT_ACTION_UPDATE_STATE( |
| 1696 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); | 1721 SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE); |
| 1697 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1722 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1698 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1723 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1699 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1724 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1700 state.OnBeginImplFrameDeadline(); | 1725 state.OnBeginImplFrameDeadline(); |
| 1701 EXPECT_ACTION_UPDATE_STATE( | 1726 EXPECT_ACTION_UPDATE_STATE( |
| 1702 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1727 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1728 state.DidSwapBuffers(); |
| 1729 state.DidSwapBuffersComplete(); |
| 1703 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); | 1730 EXPECT_EQ(SchedulerStateMachine::READBACK_STATE_IDLE, state.readback_state()); |
| 1704 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1731 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1705 } | 1732 } |
| 1706 | 1733 |
| 1707 // Explicitly test when main_frame_before_draw_enabled = true. | 1734 // Explicitly test when main_frame_before_draw_enabled = true. |
| 1708 TEST(SchedulerStateMachineTest, | 1735 TEST(SchedulerStateMachineTest, |
| 1709 ForceCommitWhenReplacementActivationInProgressAndMainFrameEnabled) { | 1736 ForceCommitWhenReplacementActivationInProgressAndMainFrameEnabled) { |
| 1710 bool main_frame_before_draw_enabled = true; | 1737 bool main_frame_before_draw_enabled = true; |
| 1711 TestForceCommitWhenReplacementActivationInProgress( | 1738 TestForceCommitWhenReplacementActivationInProgress( |
| 1712 main_frame_before_draw_enabled); | 1739 main_frame_before_draw_enabled); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1765 EXPECT_FALSE(state.NeedsCommit()); | 1792 EXPECT_FALSE(state.NeedsCommit()); |
| 1766 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1793 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1767 | 1794 |
| 1768 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); | 1795 state.OnBeginImplFrame(BeginFrameArgs::CreateForTesting()); |
| 1769 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1796 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1770 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1797 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1771 // Perform the draw & swap of replacement commit. | 1798 // Perform the draw & swap of replacement commit. |
| 1772 state.OnBeginImplFrameDeadline(); | 1799 state.OnBeginImplFrameDeadline(); |
| 1773 EXPECT_ACTION_UPDATE_STATE( | 1800 EXPECT_ACTION_UPDATE_STATE( |
| 1774 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1801 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1802 state.DidSwapBuffers(); |
| 1803 state.DidSwapBuffersComplete(); |
| 1775 EXPECT_ACTION_UPDATE_STATE( | 1804 EXPECT_ACTION_UPDATE_STATE( |
| 1776 SchedulerStateMachine::ACTION_NONE); | 1805 SchedulerStateMachine::ACTION_NONE); |
| 1777 | 1806 |
| 1778 // forced commit is started. | 1807 // forced commit is started. |
| 1779 state.NotifyBeginMainFrameStarted(); | 1808 state.NotifyBeginMainFrameStarted(); |
| 1780 state.NotifyReadyToCommit(); | 1809 state.NotifyReadyToCommit(); |
| 1781 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1810 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1782 } | 1811 } |
| 1783 | 1812 |
| 1784 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { | 1813 TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1834 state.NotifyBeginMainFrameStarted(); | 1863 state.NotifyBeginMainFrameStarted(); |
| 1835 state.NotifyReadyToCommit(); | 1864 state.NotifyReadyToCommit(); |
| 1836 | 1865 |
| 1837 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1866 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1838 state.CommitState()); | 1867 state.CommitState()); |
| 1839 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1868 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1840 | 1869 |
| 1841 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1870 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1842 | 1871 |
| 1843 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1872 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1844 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1873 state.DidSwapBuffers(); |
| 1874 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1875 state.DidSwapBuffersComplete(); |
| 1845 | 1876 |
| 1846 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1877 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1847 | 1878 |
| 1848 // Should be waiting for the normal BeginMainFrame. | 1879 // Should be waiting for the normal BeginMainFrame. |
| 1849 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1880 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 1850 state.CommitState()); | 1881 state.CommitState()); |
| 1851 } | 1882 } |
| 1852 | 1883 |
| 1853 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { | 1884 TEST(SchedulerStateMachineTest, TestImmediateFinishCommitDuringCommit) { |
| 1854 SchedulerSettings scheduler_settings; | 1885 SchedulerSettings scheduler_settings; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1870 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1901 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1871 state.NotifyBeginMainFrameStarted(); | 1902 state.NotifyBeginMainFrameStarted(); |
| 1872 state.NotifyReadyToCommit(); | 1903 state.NotifyReadyToCommit(); |
| 1873 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1904 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1874 state.CommitState()); | 1905 state.CommitState()); |
| 1875 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1906 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1876 | 1907 |
| 1877 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1908 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1878 | 1909 |
| 1879 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1910 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1880 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1911 state.DidSwapBuffers(); |
| 1912 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1913 state.DidSwapBuffersComplete(); |
| 1881 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1914 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1882 | 1915 |
| 1883 // Should be waiting for the normal BeginMainFrame. | 1916 // Should be waiting for the normal BeginMainFrame. |
| 1884 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1917 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 1885 state.CommitState()) | 1918 state.CommitState()) |
| 1886 << *state.AsValue(); | 1919 << *state.AsValue(); |
| 1887 } | 1920 } |
| 1888 | 1921 |
| 1889 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) { | 1922 TEST(SchedulerStateMachineTest, ImmediateBeginMainFrameAbortedWhileInvisible) { |
| 1890 SchedulerSettings scheduler_settings; | 1923 SchedulerSettings scheduler_settings; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1904 state.NotifyBeginMainFrameStarted(); | 1937 state.NotifyBeginMainFrameStarted(); |
| 1905 state.NotifyReadyToCommit(); | 1938 state.NotifyReadyToCommit(); |
| 1906 | 1939 |
| 1907 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1940 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1908 state.CommitState()); | 1941 state.CommitState()); |
| 1909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1942 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1910 | 1943 |
| 1911 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1944 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1912 | 1945 |
| 1913 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1946 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1914 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1947 state.DidSwapBuffers(); |
| 1948 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1949 state.DidSwapBuffersComplete(); |
| 1915 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1950 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1916 | 1951 |
| 1917 // Should be waiting for BeginMainFrame. | 1952 // Should be waiting for BeginMainFrame. |
| 1918 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, | 1953 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT, |
| 1919 state.CommitState()) | 1954 state.CommitState()) |
| 1920 << *state.AsValue(); | 1955 << *state.AsValue(); |
| 1921 | 1956 |
| 1922 // Become invisible and abort BeginMainFrame. | 1957 // Become invisible and abort BeginMainFrame. |
| 1923 state.SetVisible(false); | 1958 state.SetVisible(false); |
| 1924 state.BeginMainFrameAborted(false); | 1959 state.BeginMainFrameAborted(false); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1945 state.NotifyBeginMainFrameStarted(); | 1980 state.NotifyBeginMainFrameStarted(); |
| 1946 state.NotifyReadyToCommit(); | 1981 state.NotifyReadyToCommit(); |
| 1947 | 1982 |
| 1948 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, | 1983 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, |
| 1949 state.CommitState()); | 1984 state.CommitState()); |
| 1950 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 1985 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 1951 | 1986 |
| 1952 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1987 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1953 | 1988 |
| 1954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); | 1989 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_READBACK); |
| 1955 state.DidDrawIfPossibleCompleted(DrawSwapReadbackResult::DRAW_SUCCESS); | 1990 state.DidSwapBuffers(); |
| 1991 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); |
| 1992 state.DidSwapBuffersComplete(); |
| 1956 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1993 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1957 } | 1994 } |
| 1958 | 1995 |
| 1959 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { | 1996 TEST(SchedulerStateMachineTest, ReportIfNotDrawing) { |
| 1960 SchedulerSettings default_scheduler_settings; | 1997 SchedulerSettings default_scheduler_settings; |
| 1961 StateMachine state(default_scheduler_settings); | 1998 StateMachine state(default_scheduler_settings); |
| 1962 state.SetCanStart(); | 1999 state.SetCanStart(); |
| 1963 state.UpdateState(state.NextAction()); | 2000 state.UpdateState(state.NextAction()); |
| 1964 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); | 2001 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); |
| 1965 | 2002 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2118 state.SetNeedsAnimate(); | 2155 state.SetNeedsAnimate(); |
| 2119 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2156 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2120 | 2157 |
| 2121 state.OnBeginImplFrameDeadline(); | 2158 state.OnBeginImplFrameDeadline(); |
| 2122 EXPECT_ACTION_UPDATE_STATE( | 2159 EXPECT_ACTION_UPDATE_STATE( |
| 2123 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 2160 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 2124 } | 2161 } |
| 2125 | 2162 |
| 2126 } // namespace | 2163 } // namespace |
| 2127 } // namespace cc | 2164 } // namespace cc |
| OLD | NEW |