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_state_machine.h" | 5 #include "cc/scheduler_state_machine.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 namespace cc { | 9 namespace cc { |
10 namespace { | 10 namespace { |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commi
tState()); | 630 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commi
tState()); |
631 } | 631 } |
632 | 632 |
633 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) | 633 TEST(SchedulerStateMachineTest, TestContextLostWhenCompletelyIdle) |
634 { | 634 { |
635 StateMachine state; | 635 StateMachine state; |
636 state.setCanBeginFrame(true); | 636 state.setCanBeginFrame(true); |
637 state.setVisible(true); | 637 state.setVisible(true); |
638 state.setCanDraw(true); | 638 state.setCanDraw(true); |
639 | 639 |
640 state.didLoseContext(); | 640 state.didLoseOutputSurface(); |
641 | 641 |
642 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 642 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
643 state.updateState(state.nextAction()); | 643 state.updateState(state.nextAction()); |
644 | 644 |
645 // Once context recreation begins, nothing should happen. | 645 // Once context recreation begins, nothing should happen. |
646 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); | 646 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); |
647 | 647 |
648 // Recreate the context | 648 // Recreate the context |
649 state.didRecreateContext(); | 649 state.didRecreateOutputSurface(); |
650 | 650 |
651 // When the context is recreated, we should begin a commit | 651 // When the context is recreated, we should begin a commit |
652 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 652 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
653 state.updateState(state.nextAction()); | 653 state.updateState(state.nextAction()); |
654 } | 654 } |
655 | 655 |
656 TEST(SchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhileRe
creating) | 656 TEST(SchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhileRe
creating) |
657 { | 657 { |
658 StateMachine state; | 658 StateMachine state; |
659 state.setCanBeginFrame(true); | 659 state.setCanBeginFrame(true); |
660 state.setVisible(true); | 660 state.setVisible(true); |
661 state.setCanDraw(true); | 661 state.setCanDraw(true); |
662 | 662 |
663 state.didLoseContext(); | 663 state.didLoseOutputSurface(); |
664 | 664 |
665 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 665 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
666 state.updateState(state.nextAction()); | 666 state.updateState(state.nextAction()); |
667 | 667 |
668 // Once context recreation begins, nothing should happen. | 668 // Once context recreation begins, nothing should happen. |
669 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); | 669 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); |
670 | 670 |
671 // While context is recreating, commits shouldn't begin. | 671 // While context is recreating, commits shouldn't begin. |
672 state.setNeedsCommit(); | 672 state.setNeedsCommit(); |
673 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); | 673 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); |
674 | 674 |
675 // Recreate the context | 675 // Recreate the context |
676 state.didRecreateContext(); | 676 state.didRecreateOutputSurface(); |
677 | 677 |
678 // When the context is recreated, we should begin a commit | 678 // When the context is recreated, we should begin a commit |
679 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 679 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
680 state.updateState(state.nextAction()); | 680 state.updateState(state.nextAction()); |
681 | 681 |
682 // Once the context is recreated, whether we draw should be based on | 682 // Once the context is recreated, whether we draw should be based on |
683 // setCanDraw. | 683 // setCanDraw. |
684 state.setNeedsRedraw(true); | 684 state.setNeedsRedraw(true); |
685 state.didEnterVSync(); | 685 state.didEnterVSync(); |
686 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); | 686 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); |
(...skipping 16 matching lines...) Expand all Loading... |
703 state.updateState(state.nextAction()); | 703 state.updateState(state.nextAction()); |
704 | 704 |
705 // Set damage and expect a draw. | 705 // Set damage and expect a draw. |
706 state.setNeedsRedraw(true); | 706 state.setNeedsRedraw(true); |
707 state.didEnterVSync(); | 707 state.didEnterVSync(); |
708 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); | 708 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); |
709 state.updateState(state.nextAction()); | 709 state.updateState(state.nextAction()); |
710 state.didLeaveVSync(); | 710 state.didLeaveVSync(); |
711 | 711 |
712 // Cause a lost context while the begin frame is in flight. | 712 // Cause a lost context while the begin frame is in flight. |
713 state.didLoseContext(); | 713 state.didLoseOutputSurface(); |
714 | 714 |
715 // Ask for another draw. Expect nothing happens. | 715 // Ask for another draw. Expect nothing happens. |
716 state.setNeedsRedraw(true); | 716 state.setNeedsRedraw(true); |
717 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); | 717 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); |
718 | 718 |
719 // Finish the frame, and commit. | 719 // Finish the frame, and commit. |
720 state.beginFrameComplete(); | 720 state.beginFrameComplete(); |
721 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); | 721 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); |
722 state.updateState(state.nextAction()); | 722 state.updateState(state.nextAction()); |
723 | 723 |
724 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.
commitState()); | 724 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.
commitState()); |
725 | 725 |
726 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); | 726 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); |
727 state.updateState(state.nextAction()); | 727 state.updateState(state.nextAction()); |
728 | 728 |
729 // Expect to be told to begin context recreation, independent of vsync state | 729 // Expect to be told to begin context recreation, independent of vsync state |
730 state.didEnterVSync(); | 730 state.didEnterVSync(); |
731 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 731 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
732 state.didLeaveVSync(); | 732 state.didLeaveVSync(); |
733 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 733 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
734 } | 734 } |
735 | 735 |
736 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnotherCo
mmitRequested) | 736 TEST(SchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnotherCo
mmitRequested) |
737 { | 737 { |
738 StateMachine state; | 738 StateMachine state; |
739 state.setCanBeginFrame(true); | 739 state.setCanBeginFrame(true); |
740 state.setVisible(true); | 740 state.setVisible(true); |
741 state.setCanDraw(true); | 741 state.setCanDraw(true); |
742 | 742 |
743 // Get a commit in flight. | 743 // Get a commit in flight. |
744 state.setNeedsCommit(); | 744 state.setNeedsCommit(); |
745 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 745 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
746 state.updateState(state.nextAction()); | 746 state.updateState(state.nextAction()); |
747 | 747 |
748 // Set damage and expect a draw. | 748 // Set damage and expect a draw. |
749 state.setNeedsRedraw(true); | 749 state.setNeedsRedraw(true); |
750 state.didEnterVSync(); | 750 state.didEnterVSync(); |
751 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); | 751 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); |
752 state.updateState(state.nextAction()); | 752 state.updateState(state.nextAction()); |
753 state.didLeaveVSync(); | 753 state.didLeaveVSync(); |
754 | 754 |
755 // Cause a lost context while the begin frame is in flight. | 755 // Cause a lost context while the begin frame is in flight. |
756 state.didLoseContext(); | 756 state.didLoseOutputSurface(); |
757 | 757 |
758 // Ask for another draw and also set needs commit. Expect nothing happens. | 758 // Ask for another draw and also set needs commit. Expect nothing happens. |
759 state.setNeedsRedraw(true); | 759 state.setNeedsRedraw(true); |
760 state.setNeedsCommit(); | 760 state.setNeedsCommit(); |
761 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); | 761 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction()); |
762 | 762 |
763 // Finish the frame, and commit. | 763 // Finish the frame, and commit. |
764 state.beginFrameComplete(); | 764 state.beginFrameComplete(); |
765 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); | 765 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); |
766 state.updateState(state.nextAction()); | 766 state.updateState(state.nextAction()); |
767 | 767 |
768 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.
commitState()); | 768 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state.
commitState()); |
769 | 769 |
770 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); | 770 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()
); |
771 state.updateState(state.nextAction()); | 771 state.updateState(state.nextAction()); |
772 | 772 |
773 // Expect to be told to begin context recreation, independent of vsync state | 773 // Expect to be told to begin context recreation, independent of vsync state |
774 state.didEnterVSync(); | 774 state.didEnterVSync(); |
775 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 775 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
776 state.didLeaveVSync(); | 776 state.didLeaveVSync(); |
777 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 777 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
778 } | 778 } |
779 | 779 |
780 | 780 |
781 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) | 781 TEST(SchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost) |
782 { | 782 { |
783 StateMachine state; | 783 StateMachine state; |
784 state.setVisible(true); | 784 state.setVisible(true); |
785 state.setCanDraw(true); | 785 state.setCanDraw(true); |
786 | 786 |
787 // Cause a lost context lost. | 787 // Cause a lost context lost. |
788 state.didLoseContext(); | 788 state.didLoseOutputSurface(); |
789 | 789 |
790 // Ask a forced redraw and verify it ocurrs. | 790 // Ask a forced redraw and verify it ocurrs. |
791 state.setNeedsForcedRedraw(true); | 791 state.setNeedsForcedRedraw(true); |
792 state.didEnterVSync(); | 792 state.didEnterVSync(); |
793 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); | 793 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); |
794 state.didLeaveVSync(); | 794 state.didLeaveVSync(); |
795 | 795 |
796 // Clear the forced redraw bit. | 796 // Clear the forced redraw bit. |
797 state.setNeedsForcedRedraw(false); | 797 state.setNeedsForcedRedraw(false); |
798 | 798 |
799 // Expect to be told to begin context recreation, independent of vsync state | 799 // Expect to be told to begin context recreation, independent of vsync state |
800 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_CONTEXT_RECREATION, state.next
Action()); | 800 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_RECREATION, sta
te.nextAction()); |
801 state.updateState(state.nextAction()); | 801 state.updateState(state.nextAction()); |
802 | 802 |
803 // Ask a forced redraw and verify it ocurrs. | 803 // Ask a forced redraw and verify it ocurrs. |
804 state.setNeedsForcedRedraw(true); | 804 state.setNeedsForcedRedraw(true); |
805 state.didEnterVSync(); | 805 state.didEnterVSync(); |
806 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); | 806 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction()); |
807 state.didLeaveVSync(); | 807 state.didLeaveVSync(); |
808 } | 808 } |
809 | 809 |
810 TEST(SchedulerStateMachineTest, TestBeginFrameWhenInvisibleAndForceCommit) | 810 TEST(SchedulerStateMachineTest, TestBeginFrameWhenInvisibleAndForceCommit) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 } | 846 } |
847 | 847 |
848 TEST(SchedulerStateMachineTest, TestBeginFrameWhenContextLost) | 848 TEST(SchedulerStateMachineTest, TestBeginFrameWhenContextLost) |
849 { | 849 { |
850 StateMachine state; | 850 StateMachine state; |
851 state.setCanBeginFrame(true); | 851 state.setCanBeginFrame(true); |
852 state.setVisible(true); | 852 state.setVisible(true); |
853 state.setCanDraw(true); | 853 state.setCanDraw(true); |
854 state.setNeedsCommit(); | 854 state.setNeedsCommit(); |
855 state.setNeedsForcedCommit(); | 855 state.setNeedsForcedCommit(); |
856 state.didLoseContext(); | 856 state.didLoseOutputSurface(); |
857 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); | 857 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); |
858 } | 858 } |
859 | 859 |
860 TEST(SchedulerStateMachineTest, TestImmediateBeginFrame) | 860 TEST(SchedulerStateMachineTest, TestImmediateBeginFrame) |
861 { | 861 { |
862 StateMachine state; | 862 StateMachine state; |
863 state.setCanBeginFrame(true); | 863 state.setCanBeginFrame(true); |
864 state.setVisible(true); | 864 state.setVisible(true); |
865 state.setCanDraw(true); | 865 state.setCanDraw(true); |
866 | 866 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
946 state.setVisible(false); | 946 state.setVisible(false); |
947 state.beginFrameAborted(); | 947 state.beginFrameAborted(); |
948 | 948 |
949 // Should be back in the idle state, but needing a commit. | 949 // Should be back in the idle state, but needing a commit. |
950 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); | 950 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); |
951 EXPECT_TRUE(state.needsCommit()); | 951 EXPECT_TRUE(state.needsCommit()); |
952 } | 952 } |
953 | 953 |
954 } // namespace | 954 } // namespace |
955 } // namespace cc | 955 } // namespace cc |
OLD | NEW |