Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(749)

Side by Side Diff: cc/scheduler_state_machine_unittest.cc

Issue 11571049: cc: Make the scheduler compositeAndReadback flow not race with WAITING_FOR_FIRST_DRAW (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: indents Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/scheduler_state_machine.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); 827 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
828 } 828 }
829 829
830 TEST(SchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress) 830 TEST(SchedulerStateMachineTest, TestBeginFrameWhenCommitInProgress)
831 { 831 {
832 StateMachine state; 832 StateMachine state;
833 state.setCanBeginFrame(true); 833 state.setCanBeginFrame(true);
834 state.setVisible(false); 834 state.setVisible(false);
835 state.setCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS); 835 state.setCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS);
836 state.setNeedsCommit(); 836 state.setNeedsCommit();
837 state.setNeedsForcedCommit();
838 837
839 state.beginFrameComplete(); 838 state.beginFrameComplete();
840 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); 839 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
841 state.updateState(state.nextAction()); 840 state.updateState(state.nextAction());
842 841
843 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state. commitState()); 842 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW, state. commitState());
844 843
845 EXPECT_EQ(SchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction()); 844 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
845 }
846
847 TEST(SchedulerStateMachineTest, TestBeginFrameWhenForcedCommitInProgress)
848 {
849 StateMachine state;
850 state.setCanBeginFrame(true);
851 state.setVisible(false);
852 state.setCommitState(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS);
853 state.setNeedsCommit();
854 state.setNeedsForcedCommit();
855
856 state.beginFrameComplete();
857 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
858 state.updateState(state.nextAction());
859
860 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, state.commitState());
861
862 // If we are waiting for forced draw then we know a begin frame is already i n flight.
863 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
846 } 864 }
847 865
848 TEST(SchedulerStateMachineTest, TestBeginFrameWhenContextLost) 866 TEST(SchedulerStateMachineTest, TestBeginFrameWhenContextLost)
849 { 867 {
850 StateMachine state; 868 StateMachine state;
851 state.setCanBeginFrame(true); 869 state.setCanBeginFrame(true);
852 state.setVisible(true); 870 state.setVisible(true);
853 state.setCanDraw(true); 871 state.setCanDraw(true);
854 state.setNeedsCommit(); 872 state.setNeedsCommit();
855 state.setNeedsForcedCommit(); 873 state.setNeedsForcedCommit();
(...skipping 10 matching lines...) Expand all
866 884
867 // Schedule a forced frame, commit it, draw it. 885 // Schedule a forced frame, commit it, draw it.
868 state.setNeedsCommit(); 886 state.setNeedsCommit();
869 state.setNeedsForcedCommit(); 887 state.setNeedsForcedCommit();
870 state.updateState(state.nextAction()); 888 state.updateState(state.nextAction());
871 state.beginFrameComplete(); 889 state.beginFrameComplete();
872 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); 890 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
873 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitS tate()); 891 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitS tate());
874 state.updateState(state.nextAction()); 892 state.updateState(state.nextAction());
875 893
894 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, state.commitState());
895
876 state.didEnterVSync(); 896 state.didEnterVSync();
877 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction() ); 897 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
898 state.setNeedsForcedRedraw(true);
899 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction());
878 state.updateState(state.nextAction()); 900 state.updateState(state.nextAction());
879 state.didDrawIfPossibleCompleted(true); 901 state.didDrawIfPossibleCompleted(true);
880 state.didLeaveVSync(); 902 state.didLeaveVSync();
881 903
882 // Should be waiting for the normal begin frame 904 // Should be waiting for the normal begin frame
883 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commit State()); 905 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commi tState());
884 } 906 }
885 907
886 TEST(SchedulerStateMachineTest, TestImmediateBeginFrameDuringCommit) 908 TEST(SchedulerStateMachineTest, TestImmediateBeginFrameDuringCommit)
887 { 909 {
888 StateMachine state; 910 StateMachine state;
889 state.setCanBeginFrame(true); 911 state.setCanBeginFrame(true);
890 state.setVisible(true); 912 state.setVisible(true);
891 state.setCanDraw(true); 913 state.setCanDraw(true);
892 914
893 // Start a normal commit. 915 // Start a normal commit.
894 state.setNeedsCommit(); 916 state.setNeedsCommit();
895 state.updateState(state.nextAction()); 917 state.updateState(state.nextAction());
896 918
897 // Schedule a forced frame, commit it, draw it. 919 // Schedule a forced frame, commit it, draw it.
898 state.setNeedsCommit(); 920 state.setNeedsCommit();
899 state.setNeedsForcedCommit(); 921 state.setNeedsForcedCommit();
900 state.updateState(state.nextAction()); 922 state.updateState(state.nextAction());
901 state.beginFrameComplete(); 923 state.beginFrameComplete();
902 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); 924 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
903 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitSt ate()); 925 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitS tate());
904 state.updateState(state.nextAction()); 926 state.updateState(state.nextAction());
905 927
906 state.didEnterVSync(); 928 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, state.commitState());
907 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()) ;
908 state.updateState(state.nextAction());
909 state.didDrawIfPossibleCompleted(true);
910 state.didLeaveVSync();
911 929
912 // Should be waiting for the normal begin frame 930 state.didEnterVSync();
913 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commit State()) << state.toString(); 931 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
932 state.setNeedsForcedRedraw(true);
933 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction());
934 state.updateState(state.nextAction());
935 state.didDrawIfPossibleCompleted(true);
936 state.didLeaveVSync();
937
938 // Should be waiting for the normal begin frame
939 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commi tState()) << state.toString();
914 } 940 }
915 941
916 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileInvisible) 942 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileInvisible)
917 { 943 {
918 StateMachine state; 944 StateMachine state;
919 state.setCanBeginFrame(true); 945 state.setCanBeginFrame(true);
920 state.setVisible(true); 946 state.setVisible(true);
921 state.setCanDraw(true); 947 state.setCanDraw(true);
922 948
923 state.setNeedsCommit(); 949 state.setNeedsCommit();
924 state.updateState(state.nextAction()); 950 state.updateState(state.nextAction());
925 951
926 state.setNeedsCommit(); 952 state.setNeedsCommit();
927 state.setNeedsForcedCommit(); 953 state.setNeedsForcedCommit();
928 state.updateState(state.nextAction()); 954 state.updateState(state.nextAction());
929 state.beginFrameComplete(); 955 state.beginFrameComplete();
930 956
931 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction()); 957 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
932 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitSt ate()); 958 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitS tate());
933 state.updateState(state.nextAction()); 959 state.updateState(state.nextAction());
934 960
935 state.didEnterVSync(); 961 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, state.commitState());
936 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_IF_POSSIBLE, state.nextAction()) ;
937 state.updateState(state.nextAction());
938 state.didDrawIfPossibleCompleted(true);
939 state.didLeaveVSync();
940 962
941 // Should be waiting for the normal begin frame 963 state.didEnterVSync();
942 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commit State()) << state.toString(); 964 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
965 state.setNeedsForcedRedraw(true);
966 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction());
967 state.updateState(state.nextAction());
968 state.didDrawIfPossibleCompleted(true);
969 state.didLeaveVSync();
970
971 // Should be waiting for the normal begin frame
972 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_FRAME_IN_PROGRESS, state.commi tState()) << state.toString();
943 973
944 974
945 // Become invisible and abort the "normal" begin frame. 975 // Become invisible and abort the "normal" begin frame.
946 state.setVisible(false); 976 state.setVisible(false);
947 state.beginFrameAborted(); 977 state.beginFrameAborted();
948 978
949 // Should be back in the idle state, but needing a commit. 979 // Should be back in the idle state, but needing a commit.
950 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState()); 980 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_IDLE, state.commitState());
951 EXPECT_TRUE(state.needsCommit()); 981 EXPECT_TRUE(state.needsCommit());
982 }
983
984 TEST(SchedulerStateMachineTest, ImmediateBeginFrameWhileCantDraw)
985 {
986 StateMachine state;
987 state.setCanBeginFrame(true);
988 state.setVisible(true);
989 state.setCanDraw(false);
990
991 state.setNeedsCommit();
992 state.updateState(state.nextAction());
993
994 state.setNeedsCommit();
995 state.setNeedsForcedCommit();
996 state.updateState(state.nextAction());
997 state.beginFrameComplete();
998
999 EXPECT_EQ(SchedulerStateMachine::ACTION_COMMIT, state.nextAction());
1000 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_READY_TO_COMMIT, state.commitS tate());
1001 state.updateState(state.nextAction());
1002
1003 EXPECT_EQ(SchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_FORCED_DRAW, state.commitState());
1004
1005 state.didEnterVSync();
1006 EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.nextAction());
1007 state.setNeedsForcedRedraw(true);
1008 EXPECT_EQ(SchedulerStateMachine::ACTION_DRAW_FORCED, state.nextAction());
1009 state.updateState(state.nextAction());
1010 state.didDrawIfPossibleCompleted(true);
1011 state.didLeaveVSync();
952 } 1012 }
953 1013
954 } // namespace 1014 } // namespace
955 } // namespace cc 1015 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler_state_machine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698