| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "cc/scheduler/scheduler.h" | 10 #include "cc/scheduler/scheduler.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 #define EXPECT_ACTION_UPDATE_STATE(action) \ | 38 #define EXPECT_ACTION_UPDATE_STATE(action) \ |
| 39 EXPECT_ACTION(action); \ | 39 EXPECT_ACTION(action); \ |
| 40 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ | 40 if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \ |
| 41 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ | 41 action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \ |
| 42 EXPECT_IMPL_FRAME_STATE( \ | 42 EXPECT_IMPL_FRAME_STATE( \ |
| 43 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ | 43 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); \ |
| 44 } \ | 44 } \ |
| 45 PerformAction(&state, action); \ | 45 PerformAction(&state, action); \ |
| 46 if (action == SchedulerStateMachine::ACTION_NONE) { \ | 46 if (action == SchedulerStateMachine::ACTION_NONE) { \ |
| 47 if (state.begin_impl_frame_state() == \ | 47 if (state.begin_impl_frame_state() == \ |
| 48 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING) \ | |
| 49 state.OnBeginImplFrameDeadlinePending(); \ | |
| 50 if (state.begin_impl_frame_state() == \ | |
| 51 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ | 48 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) \ |
| 52 state.OnBeginImplFrameIdle(); \ | 49 state.OnBeginImplFrameIdle(); \ |
| 53 } | 50 } |
| 54 | 51 |
| 55 #define SET_UP_STATE(state) \ | 52 #define SET_UP_STATE(state) \ |
| 56 state.SetVisible(true); \ | 53 state.SetVisible(true); \ |
| 57 EXPECT_ACTION_UPDATE_STATE( \ | 54 EXPECT_ACTION_UPDATE_STATE( \ |
| 58 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \ | 55 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); \ |
| 59 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \ | 56 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); \ |
| 60 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \ | 57 state.CreateAndInitializeOutputSurfaceWithActivatedCommit(); \ |
| 61 state.SetCanDraw(true); | 58 state.SetCanDraw(true); |
| 62 | 59 |
| 63 namespace cc { | 60 namespace cc { |
| 64 | 61 |
| 65 namespace { | 62 namespace { |
| 66 | 63 |
| 67 const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] = | 64 const SchedulerStateMachine::BeginImplFrameState all_begin_impl_frame_states[] = |
| 68 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, | 65 {SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE, |
| 69 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING, | |
| 70 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, | 66 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME, |
| 71 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; | 67 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, }; |
| 72 | 68 |
| 73 const SchedulerStateMachine::BeginMainFrameState begin_main_frame_states[] = { | 69 const SchedulerStateMachine::BeginMainFrameState begin_main_frame_states[] = { |
| 74 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE, | 70 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_IDLE, |
| 75 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT, | 71 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT, |
| 76 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED, | 72 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED, |
| 77 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT, | 73 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT, |
| 78 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION, | 74 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_ACTIVATION, |
| 79 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW}; | 75 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_WAITING_FOR_DRAW}; |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 SchedulerSettings default_scheduler_settings; | 415 SchedulerSettings default_scheduler_settings; |
| 420 StateMachine state(default_scheduler_settings); | 416 StateMachine state(default_scheduler_settings); |
| 421 SET_UP_STATE(state) | 417 SET_UP_STATE(state) |
| 422 state.SetNeedsRedraw(true); | 418 state.SetNeedsRedraw(true); |
| 423 EXPECT_TRUE(state.RedrawPending()); | 419 EXPECT_TRUE(state.RedrawPending()); |
| 424 EXPECT_TRUE(state.BeginFrameNeeded()); | 420 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 425 | 421 |
| 426 // Start a frame. | 422 // Start a frame. |
| 427 state.OnBeginImplFrame(); | 423 state.OnBeginImplFrame(); |
| 428 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 424 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 429 state.OnBeginImplFrameDeadlinePending(); | |
| 430 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 431 EXPECT_FALSE(state.CommitPending()); | 425 EXPECT_FALSE(state.CommitPending()); |
| 432 | 426 |
| 433 // Failing a draw triggers request for a new BeginMainFrame. | 427 // Failing a draw triggers request for a new BeginMainFrame. |
| 434 state.OnBeginImplFrameDeadline(); | 428 state.OnBeginImplFrameDeadline(); |
| 435 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 429 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 436 EXPECT_ACTION_UPDATE_STATE( | 430 EXPECT_ACTION_UPDATE_STATE( |
| 437 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 431 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 438 EXPECT_ACTION_UPDATE_STATE( | 432 EXPECT_ACTION_UPDATE_STATE( |
| 439 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 433 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 440 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 434 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 441 state.OnBeginImplFrameIdle(); | 435 state.OnBeginImplFrameIdle(); |
| 442 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 436 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 443 | 437 |
| 444 // It's okay to attempt more draws just in case additional raster | 438 // It's okay to attempt more draws just in case additional raster |
| 445 // finishes and the requested commit wasn't actually necessary. | 439 // finishes and the requested commit wasn't actually necessary. |
| 446 EXPECT_TRUE(state.CommitPending()); | 440 EXPECT_TRUE(state.CommitPending()); |
| 447 EXPECT_TRUE(state.RedrawPending()); | 441 EXPECT_TRUE(state.RedrawPending()); |
| 448 state.OnBeginImplFrame(); | 442 state.OnBeginImplFrame(); |
| 449 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 443 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 450 state.OnBeginImplFrameDeadlinePending(); | |
| 451 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 452 state.OnBeginImplFrameDeadline(); | 444 state.OnBeginImplFrameDeadline(); |
| 453 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 445 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 454 EXPECT_ACTION_UPDATE_STATE( | 446 EXPECT_ACTION_UPDATE_STATE( |
| 455 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 447 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 456 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 448 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 457 state.OnBeginImplFrameIdle(); | 449 state.OnBeginImplFrameIdle(); |
| 458 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 450 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 459 } | 451 } |
| 460 | 452 |
| 461 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { | 453 TEST(SchedulerStateMachineTest, FailedDrawForMissingHighResNeedsCommit) { |
| 462 SchedulerSettings default_scheduler_settings; | 454 SchedulerSettings default_scheduler_settings; |
| 463 StateMachine state(default_scheduler_settings); | 455 StateMachine state(default_scheduler_settings); |
| 464 SET_UP_STATE(state) | 456 SET_UP_STATE(state) |
| 465 state.SetNeedsRedraw(true); | 457 state.SetNeedsRedraw(true); |
| 466 EXPECT_TRUE(state.RedrawPending()); | 458 EXPECT_TRUE(state.RedrawPending()); |
| 467 EXPECT_TRUE(state.BeginFrameNeeded()); | 459 EXPECT_TRUE(state.BeginFrameNeeded()); |
| 468 | 460 |
| 469 // Start a frame. | 461 // Start a frame. |
| 470 state.OnBeginImplFrame(); | 462 state.OnBeginImplFrame(); |
| 471 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 463 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 472 state.OnBeginImplFrameDeadlinePending(); | |
| 473 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 474 EXPECT_FALSE(state.CommitPending()); | 464 EXPECT_FALSE(state.CommitPending()); |
| 475 | 465 |
| 476 // Failing a draw triggers because of high res tiles missing | 466 // Failing a draw triggers because of high res tiles missing |
| 477 // request for a new BeginMainFrame. | 467 // request for a new BeginMainFrame. |
| 478 state.OnBeginImplFrameDeadline(); | 468 state.OnBeginImplFrameDeadline(); |
| 479 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 469 state.SetDrawResultForTest(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
| 480 EXPECT_ACTION_UPDATE_STATE( | 470 EXPECT_ACTION_UPDATE_STATE( |
| 481 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 471 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 482 EXPECT_ACTION_UPDATE_STATE( | 472 EXPECT_ACTION_UPDATE_STATE( |
| 483 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 473 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 474 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 485 state.OnBeginImplFrameIdle(); | 475 state.OnBeginImplFrameIdle(); |
| 486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 476 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 487 | 477 |
| 488 // It doesn't request a draw until we get a new commit though. | 478 // It doesn't request a draw until we get a new commit though. |
| 489 EXPECT_TRUE(state.CommitPending()); | 479 EXPECT_TRUE(state.CommitPending()); |
| 490 EXPECT_FALSE(state.RedrawPending()); | 480 EXPECT_FALSE(state.RedrawPending()); |
| 491 state.OnBeginImplFrame(); | 481 state.OnBeginImplFrame(); |
| 492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 482 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 493 state.OnBeginImplFrameDeadlinePending(); | |
| 494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 495 state.OnBeginImplFrameDeadline(); | 483 state.OnBeginImplFrameDeadline(); |
| 496 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 484 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 497 state.OnBeginImplFrameIdle(); | 485 state.OnBeginImplFrameIdle(); |
| 498 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 486 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 499 | 487 |
| 500 // Finish the commit and activation. | 488 // Finish the commit and activation. |
| 501 state.NotifyBeginMainFrameStarted(); | 489 state.NotifyBeginMainFrameStarted(); |
| 502 state.NotifyReadyToCommit(); | 490 state.NotifyReadyToCommit(); |
| 503 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 491 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 504 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 492 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 505 state.NotifyReadyToActivate(); | 493 state.NotifyReadyToActivate(); |
| 506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 494 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 507 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 495 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 508 EXPECT_TRUE(state.RedrawPending()); | 496 EXPECT_TRUE(state.RedrawPending()); |
| 509 | 497 |
| 510 // Verify we draw with the new frame. | 498 // Verify we draw with the new frame. |
| 511 state.OnBeginImplFrame(); | 499 state.OnBeginImplFrame(); |
| 512 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 500 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 513 state.OnBeginImplFrameDeadlinePending(); | |
| 514 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 515 state.OnBeginImplFrameDeadline(); | 501 state.OnBeginImplFrameDeadline(); |
| 516 state.SetDrawResultForTest(DRAW_SUCCESS); | 502 state.SetDrawResultForTest(DRAW_SUCCESS); |
| 517 EXPECT_ACTION_UPDATE_STATE( | 503 EXPECT_ACTION_UPDATE_STATE( |
| 518 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 504 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 519 state.DidSwapBuffers(); | 505 state.DidSwapBuffers(); |
| 520 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 506 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 521 state.OnBeginImplFrameIdle(); | 507 state.OnBeginImplFrameIdle(); |
| 522 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 508 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 523 } | 509 } |
| 524 | 510 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 state.SetNeedsRedraw(true); | 585 state.SetNeedsRedraw(true); |
| 600 state.OnBeginImplFrameDeadline(); | 586 state.OnBeginImplFrameDeadline(); |
| 601 EXPECT_ACTION_UPDATE_STATE( | 587 EXPECT_ACTION_UPDATE_STATE( |
| 602 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 588 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 603 | 589 |
| 604 // Fail the draw enough times to force a redraw. | 590 // Fail the draw enough times to force a redraw. |
| 605 for (int i = 0; i < draw_limit; ++i) { | 591 for (int i = 0; i < draw_limit; ++i) { |
| 606 state.SetNeedsRedraw(true); | 592 state.SetNeedsRedraw(true); |
| 607 state.OnBeginImplFrame(); | 593 state.OnBeginImplFrame(); |
| 608 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 594 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 609 state.OnBeginImplFrameDeadlinePending(); | |
| 610 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 611 state.OnBeginImplFrameDeadline(); | 595 state.OnBeginImplFrameDeadline(); |
| 612 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 596 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 613 EXPECT_ACTION_UPDATE_STATE( | 597 EXPECT_ACTION_UPDATE_STATE( |
| 614 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 598 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 615 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 599 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 616 state.OnBeginImplFrameIdle(); | 600 state.OnBeginImplFrameIdle(); |
| 617 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 601 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 618 } | 602 } |
| 619 | 603 |
| 620 EXPECT_TRUE(state.BeginFrameNeeded()); | 604 EXPECT_TRUE(state.BeginFrameNeeded()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 634 // Now force redraw should be in waiting for activation | 618 // Now force redraw should be in waiting for activation |
| 635 EXPECT_TRUE(state.ForcedRedrawState() == | 619 EXPECT_TRUE(state.ForcedRedrawState() == |
| 636 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); | 620 SchedulerStateMachine::FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION); |
| 637 | 621 |
| 638 // After failing additional draws, we should still be in a forced | 622 // After failing additional draws, we should still be in a forced |
| 639 // redraw, but not back in WAITING_FOR_COMMIT. | 623 // redraw, but not back in WAITING_FOR_COMMIT. |
| 640 for (int i = 0; i < draw_limit; ++i) { | 624 for (int i = 0; i < draw_limit; ++i) { |
| 641 state.SetNeedsRedraw(true); | 625 state.SetNeedsRedraw(true); |
| 642 state.OnBeginImplFrame(); | 626 state.OnBeginImplFrame(); |
| 643 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 627 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 644 state.OnBeginImplFrameDeadlinePending(); | |
| 645 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | |
| 646 state.OnBeginImplFrameDeadline(); | 628 state.OnBeginImplFrameDeadline(); |
| 647 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); | 629 state.SetDrawResultForTest(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS); |
| 648 EXPECT_ACTION_UPDATE_STATE( | 630 EXPECT_ACTION_UPDATE_STATE( |
| 649 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); | 631 SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE); |
| 650 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 632 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 651 state.OnBeginImplFrameIdle(); | 633 state.OnBeginImplFrameIdle(); |
| 652 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 634 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 653 } | 635 } |
| 654 EXPECT_TRUE(state.RedrawPending()); | 636 EXPECT_TRUE(state.RedrawPending()); |
| 655 EXPECT_TRUE(state.ForcedRedrawState() == | 637 EXPECT_TRUE(state.ForcedRedrawState() == |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 915 EXPECT_TRUE(state.NeedsCommit()); | 897 EXPECT_TRUE(state.NeedsCommit()); |
| 916 | 898 |
| 917 // Let the frame finish. | 899 // Let the frame finish. |
| 918 state.NotifyBeginMainFrameStarted(); | 900 state.NotifyBeginMainFrameStarted(); |
| 919 state.NotifyReadyToCommit(); | 901 state.NotifyReadyToCommit(); |
| 920 EXPECT_MAIN_FRAME_STATE( | 902 EXPECT_MAIN_FRAME_STATE( |
| 921 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); | 903 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_READY_TO_COMMIT); |
| 922 | 904 |
| 923 // Expect to commit regardless of BeginImplFrame state. | 905 // Expect to commit regardless of BeginImplFrame state. |
| 924 EXPECT_IMPL_FRAME_STATE( | 906 EXPECT_IMPL_FRAME_STATE( |
| 925 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | |
| 926 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | |
| 927 | |
| 928 state.OnBeginImplFrameDeadlinePending(); | |
| 929 EXPECT_IMPL_FRAME_STATE( | |
| 930 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 907 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 931 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 908 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 932 | 909 |
| 933 state.OnBeginImplFrameDeadline(); | 910 state.OnBeginImplFrameDeadline(); |
| 934 EXPECT_IMPL_FRAME_STATE( | 911 EXPECT_IMPL_FRAME_STATE( |
| 935 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 912 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 936 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 913 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 937 | 914 |
| 938 state.OnBeginImplFrameIdle(); | 915 state.OnBeginImplFrameIdle(); |
| 939 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 916 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 940 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 917 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 941 | 918 |
| 942 state.OnBeginImplFrame(); | 919 state.OnBeginImplFrame(); |
| 943 EXPECT_IMPL_FRAME_STATE( | 920 EXPECT_IMPL_FRAME_STATE( |
| 944 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | 921 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 945 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); | 922 EXPECT_ACTION(SchedulerStateMachine::ACTION_COMMIT); |
| 946 | 923 |
| 947 // Finish the commit and activate, then make sure we start the next commit | 924 // Finish the commit and activate, then make sure we start the next commit |
| 948 // immediately and draw on the next BeginImplFrame. | 925 // immediately and draw on the next BeginImplFrame. |
| 949 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); | 926 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_COMMIT); |
| 950 state.NotifyReadyToActivate(); | 927 state.NotifyReadyToActivate(); |
| 951 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); | 928 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE); |
| 952 EXPECT_ACTION_UPDATE_STATE( | 929 EXPECT_ACTION_UPDATE_STATE( |
| 953 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 930 SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 954 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 931 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1555 // waiting for the first draw to unblock the main thread. | 1532 // waiting for the first draw to unblock the main thread. |
| 1556 EXPECT_TRUE(state.active_tree_needs_first_draw()); | 1533 EXPECT_TRUE(state.active_tree_needs_first_draw()); |
| 1557 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1534 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1558 | 1535 |
| 1559 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1536 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1560 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1537 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 1561 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1538 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1562 | 1539 |
| 1563 state.OnBeginImplFrame(); | 1540 state.OnBeginImplFrame(); |
| 1564 EXPECT_IMPL_FRAME_STATE( | 1541 EXPECT_IMPL_FRAME_STATE( |
| 1565 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | |
| 1566 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | |
| 1567 | |
| 1568 state.OnBeginImplFrameDeadlinePending(); | |
| 1569 EXPECT_IMPL_FRAME_STATE( | |
| 1570 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1542 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 1571 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1543 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1572 | 1544 |
| 1573 state.OnBeginImplFrameDeadline(); | 1545 state.OnBeginImplFrameDeadline(); |
| 1574 EXPECT_IMPL_FRAME_STATE( | 1546 EXPECT_IMPL_FRAME_STATE( |
| 1575 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1547 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 1576 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1548 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1577 } | 1549 } |
| 1578 | 1550 |
| 1579 TEST(SchedulerStateMachineTest, | 1551 TEST(SchedulerStateMachineTest, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1617 | 1589 |
| 1618 // Because the output surface is missing, we expect the draw to abort. | 1590 // Because the output surface is missing, we expect the draw to abort. |
| 1619 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); | 1591 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT); |
| 1620 | 1592 |
| 1621 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE | 1593 // Expect to begin context recreation only in BEGIN_IMPL_FRAME_STATE_IDLE |
| 1622 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); | 1594 EXPECT_IMPL_FRAME_STATE(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE); |
| 1623 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 1595 EXPECT_ACTION(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 1624 | 1596 |
| 1625 state.OnBeginImplFrame(); | 1597 state.OnBeginImplFrame(); |
| 1626 EXPECT_IMPL_FRAME_STATE( | 1598 EXPECT_IMPL_FRAME_STATE( |
| 1627 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING); | |
| 1628 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | |
| 1629 | |
| 1630 state.OnBeginImplFrameDeadlinePending(); | |
| 1631 EXPECT_IMPL_FRAME_STATE( | |
| 1632 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); | 1599 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME); |
| 1633 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1600 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1634 | 1601 |
| 1635 state.OnBeginImplFrameDeadline(); | 1602 state.OnBeginImplFrameDeadline(); |
| 1636 EXPECT_IMPL_FRAME_STATE( | 1603 EXPECT_IMPL_FRAME_STATE( |
| 1637 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); | 1604 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE); |
| 1638 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); | 1605 EXPECT_ACTION(SchedulerStateMachine::ACTION_NONE); |
| 1639 | 1606 |
| 1640 state.OnBeginImplFrameIdle(); | 1607 state.OnBeginImplFrameIdle(); |
| 1641 EXPECT_ACTION_UPDATE_STATE( | 1608 EXPECT_ACTION_UPDATE_STATE( |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2118 | 2085 |
| 2119 // Lose the output surface. | 2086 // Lose the output surface. |
| 2120 state.DidLoseOutputSurface(); | 2087 state.DidLoseOutputSurface(); |
| 2121 | 2088 |
| 2122 // The scheduler shouldn't trigger the output surface creation till the | 2089 // The scheduler shouldn't trigger the output surface creation till the |
| 2123 // previous commit has been cleared. | 2090 // previous commit has been cleared. |
| 2124 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2091 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2125 | 2092 |
| 2126 // Trigger the deadline and ensure that the scheduler does not trigger any | 2093 // Trigger the deadline and ensure that the scheduler does not trigger any |
| 2127 // actions until we receive a response for the pending commit. | 2094 // actions until we receive a response for the pending commit. |
| 2128 state.OnBeginImplFrameDeadlinePending(); | |
| 2129 state.OnBeginImplFrameDeadline(); | 2095 state.OnBeginImplFrameDeadline(); |
| 2130 state.OnBeginImplFrameIdle(); | 2096 state.OnBeginImplFrameIdle(); |
| 2131 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2097 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2132 | 2098 |
| 2133 // Abort the commit, since that is what we expect the main thread to do if the | 2099 // Abort the commit, since that is what we expect the main thread to do if the |
| 2134 // output surface was lost due to a synchronous call from the main thread to | 2100 // output surface was lost due to a synchronous call from the main thread to |
| 2135 // release the output surface. | 2101 // release the output surface. |
| 2136 state.NotifyBeginMainFrameStarted(); | 2102 state.NotifyBeginMainFrameStarted(); |
| 2137 state.BeginMainFrameAborted( | 2103 state.BeginMainFrameAborted( |
| 2138 CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST); | 2104 CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2154 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); | 2120 PerformAction(&state, SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME); |
| 2155 | 2121 |
| 2156 // Lose the output surface. | 2122 // Lose the output surface. |
| 2157 state.DidLoseOutputSurface(); | 2123 state.DidLoseOutputSurface(); |
| 2158 | 2124 |
| 2159 // The scheduler shouldn't trigger the output surface creation till the | 2125 // The scheduler shouldn't trigger the output surface creation till the |
| 2160 // previous begin impl frame state is cleared from the pipeline. | 2126 // previous begin impl frame state is cleared from the pipeline. |
| 2161 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); | 2127 EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE); |
| 2162 | 2128 |
| 2163 // Cycle through the frame stages to clear the scheduler state. | 2129 // Cycle through the frame stages to clear the scheduler state. |
| 2164 state.OnBeginImplFrameDeadlinePending(); | |
| 2165 state.OnBeginImplFrameDeadline(); | 2130 state.OnBeginImplFrameDeadline(); |
| 2166 state.OnBeginImplFrameIdle(); | 2131 state.OnBeginImplFrameIdle(); |
| 2167 | 2132 |
| 2168 // The scheduler should begin the output surface creation now. | 2133 // The scheduler should begin the output surface creation now. |
| 2169 EXPECT_ACTION_UPDATE_STATE( | 2134 EXPECT_ACTION_UPDATE_STATE( |
| 2170 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); | 2135 SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION); |
| 2171 } | 2136 } |
| 2172 | 2137 |
| 2173 } // namespace | 2138 } // namespace |
| 2174 } // namespace cc | 2139 } // namespace cc |
| OLD | NEW |