| 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 23 matching lines...) Expand all Loading... |
| 34 << state.AsValue()->ToString() | 34 << state.AsValue()->ToString() |
| 35 | 35 |
| 36 #define EXPECT_ACTION_UPDATE_STATE(action) \ | 36 #define EXPECT_ACTION_UPDATE_STATE(action) \ |
| 37 EXPECT_ACTION(action); \ | 37 EXPECT_ACTION(action); \ |
| 38 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ | 38 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ |
| 39 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ | 39 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ |
| 40 EXPECT_IMPL_FRAME_STATE( \ | 40 EXPECT_IMPL_FRAME_STATE( \ |
| 41 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ | 41 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ |
| 42 } \ | 42 } \ |
| 43 state.WillAction(action); \ | 43 state.WillAction(action); \ |
| 44 state.DidAction(action); \ |
| 44 if (action == SchedulerStateMachine::ACTION_NONE) { \ | 45 if (action == SchedulerStateMachine::ACTION_NONE) { \ |
| 45 if (state.begin_impl_frame_state() == \ | 46 if (state.begin_impl_frame_state() == \ |
| 46 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ | 47 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ |
| 47 state.OnBeginImplFrameDeadlinePending(); \ | 48 state.OnBeginImplFrameDeadlinePending(); \ |
| 48 if (state.begin_impl_frame_state() == \ | 49 if (state.begin_impl_frame_state() == \ |
| 49 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ | 50 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ |
| 50 state.OnBeginImplFrameIdle(); \ | 51 state.OnBeginImplFrameIdle(); \ |
| 51 } | 52 } |
| 52 | 53 |
| 53 #define SET_UP_STATE(state) \ | 54 #define SET_UP_STATE(state) \ |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 347 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 347 EXPECT_ACTION_UPDATE_STATE( | 348 EXPECT_ACTION_UPDATE_STATE( |
| 348 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 349 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 349 state.DidSwapBuffers(); | 350 state.DidSwapBuffers(); |
| 350 state.DidSwapBuffersComplete(); | 351 state.DidSwapBuffersComplete(); |
| 351 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 352 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 352 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 353 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 353 } | 354 } |
| 354 | 355 |
| 355 TEST(SchedulerStateMachineTest, | 356 TEST(SchedulerStateMachineTest, |
| 356 TestFailedDrawForAnimationCheckerboardSetsNeedsCommitAndDoesNotDrawAgain) { | 357 FailedDrawForAnimationCheckerboardSetsNeedsCommitAndRetriesDraw) { |
| 357 SchedulerSettings default_scheduler_settings; | |
| 358 StateMachine state(default_scheduler_settings); | |
| 359 SET_UP_STATE(state) | |
| 360 state.SetNeedsRedraw(true); | |
| 361 EXPECT_TRUE(state.RedrawPending()); | |
| 362 EXPECT_TRUE(state.BeginFrameNeeded()); | |
| 363 state.OnBeginImplFrame(); | |
| 364 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | |
| 365 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 366 state.OnBeginImplFrameDeadline(); | |
| 367 | |
| 368 // We're drawing now. | |
| 369 EXPECT_ACTION_UPDATE_STATE( | |
| 370 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | |
| 371 state.DidSwapBuffers(); | |
| 372 state.DidSwapBuffersComplete(); | |
| 373 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 374 | |
| 375 EXPECT_FALSE(state.RedrawPending()); | |
| 376 EXPECT_FALSE(state.CommitPending()); | |
| 377 | |
| 378 // Failing the draw makes us require a commit. | |
| 379 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 380 state.OnBeginImplFrame(); | |
| 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | |
| 382 EXPECT_ACTION_UPDATE_STATE( | |
| 383 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | |
| 384 EXPECT_TRUE(state.RedrawPending()); | |
| 385 EXPECT_TRUE(state.CommitPending()); | |
| 386 } | |
| 387 | |
| 388 TEST(SchedulerStateMachineTest, TestFailedDrawForMissingHighResNeedsCommit) { | |
| 389 SchedulerSettings default_scheduler_settings; | 358 SchedulerSettings default_scheduler_settings; |
| 390 StateMachine state(default_scheduler_settings); | 359 StateMachine state(default_scheduler_settings); |
| 391 SET_UP_STATE(state) | 360 SET_UP_STATE(state) |
| 392 state.SetNeedsRedraw(true); | 361 state.SetNeedsRedraw(true); |
| 393 EXPECT_TRUE(state.RedrawPending()); | 362 EXPECT_TRUE(state.RedrawPending()); |
| 394 EXPECT_TRUE(state.BeginFrameNeeded()); | 363 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 395 | 364 |
| 365 // Start a frame. |
| 396 state.OnBeginImplFrame(); | 366 state.OnBeginImplFrame(); |
| 397 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 367 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 398 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 368 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 369 state.OnBeginImplFrameDeadlinePending(); |
| 370 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 371 EXPECT_FALSE(state.CommitPending()); |
| 372 |
| 373 // Failing a draw triggers request for a new BeginMainFrame. |
| 399 state.OnBeginImplFrameDeadline(); | 374 state.OnBeginImplFrameDeadline(); |
| 375 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 400 EXPECT_ACTION_UPDATE_STATE( | 376 EXPECT_ACTION_UPDATE_STATE( |
| 401 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 377 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 402 state.DidSwapBuffers(); | 378 state.DidSwapBuffers(); |
| 379 EXPECT_ACTION_UPDATE_STATE( |
| 380 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 381 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 382 state.OnBeginImplFrameIdle(); |
| 383 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 403 state.DidSwapBuffersComplete(); | 384 state.DidSwapBuffersComplete(); |
| 404 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 385 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 405 EXPECT_FALSE(state.RedrawPending()); | |
| 406 EXPECT_FALSE(state.CommitPending()); | |
| 407 | 386 |
| 408 // Missing high res content requires a commit (but not a redraw) | 387 // It's okay to attempt more draws just in case additional raster |
| 409 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 388 // finishes and the requested commit wasn't actually necessary. |
| 389 EXPECT_TRUE(state.CommitPending()); |
| 390 EXPECT_TRUE(state.RedrawPending()); |
| 410 state.OnBeginImplFrame(); | 391 state.OnBeginImplFrame(); |
| 392 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 393 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 394 state.OnBeginImplFrameDeadlinePending(); |
| 395 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 396 state.OnBeginImplFrameDeadline(); |
| 397 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 411 EXPECT_ACTION_UPDATE_STATE( | 398 EXPECT_ACTION_UPDATE_STATE( |
| 412 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 399 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 413 EXPECT_FALSE(state.RedrawPending()); | 400 state.DidSwapBuffers(); |
| 414 EXPECT_TRUE(state.CommitPending()); | 401 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 402 state.OnBeginImplFrameIdle(); |
| 403 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 404 state.DidSwapBuffersComplete(); |
| 405 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 415 } | 406 } |
| 416 | 407 |
| 417 TEST(SchedulerStateMachineTest, | 408 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { |
| 418 TestsetNeedsRedrawDuringFailedDrawDoesNotRemoveNeedsRedraw) { | |
| 419 SchedulerSettings default_scheduler_settings; | 409 SchedulerSettings default_scheduler_settings; |
| 420 StateMachine state(default_scheduler_settings); | 410 StateMachine state(default_scheduler_settings); |
| 421 SET_UP_STATE(state) | 411 SET_UP_STATE(state) |
| 422 state.SetNeedsRedraw(true); | 412 state.SetNeedsRedraw(true); |
| 423 EXPECT_TRUE(state.RedrawPending()); | 413 EXPECT_TRUE(state.RedrawPending()); |
| 424 EXPECT_TRUE(state.BeginFrameNeeded()); | 414 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 415 |
| 416 // Start a frame. |
| 425 state.OnBeginImplFrame(); | 417 state.OnBeginImplFrame(); |
| 426 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 418 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 427 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 419 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 420 state.OnBeginImplFrameDeadlinePending(); |
| 421 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 422 EXPECT_FALSE(state.CommitPending()); |
| 423 |
| 424 // Failing a draw triggers because of high res tiles missing |
| 425 // request for a new BeginMainFrame. |
| 428 state.OnBeginImplFrameDeadline(); | 426 state.OnBeginImplFrameDeadline(); |
| 429 | 427 state.SetDrawResult(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 430 // We're drawing now. | |
| 431 EXPECT_ACTION_UPDATE_STATE( | 428 EXPECT_ACTION_UPDATE_STATE( |
| 432 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 429 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 433 state.DidSwapBuffers(); | 430 state.DidSwapBuffers(); |
| 431 EXPECT_ACTION_UPDATE_STATE( |
| 432 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 433 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 434 state.OnBeginImplFrameIdle(); |
| 435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 434 state.DidSwapBuffersComplete(); | 436 state.DidSwapBuffersComplete(); |
| 435 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 437 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 438 |
| 439 // It doesn't request a draw until we get a new commit though. |
| 440 EXPECT_TRUE(state.CommitPending()); |
| 436 EXPECT_FALSE(state.RedrawPending()); | 441 EXPECT_FALSE(state.RedrawPending()); |
| 437 EXPECT_FALSE(state.CommitPending()); | 442 state.OnBeginImplFrame(); |
| 438 | 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 439 // While still in the same BeginMainFrame callback on the main thread, | 444 state.OnBeginImplFrameDeadlinePending(); |
| 440 // set needs redraw again. This should not redraw. | 445 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 441 state.SetNeedsRedraw(true); | 446 state.OnBeginImplFrameDeadline(); |
| 447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 448 state.OnBeginImplFrameIdle(); |
| 442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 443 | 450 |
| 444 // Failing the draw for animation checkerboards makes us require a commit. | 451 // Finish the commit and activation. |
| 445 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 452 state.NotifyBeginMainFrameStarted(); |
| 453 state.NotifyReadyToCommit(); |
| 454 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 455 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 456 state.NotifyReadyToActivate(); |
| 457 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 459 EXPECT_TRUE(state.RedrawPending()); |
| 460 |
| 461 // Verify we draw with the new frame. |
| 446 state.OnBeginImplFrame(); | 462 state.OnBeginImplFrame(); |
| 447 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 464 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 465 state.OnBeginImplFrameDeadlinePending(); |
| 466 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 467 state.OnBeginImplFrameDeadline(); |
| 448 EXPECT_ACTION_UPDATE_STATE( | 468 EXPECT_ACTION_UPDATE_STATE( |
| 449 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 469 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 450 EXPECT_TRUE(state.RedrawPending()); | 470 state.DidSwapBuffers(); |
| 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 472 state.OnBeginImplFrameIdle(); |
| 473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 451 } | 474 } |
| 452 | 475 |
| 453 TEST(SchedulerStateMachineTest, | 476 TEST(SchedulerStateMachineTest, |
| 454 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { | 477 TestFailedDrawsEventuallyForceDrawAfterNextCommit) { |
| 455 SchedulerSettings scheduler_settings; | 478 SchedulerSettings scheduler_settings; |
| 456 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1; | 479 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = 1; |
| 457 StateMachine state(scheduler_settings); | 480 StateMachine state(scheduler_settings); |
| 458 SET_UP_STATE(state) | 481 SET_UP_STATE(state) |
| 459 | 482 |
| 460 // Start a commit. | 483 // Start a commit. |
| 461 state.SetNeedsBeginMainFrame(); | 484 state.SetNeedsBeginMainFrame(); |
| 462 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 485 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 463 state.OnBeginImplFrame(); | 486 state.OnBeginImplFrame(); |
| 464 EXPECT_ACTION_UPDATE_STATE( | 487 EXPECT_ACTION_UPDATE_STATE( |
| 465 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 488 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 466 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 467 EXPECT_TRUE(state.CommitPending()); | 490 EXPECT_TRUE(state.CommitPending()); |
| 468 | 491 |
| 469 // Then initiate a draw. | 492 // Then initiate a draw that fails. |
| 470 state.SetNeedsRedraw(true); | 493 state.SetNeedsRedraw(true); |
| 471 state.OnBeginImplFrameDeadline(); | 494 state.OnBeginImplFrameDeadline(); |
| 472 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 496 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 473 EXPECT_ACTION_UPDATE_STATE( | 497 EXPECT_ACTION_UPDATE_STATE( |
| 474 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 498 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 475 | |
| 476 // Fail the draw. | |
| 477 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 478 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 499 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 479 EXPECT_TRUE(state.BeginFrameNeeded()); | 500 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 480 EXPECT_TRUE(state.RedrawPending()); | 501 EXPECT_TRUE(state.RedrawPending()); |
| 481 // But the commit is ongoing. | |
| 482 EXPECT_TRUE(state.CommitPending()); | 502 EXPECT_TRUE(state.CommitPending()); |
| 483 | 503 |
| 484 // Finish the commit. Note, we should not yet be forcing a draw, but should | 504 // Finish the commit. Note, we should not yet be forcing a draw, but should |
| 485 // continue the commit as usual. | 505 // continue the commit as usual. |
| 486 state.NotifyBeginMainFrameStarted(); | 506 state.NotifyBeginMainFrameStarted(); |
| 487 state.NotifyReadyToCommit(); | 507 state.NotifyReadyToCommit(); |
| 488 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 508 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 489 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 509 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 490 EXPECT_TRUE(state.RedrawPending()); | 510 EXPECT_TRUE(state.RedrawPending()); |
| 491 | 511 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 523 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 504 state.OnBeginImplFrameDeadline(); | 524 state.OnBeginImplFrameDeadline(); |
| 505 EXPECT_ACTION_UPDATE_STATE( | 525 EXPECT_ACTION_UPDATE_STATE( |
| 506 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); | 526 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED); |
| 507 state.DidSwapBuffers(); | 527 state.DidSwapBuffers(); |
| 508 state.DidSwapBuffersComplete(); | 528 state.DidSwapBuffersComplete(); |
| 509 } | 529 } |
| 510 | 530 |
| 511 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { | 531 TEST(SchedulerStateMachineTest, TestFailedDrawsDoNotRestartForcedDraw) { |
| 512 SchedulerSettings scheduler_settings; | 532 SchedulerSettings scheduler_settings; |
| 513 int draw_limit = 1; | 533 int draw_limit = 2; |
| 514 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = | 534 scheduler_settings.maximum_number_of_failed_draws_before_draw_is_forced = |
| 515 draw_limit; | 535 draw_limit; |
| 516 StateMachine state(scheduler_settings); | 536 StateMachine state(scheduler_settings); |
| 517 SET_UP_STATE(state) | 537 SET_UP_STATE(state) |
| 518 | 538 |
| 519 // Start a commit. | 539 // Start a commit. |
| 520 state.SetNeedsBeginMainFrame(); | 540 state.SetNeedsBeginMainFrame(); |
| 521 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 541 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 522 state.OnBeginImplFrame(); | 542 state.OnBeginImplFrame(); |
| 523 EXPECT_ACTION_UPDATE_STATE( | 543 EXPECT_ACTION_UPDATE_STATE( |
| 524 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 544 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 525 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 545 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 526 EXPECT_TRUE(state.CommitPending()); | 546 EXPECT_TRUE(state.CommitPending()); |
| 527 | 547 |
| 528 // Then initiate a draw. | 548 // Then initiate a draw. |
| 529 state.SetNeedsRedraw(true); | 549 state.SetNeedsRedraw(true); |
| 530 state.OnBeginImplFrameDeadline(); | 550 state.OnBeginImplFrameDeadline(); |
| 531 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 551 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 532 EXPECT_ACTION_UPDATE_STATE( | 552 EXPECT_ACTION_UPDATE_STATE( |
| 533 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 553 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 534 | 554 |
| 535 // Fail the draw enough times to force a redraw, | 555 // Fail the draw enough times to force a redraw. |
| 536 // then once more for good measure. | 556 for (int i = 0; i < draw_limit; ++i) { |
| 537 for (int i = 0; i < draw_limit + 1; ++i) | 557 state.SetNeedsRedraw(true); |
| 538 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 558 state.OnBeginImplFrame(); |
| 539 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 559 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 560 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 561 state.OnBeginImplFrameDeadlinePending(); |
| 562 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 563 state.OnBeginImplFrameDeadline(); |
| 564 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 565 EXPECT_ACTION_UPDATE_STATE( |
| 566 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 567 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 568 state.OnBeginImplFrameIdle(); |
| 569 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 570 } |
| 571 |
| 540 EXPECT_TRUE(state.BeginFrameNeeded()); | 572 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 541 EXPECT_TRUE(state.RedrawPending()); | 573 EXPECT_TRUE(state.RedrawPending()); |
| 542 // But the commit is ongoing. | 574 // But the commit is ongoing. |
| 543 EXPECT_TRUE(state.CommitPending()); | 575 EXPECT_TRUE(state.CommitPending()); |
| 544 EXPECT_TRUE(state.ForcedRedrawState() == | 576 EXPECT_TRUE(state.ForcedRedrawState() == |
| 545 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); | 577 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_COMMIT); |
| 546 | 578 |
| 547 state.NotifyBeginMainFrameStarted(); | 579 state.NotifyBeginMainFrameStarted(); |
| 548 state.NotifyReadyToCommit(); | 580 state.NotifyReadyToCommit(); |
| 549 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 581 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 550 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 582 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 551 EXPECT_TRUE(state.RedrawPending()); | 583 EXPECT_TRUE(state.RedrawPending()); |
| 552 EXPECT_FALSE(state.CommitPending()); | 584 EXPECT_FALSE(state.CommitPending()); |
| 553 | 585 |
| 554 // Now force redraw should be in waiting for activation | 586 // Now force redraw should be in waiting for activation |
| 555 EXPECT_TRUE(state.ForcedRedrawState() == | 587 EXPECT_TRUE(state.ForcedRedrawState() == |
| 556 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 588 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 557 | 589 |
| 558 // After failing additional draws, we should still be in a forced | 590 // After failing additional draws, we should still be in a forced |
| 559 // redraw, but not back in WAITING_FOR_COMMIT. | 591 // redraw, but not back in WAITING_FOR_COMMIT. |
| 560 for (int i = 0; i < draw_limit + 1; ++i) | 592 for (int i = 0; i < draw_limit; ++i) { |
| 561 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 593 state.SetNeedsRedraw(true); |
| 594 state.OnBeginImplFrame(); |
| 595 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 596 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 597 state.OnBeginImplFrameDeadlinePending(); |
| 598 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 599 state.OnBeginImplFrameDeadline(); |
| 600 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 601 EXPECT_ACTION_UPDATE_STATE( |
| 602 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 603 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 604 state.OnBeginImplFrameIdle(); |
| 605 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 606 } |
| 562 EXPECT_TRUE(state.RedrawPending()); | 607 EXPECT_TRUE(state.RedrawPending()); |
| 563 EXPECT_TRUE(state.ForcedRedrawState() == | 608 EXPECT_TRUE(state.ForcedRedrawState() == |
| 564 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 609 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 565 } | 610 } |
| 566 | 611 |
| 567 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { | 612 TEST(SchedulerStateMachineTest, TestFailedDrawIsRetriedInNextBeginImplFrame) { |
| 568 SchedulerSettings default_scheduler_settings; | 613 SchedulerSettings default_scheduler_settings; |
| 569 StateMachine state(default_scheduler_settings); | 614 StateMachine state(default_scheduler_settings); |
| 570 SET_UP_STATE(state) | 615 SET_UP_STATE(state) |
| 571 | 616 |
| 572 // Start a draw. | 617 // Start a draw. |
| 573 state.SetNeedsRedraw(true); | 618 state.SetNeedsRedraw(true); |
| 574 EXPECT_TRUE(state.BeginFrameNeeded()); | 619 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 575 state.OnBeginImplFrame(); | 620 state.OnBeginImplFrame(); |
| 576 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 621 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 577 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 622 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 578 state.OnBeginImplFrameDeadline(); | 623 state.OnBeginImplFrameDeadline(); |
| 579 EXPECT_TRUE(state.RedrawPending()); | 624 EXPECT_TRUE(state.RedrawPending()); |
| 625 state.SetDrawResult(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 580 EXPECT_ACTION_UPDATE_STATE( | 626 EXPECT_ACTION_UPDATE_STATE( |
| 581 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 627 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 582 | 628 |
| 583 // Failing the draw for animation checkerboards makes us require a commit. | 629 // Failing the draw for animation checkerboards makes us require a commit. |
| 584 state.DidDrawIfPossibleCompleted(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | |
| 585 EXPECT_ACTION_UPDATE_STATE( | 630 EXPECT_ACTION_UPDATE_STATE( |
| 586 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 631 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 587 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 632 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 588 EXPECT_TRUE(state.RedrawPending()); | 633 EXPECT_TRUE(state.RedrawPending()); |
| 589 | 634 |
| 590 // We should not be trying to draw again now, but we have a commit pending. | 635 // We should not be trying to draw again now, but we have a commit pending. |
| 591 EXPECT_TRUE(state.BeginFrameNeeded()); | 636 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 592 state.OnBeginImplFrame(); | 637 state.OnBeginImplFrame(); |
| 593 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 638 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 639 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 612 // Draw the first frame. | 657 // Draw the first frame. |
| 613 EXPECT_TRUE(state.BeginFrameNeeded()); | 658 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 614 state.OnBeginImplFrame(); | 659 state.OnBeginImplFrame(); |
| 615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 660 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 616 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 661 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 617 | 662 |
| 618 state.OnBeginImplFrameDeadline(); | 663 state.OnBeginImplFrameDeadline(); |
| 619 EXPECT_ACTION_UPDATE_STATE( | 664 EXPECT_ACTION_UPDATE_STATE( |
| 620 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 665 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 621 state.DidSwapBuffers(); | 666 state.DidSwapBuffers(); |
| 622 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
| 623 state.DidSwapBuffersComplete(); | 667 state.DidSwapBuffersComplete(); |
| 624 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 668 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 625 | 669 |
| 626 // Before the next BeginImplFrame, set needs redraw again. | 670 // Before the next BeginImplFrame, set needs redraw again. |
| 627 // This should not redraw until the next BeginImplFrame. | 671 // This should not redraw until the next BeginImplFrame. |
| 628 state.SetNeedsRedraw(true); | 672 state.SetNeedsRedraw(true); |
| 629 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 673 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 630 | 674 |
| 631 // Move to another frame. This should now draw. | 675 // Move to another frame. This should now draw. |
| 632 EXPECT_TRUE(state.BeginFrameNeeded()); | 676 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 633 state.OnBeginImplFrame(); | 677 state.OnBeginImplFrame(); |
| 634 | 678 |
| 635 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 679 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 636 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 680 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 637 | 681 |
| 638 state.OnBeginImplFrameDeadline(); | 682 state.OnBeginImplFrameDeadline(); |
| 639 EXPECT_ACTION_UPDATE_STATE( | 683 EXPECT_ACTION_UPDATE_STATE( |
| 640 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 684 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 641 state.DidSwapBuffers(); | 685 state.DidSwapBuffers(); |
| 642 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
| 643 state.DidSwapBuffersComplete(); | 686 state.DidSwapBuffersComplete(); |
| 644 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 687 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 645 | 688 |
| 646 // We just swapped, so we should proactively request another BeginImplFrame. | 689 // We just swapped, so we should proactively request another BeginImplFrame. |
| 647 EXPECT_TRUE(state.BeginFrameNeeded()); | 690 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 648 } | 691 } |
| 649 | 692 |
| 650 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { | 693 TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) { |
| 651 SchedulerSettings default_scheduler_settings; | 694 SchedulerSettings default_scheduler_settings; |
| 652 | 695 |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 EXPECT_ACTION_UPDATE_STATE( | 907 EXPECT_ACTION_UPDATE_STATE( |
| 865 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 908 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 866 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 909 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 867 | 910 |
| 868 state.OnBeginImplFrameDeadline(); | 911 state.OnBeginImplFrameDeadline(); |
| 869 | 912 |
| 870 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 913 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 871 EXPECT_ACTION_UPDATE_STATE( | 914 EXPECT_ACTION_UPDATE_STATE( |
| 872 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 915 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 873 state.DidSwapBuffers(); | 916 state.DidSwapBuffers(); |
| 874 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
| 875 state.DidSwapBuffersComplete(); | 917 state.DidSwapBuffersComplete(); |
| 876 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 918 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 877 } | 919 } |
| 878 | 920 |
| 879 TEST(SchedulerStateMachineTest, TestFullCycle) { | 921 TEST(SchedulerStateMachineTest, TestFullCycle) { |
| 880 SchedulerSettings default_scheduler_settings; | 922 SchedulerSettings default_scheduler_settings; |
| 881 StateMachine state(default_scheduler_settings); | 923 StateMachine state(default_scheduler_settings); |
| 882 SET_UP_STATE(state) | 924 SET_UP_STATE(state) |
| 883 | 925 |
| 884 // Start clean and set commit. | 926 // Start clean and set commit. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 909 | 951 |
| 910 // Expect to do nothing until BeginImplFrame deadline | 952 // Expect to do nothing until BeginImplFrame deadline |
| 911 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 953 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 912 | 954 |
| 913 // At BeginImplFrame deadline, draw. | 955 // At BeginImplFrame deadline, draw. |
| 914 state.OnBeginImplFrameDeadline(); | 956 state.OnBeginImplFrameDeadline(); |
| 915 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 957 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 916 EXPECT_ACTION_UPDATE_STATE( | 958 EXPECT_ACTION_UPDATE_STATE( |
| 917 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 959 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 918 state.DidSwapBuffers(); | 960 state.DidSwapBuffers(); |
| 919 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
| 920 state.DidSwapBuffersComplete(); | 961 state.DidSwapBuffersComplete(); |
| 921 | 962 |
| 922 // Should be synchronized, no draw needed, no action needed. | 963 // Should be synchronized, no draw needed, no action needed. |
| 923 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 964 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 924 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 965 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 925 EXPECT_FALSE(state.needs_redraw()); | 966 EXPECT_FALSE(state.needs_redraw()); |
| 926 } | 967 } |
| 927 | 968 |
| 928 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) { | 969 TEST(SchedulerStateMachineTest, CommitWithoutDrawWithPendingTree) { |
| 929 SchedulerSettings default_scheduler_settings; | 970 SchedulerSettings default_scheduler_settings; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1048 // Haven't draw since last commit, do not begin new main frame. | 1089 // Haven't draw since last commit, do not begin new main frame. |
| 1049 state.OnBeginImplFrame(); | 1090 state.OnBeginImplFrame(); |
| 1050 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1091 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1051 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1092 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1052 | 1093 |
| 1053 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. | 1094 // At BeginImplFrame deadline, draw. This draws unblocks BeginMainFrame. |
| 1054 state.OnBeginImplFrameDeadline(); | 1095 state.OnBeginImplFrameDeadline(); |
| 1055 EXPECT_ACTION_UPDATE_STATE( | 1096 EXPECT_ACTION_UPDATE_STATE( |
| 1056 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1097 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1057 state.DidSwapBuffers(); | 1098 state.DidSwapBuffers(); |
| 1058 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
| 1059 state.DidSwapBuffersComplete(); | 1099 state.DidSwapBuffersComplete(); |
| 1060 | 1100 |
| 1061 // Now will be able to start main frame. | 1101 // Now will be able to start main frame. |
| 1062 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 1102 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 1063 EXPECT_FALSE(state.needs_redraw()); | 1103 EXPECT_FALSE(state.needs_redraw()); |
| 1064 EXPECT_ACTION_UPDATE_STATE( | 1104 EXPECT_ACTION_UPDATE_STATE( |
| 1065 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 1105 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 1066 } | 1106 } |
| 1067 | 1107 |
| 1068 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { | 1108 TEST(SchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1100 | 1140 |
| 1101 // Expect to do nothing until BeginImplFrame deadline. | 1141 // Expect to do nothing until BeginImplFrame deadline. |
| 1102 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1142 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1103 | 1143 |
| 1104 // At BeginImplFrame deadline, draw. | 1144 // At BeginImplFrame deadline, draw. |
| 1105 state.OnBeginImplFrameDeadline(); | 1145 state.OnBeginImplFrameDeadline(); |
| 1106 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); | 1146 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ANIMATE); |
| 1107 EXPECT_ACTION_UPDATE_STATE( | 1147 EXPECT_ACTION_UPDATE_STATE( |
| 1108 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 1148 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 1109 state.DidSwapBuffers(); | 1149 state.DidSwapBuffers(); |
| 1110 state.DidDrawIfPossibleCompleted(DRAW_SUCCESS); | |
| 1111 state.DidSwapBuffersComplete(); | 1150 state.DidSwapBuffersComplete(); |
| 1112 | 1151 |
| 1113 // Should be synchronized, no draw needed, no action needed. | 1152 // Should be synchronized, no draw needed, no action needed. |
| 1114 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 1153 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 1115 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); | 1154 EXPECT_MAIN_FRAME_STATE(SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE); |
| 1116 EXPECT_FALSE(state.needs_redraw()); | 1155 EXPECT_FALSE(state.needs_redraw()); |
| 1117 | 1156 |
| 1118 // Next BeginImplFrame should initiate second commit. | 1157 // Next BeginImplFrame should initiate second commit. |
| 1119 state.OnBeginImplFrame(); | 1158 state.OnBeginImplFrame(); |
| 1120 EXPECT_ACTION_UPDATE_STATE( | 1159 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1983 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); | 2022 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
| 1984 bool commit_has_no_updates = true; | 2023 bool commit_has_no_updates = true; |
| 1985 state.WillCommit(commit_has_no_updates); | 2024 state.WillCommit(commit_has_no_updates); |
| 1986 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); | 2025 EXPECT_TRUE(state.ProactiveBeginFrameWanted()); |
| 1987 state.OnBeginImplFrame(); | 2026 state.OnBeginImplFrame(); |
| 1988 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); | 2027 EXPECT_FALSE(state.ProactiveBeginFrameWanted()); |
| 1989 } | 2028 } |
| 1990 | 2029 |
| 1991 } // namespace | 2030 } // namespace |
| 1992 } // namespace cc | 2031 } // namespace cc |
| OLD | NEW |