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.h" | 5 #include "cc/scheduler/scheduler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 states_.push_back(scheduler_->AsValue()); | 256 states_.push_back(scheduler_->AsValue()); |
257 } | 257 } |
258 void ScheduledActionActivateSyncTree() override { | 258 void ScheduledActionActivateSyncTree() override { |
259 actions_.push_back("ScheduledActionActivateSyncTree"); | 259 actions_.push_back("ScheduledActionActivateSyncTree"); |
260 states_.push_back(scheduler_->AsValue()); | 260 states_.push_back(scheduler_->AsValue()); |
261 } | 261 } |
262 void ScheduledActionBeginOutputSurfaceCreation() override { | 262 void ScheduledActionBeginOutputSurfaceCreation() override { |
263 actions_.push_back("ScheduledActionBeginOutputSurfaceCreation"); | 263 actions_.push_back("ScheduledActionBeginOutputSurfaceCreation"); |
264 states_.push_back(scheduler_->AsValue()); | 264 states_.push_back(scheduler_->AsValue()); |
265 } | 265 } |
266 void ScheduledActionManageTiles() override { | 266 void ScheduledActionPrepareTiles() override { |
267 actions_.push_back("ScheduledActionManageTiles"); | 267 actions_.push_back("ScheduledActionPrepareTiles"); |
268 states_.push_back(scheduler_->AsValue()); | 268 states_.push_back(scheduler_->AsValue()); |
269 } | 269 } |
270 void DidAnticipatedDrawTimeChange(base::TimeTicks) override { | 270 void DidAnticipatedDrawTimeChange(base::TimeTicks) override { |
271 if (log_anticipated_draw_time_change_) | 271 if (log_anticipated_draw_time_change_) |
272 actions_.push_back("DidAnticipatedDrawTimeChange"); | 272 actions_.push_back("DidAnticipatedDrawTimeChange"); |
273 } | 273 } |
274 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); } | 274 base::TimeDelta DrawDurationEstimate() override { return base::TimeDelta(); } |
275 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { | 275 base::TimeDelta BeginMainFrameToCommitDurationEstimate() override { |
276 return base::TimeDelta(); | 276 return base::TimeDelta(); |
277 } | 277 } |
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 EXPECT_TRUE(client.needs_begin_frames()); | 801 EXPECT_TRUE(client.needs_begin_frames()); |
802 | 802 |
803 // Fail to draw, this should not start a frame. | 803 // Fail to draw, this should not start a frame. |
804 client.SetDrawWillHappen(false); | 804 client.SetDrawWillHappen(false); |
805 client.SetNeedsCommitOnNextDraw(); | 805 client.SetNeedsCommitOnNextDraw(); |
806 client.AdvanceFrame(); | 806 client.AdvanceFrame(); |
807 client.task_runner().RunPendingTasks(); // Run posted deadline. | 807 client.task_runner().RunPendingTasks(); // Run posted deadline. |
808 EXPECT_EQ(2, client.num_draws()); | 808 EXPECT_EQ(2, client.num_draws()); |
809 } | 809 } |
810 | 810 |
811 class SchedulerClientNeedsManageTilesInDraw : public FakeSchedulerClient { | 811 class SchedulerClientNeedsPrepareTilesInDraw : public FakeSchedulerClient { |
812 public: | 812 public: |
813 DrawResult ScheduledActionDrawAndSwapIfPossible() override { | 813 DrawResult ScheduledActionDrawAndSwapIfPossible() override { |
814 scheduler_->SetNeedsManageTiles(); | 814 scheduler_->SetNeedsPrepareTiles(); |
815 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); | 815 return FakeSchedulerClient::ScheduledActionDrawAndSwapIfPossible(); |
816 } | 816 } |
817 }; | 817 }; |
818 | 818 |
819 // Test manage tiles is independant of draws. | 819 // Test prepare tiles is independant of draws. |
820 TEST(SchedulerTest, ManageTiles) { | 820 TEST(SchedulerTest, PrepareTiles) { |
821 SchedulerClientNeedsManageTilesInDraw client; | 821 SchedulerClientNeedsPrepareTilesInDraw client; |
822 SchedulerSettings scheduler_settings; | 822 SchedulerSettings scheduler_settings; |
823 scheduler_settings.use_external_begin_frame_source = true; | 823 scheduler_settings.use_external_begin_frame_source = true; |
824 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 824 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
825 scheduler->SetCanStart(); | 825 scheduler->SetCanStart(); |
826 scheduler->SetVisible(true); | 826 scheduler->SetVisible(true); |
827 scheduler->SetCanDraw(true); | 827 scheduler->SetCanDraw(true); |
828 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 828 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
829 | 829 |
830 // Request both draw and manage tiles. ManageTiles shouldn't | 830 // Request both draw and prepare tiles. PrepareTiles shouldn't |
831 // be trigged until BeginImplFrame. | 831 // be trigged until BeginImplFrame. |
832 client.Reset(); | 832 client.Reset(); |
833 scheduler->SetNeedsManageTiles(); | 833 scheduler->SetNeedsPrepareTiles(); |
834 scheduler->SetNeedsRedraw(); | 834 scheduler->SetNeedsRedraw(); |
835 EXPECT_TRUE(scheduler->RedrawPending()); | 835 EXPECT_TRUE(scheduler->RedrawPending()); |
836 EXPECT_TRUE(scheduler->ManageTilesPending()); | 836 EXPECT_TRUE(scheduler->PrepareTilesPending()); |
837 EXPECT_TRUE(client.needs_begin_frames()); | 837 EXPECT_TRUE(client.needs_begin_frames()); |
838 EXPECT_EQ(0, client.num_draws()); | 838 EXPECT_EQ(0, client.num_draws()); |
839 EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles")); | 839 EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles")); |
840 EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 840 EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
841 | 841 |
842 // We have no immediate actions to perform, so the BeginImplFrame should post | 842 // We have no immediate actions to perform, so the BeginImplFrame should post |
843 // the deadline task. | 843 // the deadline task. |
844 client.Reset(); | 844 client.Reset(); |
845 client.AdvanceFrame(); | 845 client.AdvanceFrame(); |
846 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 846 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
847 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 847 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
848 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 848 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
849 | 849 |
850 // On the deadline, he actions should have occured in the right order. | 850 // On the deadline, he actions should have occured in the right order. |
851 client.Reset(); | 851 client.Reset(); |
852 client.task_runner().RunPendingTasks(); // Run posted deadline. | 852 client.task_runner().RunPendingTasks(); // Run posted deadline. |
853 EXPECT_EQ(1, client.num_draws()); | 853 EXPECT_EQ(1, client.num_draws()); |
854 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 854 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
855 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); | 855 EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles")); |
856 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), | 856 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), |
857 client.ActionIndex("ScheduledActionManageTiles")); | 857 client.ActionIndex("ScheduledActionPrepareTiles")); |
858 EXPECT_FALSE(scheduler->RedrawPending()); | 858 EXPECT_FALSE(scheduler->RedrawPending()); |
859 EXPECT_FALSE(scheduler->ManageTilesPending()); | 859 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
860 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 860 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
861 | 861 |
862 // Request a draw. We don't need a ManageTiles yet. | 862 // Request a draw. We don't need a PrepareTiles yet. |
863 client.Reset(); | 863 client.Reset(); |
864 scheduler->SetNeedsRedraw(); | 864 scheduler->SetNeedsRedraw(); |
865 EXPECT_TRUE(scheduler->RedrawPending()); | 865 EXPECT_TRUE(scheduler->RedrawPending()); |
866 EXPECT_FALSE(scheduler->ManageTilesPending()); | 866 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
867 EXPECT_TRUE(client.needs_begin_frames()); | 867 EXPECT_TRUE(client.needs_begin_frames()); |
868 EXPECT_EQ(0, client.num_draws()); | 868 EXPECT_EQ(0, client.num_draws()); |
869 | 869 |
870 // We have no immediate actions to perform, so the BeginImplFrame should post | 870 // We have no immediate actions to perform, so the BeginImplFrame should post |
871 // the deadline task. | 871 // the deadline task. |
872 client.Reset(); | 872 client.Reset(); |
873 client.AdvanceFrame(); | 873 client.AdvanceFrame(); |
874 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 874 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
875 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 875 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
876 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 876 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
877 | 877 |
878 // Draw. The draw will trigger SetNeedsManageTiles, and | 878 // Draw. The draw will trigger SetNeedsPrepareTiles, and |
879 // then the ManageTiles action will be triggered after the Draw. | 879 // then the PrepareTiles action will be triggered after the Draw. |
880 // Afterwards, neither a draw nor ManageTiles are pending. | 880 // Afterwards, neither a draw nor PrepareTiles are pending. |
881 client.Reset(); | 881 client.Reset(); |
882 client.task_runner().RunPendingTasks(); // Run posted deadline. | 882 client.task_runner().RunPendingTasks(); // Run posted deadline. |
883 EXPECT_EQ(1, client.num_draws()); | 883 EXPECT_EQ(1, client.num_draws()); |
884 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 884 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
885 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); | 885 EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles")); |
886 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), | 886 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), |
887 client.ActionIndex("ScheduledActionManageTiles")); | 887 client.ActionIndex("ScheduledActionPrepareTiles")); |
888 EXPECT_FALSE(scheduler->RedrawPending()); | 888 EXPECT_FALSE(scheduler->RedrawPending()); |
889 EXPECT_FALSE(scheduler->ManageTilesPending()); | 889 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
890 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 890 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
891 | 891 |
892 // We need a BeginImplFrame where we don't swap to go idle. | 892 // We need a BeginImplFrame where we don't swap to go idle. |
893 client.Reset(); | 893 client.Reset(); |
894 client.AdvanceFrame(); | 894 client.AdvanceFrame(); |
895 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); | 895 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
896 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 896 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
897 client.Reset(); | 897 client.Reset(); |
898 client.task_runner().RunPendingTasks(); // Run posted deadline. | 898 client.task_runner().RunPendingTasks(); // Run posted deadline. |
899 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); | 899 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
900 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 900 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
901 EXPECT_EQ(0, client.num_draws()); | 901 EXPECT_EQ(0, client.num_draws()); |
902 | 902 |
903 // Now trigger a ManageTiles outside of a draw. We will then need | 903 // Now trigger a PrepareTiles outside of a draw. We will then need |
904 // a begin-frame for the ManageTiles, but we don't need a draw. | 904 // a begin-frame for the PrepareTiles, but we don't need a draw. |
905 client.Reset(); | 905 client.Reset(); |
906 EXPECT_FALSE(client.needs_begin_frames()); | 906 EXPECT_FALSE(client.needs_begin_frames()); |
907 scheduler->SetNeedsManageTiles(); | 907 scheduler->SetNeedsPrepareTiles(); |
908 EXPECT_TRUE(client.needs_begin_frames()); | 908 EXPECT_TRUE(client.needs_begin_frames()); |
909 EXPECT_TRUE(scheduler->ManageTilesPending()); | 909 EXPECT_TRUE(scheduler->PrepareTilesPending()); |
910 EXPECT_FALSE(scheduler->RedrawPending()); | 910 EXPECT_FALSE(scheduler->RedrawPending()); |
911 | 911 |
912 // BeginImplFrame. There will be no draw, only ManageTiles. | 912 // BeginImplFrame. There will be no draw, only PrepareTiles. |
913 client.Reset(); | 913 client.Reset(); |
914 client.AdvanceFrame(); | 914 client.AdvanceFrame(); |
915 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); | 915 EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
916 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 916 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
917 client.Reset(); | 917 client.Reset(); |
918 client.task_runner().RunPendingTasks(); // Run posted deadline. | 918 client.task_runner().RunPendingTasks(); // Run posted deadline. |
919 EXPECT_EQ(0, client.num_draws()); | 919 EXPECT_EQ(0, client.num_draws()); |
920 EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 920 EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
921 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); | 921 EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles")); |
922 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 922 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
923 } | 923 } |
924 | 924 |
925 // Test that ManageTiles only happens once per frame. If an external caller | 925 // Test that PrepareTiles only happens once per frame. If an external caller |
926 // initiates it, then the state machine should not ManageTiles on that frame. | 926 // initiates it, then the state machine should not PrepareTiles on that frame. |
927 TEST(SchedulerTest, ManageTilesOncePerFrame) { | 927 TEST(SchedulerTest, PrepareTilesOncePerFrame) { |
928 FakeSchedulerClient client; | 928 FakeSchedulerClient client; |
929 SchedulerSettings scheduler_settings; | 929 SchedulerSettings scheduler_settings; |
930 scheduler_settings.use_external_begin_frame_source = true; | 930 scheduler_settings.use_external_begin_frame_source = true; |
931 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 931 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
932 scheduler->SetCanStart(); | 932 scheduler->SetCanStart(); |
933 scheduler->SetVisible(true); | 933 scheduler->SetVisible(true); |
934 scheduler->SetCanDraw(true); | 934 scheduler->SetCanDraw(true); |
935 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 935 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
936 | 936 |
937 // If DidManageTiles during a frame, then ManageTiles should not occur again. | 937 // If DidPrepareTiles during a frame, then PrepareTiles should not occur |
938 scheduler->SetNeedsManageTiles(); | 938 // again. |
| 939 scheduler->SetNeedsPrepareTiles(); |
939 scheduler->SetNeedsRedraw(); | 940 scheduler->SetNeedsRedraw(); |
940 client.Reset(); | 941 client.Reset(); |
941 client.AdvanceFrame(); | 942 client.AdvanceFrame(); |
942 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 943 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
943 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 944 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
944 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 945 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
945 | 946 |
946 EXPECT_TRUE(scheduler->ManageTilesPending()); | 947 EXPECT_TRUE(scheduler->PrepareTilesPending()); |
947 scheduler->DidManageTiles(); // An explicit ManageTiles. | 948 scheduler->DidPrepareTiles(); // An explicit PrepareTiles. |
948 EXPECT_FALSE(scheduler->ManageTilesPending()); | 949 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
949 | 950 |
950 client.Reset(); | 951 client.Reset(); |
951 client.task_runner().RunPendingTasks(); // Run posted deadline. | 952 client.task_runner().RunPendingTasks(); // Run posted deadline. |
952 EXPECT_EQ(1, client.num_draws()); | 953 EXPECT_EQ(1, client.num_draws()); |
953 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 954 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
954 EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles")); | 955 EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles")); |
955 EXPECT_FALSE(scheduler->RedrawPending()); | 956 EXPECT_FALSE(scheduler->RedrawPending()); |
956 EXPECT_FALSE(scheduler->ManageTilesPending()); | 957 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
957 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 958 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
958 | 959 |
959 // Next frame without DidManageTiles should ManageTiles with draw. | 960 // Next frame without DidPrepareTiles should PrepareTiles with draw. |
960 scheduler->SetNeedsManageTiles(); | 961 scheduler->SetNeedsPrepareTiles(); |
961 scheduler->SetNeedsRedraw(); | 962 scheduler->SetNeedsRedraw(); |
962 client.Reset(); | 963 client.Reset(); |
963 client.AdvanceFrame(); | 964 client.AdvanceFrame(); |
964 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 965 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
965 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 966 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
966 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 967 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
967 | 968 |
968 client.Reset(); | 969 client.Reset(); |
969 client.task_runner().RunPendingTasks(); // Run posted deadline. | 970 client.task_runner().RunPendingTasks(); // Run posted deadline. |
970 EXPECT_EQ(1, client.num_draws()); | 971 EXPECT_EQ(1, client.num_draws()); |
971 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 972 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
972 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); | 973 EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles")); |
973 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), | 974 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), |
974 client.ActionIndex("ScheduledActionManageTiles")); | 975 client.ActionIndex("ScheduledActionPrepareTiles")); |
975 EXPECT_FALSE(scheduler->RedrawPending()); | 976 EXPECT_FALSE(scheduler->RedrawPending()); |
976 EXPECT_FALSE(scheduler->ManageTilesPending()); | 977 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
977 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 978 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
978 scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles | 979 scheduler->DidPrepareTiles(); // Corresponds to ScheduledActionPrepareTiles |
979 | 980 |
980 // If we get another DidManageTiles within the same frame, we should | 981 // If we get another DidPrepareTiles within the same frame, we should |
981 // not ManageTiles on the next frame. | 982 // not PrepareTiles on the next frame. |
982 scheduler->DidManageTiles(); // An explicit ManageTiles. | 983 scheduler->DidPrepareTiles(); // An explicit PrepareTiles. |
983 scheduler->SetNeedsManageTiles(); | 984 scheduler->SetNeedsPrepareTiles(); |
984 scheduler->SetNeedsRedraw(); | 985 scheduler->SetNeedsRedraw(); |
985 client.Reset(); | 986 client.Reset(); |
986 client.AdvanceFrame(); | 987 client.AdvanceFrame(); |
987 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 988 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
988 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 989 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
989 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 990 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
990 | 991 |
991 EXPECT_TRUE(scheduler->ManageTilesPending()); | 992 EXPECT_TRUE(scheduler->PrepareTilesPending()); |
992 | 993 |
993 client.Reset(); | 994 client.Reset(); |
994 client.task_runner().RunPendingTasks(); // Run posted deadline. | 995 client.task_runner().RunPendingTasks(); // Run posted deadline. |
995 EXPECT_EQ(1, client.num_draws()); | 996 EXPECT_EQ(1, client.num_draws()); |
996 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 997 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
997 EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles")); | 998 EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles")); |
998 EXPECT_FALSE(scheduler->RedrawPending()); | 999 EXPECT_FALSE(scheduler->RedrawPending()); |
999 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1000 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
1000 | 1001 |
1001 // If we get another DidManageTiles, we should not ManageTiles on the next | 1002 // If we get another DidPrepareTiles, we should not PrepareTiles on the next |
1002 // frame. This verifies we don't alternate calling ManageTiles once and twice. | 1003 // frame. This verifies we don't alternate calling PrepareTiles once and |
1003 EXPECT_TRUE(scheduler->ManageTilesPending()); | 1004 // twice. |
1004 scheduler->DidManageTiles(); // An explicit ManageTiles. | 1005 EXPECT_TRUE(scheduler->PrepareTilesPending()); |
1005 EXPECT_FALSE(scheduler->ManageTilesPending()); | 1006 scheduler->DidPrepareTiles(); // An explicit PrepareTiles. |
1006 scheduler->SetNeedsManageTiles(); | 1007 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
| 1008 scheduler->SetNeedsPrepareTiles(); |
1007 scheduler->SetNeedsRedraw(); | 1009 scheduler->SetNeedsRedraw(); |
1008 client.Reset(); | 1010 client.Reset(); |
1009 client.AdvanceFrame(); | 1011 client.AdvanceFrame(); |
1010 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1012 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
1011 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 1013 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
1012 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1014 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
1013 | 1015 |
1014 EXPECT_TRUE(scheduler->ManageTilesPending()); | 1016 EXPECT_TRUE(scheduler->PrepareTilesPending()); |
1015 | 1017 |
1016 client.Reset(); | 1018 client.Reset(); |
1017 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1019 client.task_runner().RunPendingTasks(); // Run posted deadline. |
1018 EXPECT_EQ(1, client.num_draws()); | 1020 EXPECT_EQ(1, client.num_draws()); |
1019 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 1021 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
1020 EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles")); | 1022 EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles")); |
1021 EXPECT_FALSE(scheduler->RedrawPending()); | 1023 EXPECT_FALSE(scheduler->RedrawPending()); |
1022 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1024 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
1023 | 1025 |
1024 // Next frame without DidManageTiles should ManageTiles with draw. | 1026 // Next frame without DidPrepareTiles should PrepareTiles with draw. |
1025 scheduler->SetNeedsManageTiles(); | 1027 scheduler->SetNeedsPrepareTiles(); |
1026 scheduler->SetNeedsRedraw(); | 1028 scheduler->SetNeedsRedraw(); |
1027 client.Reset(); | 1029 client.Reset(); |
1028 client.AdvanceFrame(); | 1030 client.AdvanceFrame(); |
1029 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1031 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
1030 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 1032 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
1031 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1033 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
1032 | 1034 |
1033 client.Reset(); | 1035 client.Reset(); |
1034 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1036 client.task_runner().RunPendingTasks(); // Run posted deadline. |
1035 EXPECT_EQ(1, client.num_draws()); | 1037 EXPECT_EQ(1, client.num_draws()); |
1036 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); | 1038 EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
1037 EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); | 1039 EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles")); |
1038 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), | 1040 EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), |
1039 client.ActionIndex("ScheduledActionManageTiles")); | 1041 client.ActionIndex("ScheduledActionPrepareTiles")); |
1040 EXPECT_FALSE(scheduler->RedrawPending()); | 1042 EXPECT_FALSE(scheduler->RedrawPending()); |
1041 EXPECT_FALSE(scheduler->ManageTilesPending()); | 1043 EXPECT_FALSE(scheduler->PrepareTilesPending()); |
1042 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 1044 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
1043 scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles | 1045 scheduler->DidPrepareTiles(); // Corresponds to ScheduledActionPrepareTiles |
1044 } | 1046 } |
1045 | 1047 |
1046 TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { | 1048 TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { |
1047 SchedulerClientNeedsManageTilesInDraw client; | 1049 SchedulerClientNeedsPrepareTilesInDraw client; |
1048 SchedulerSettings scheduler_settings; | 1050 SchedulerSettings scheduler_settings; |
1049 scheduler_settings.use_external_begin_frame_source = true; | 1051 scheduler_settings.use_external_begin_frame_source = true; |
1050 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1052 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
1051 scheduler->SetCanStart(); | 1053 scheduler->SetCanStart(); |
1052 scheduler->SetVisible(true); | 1054 scheduler->SetVisible(true); |
1053 scheduler->SetCanDraw(true); | 1055 scheduler->SetCanDraw(true); |
1054 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1056 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
1055 | 1057 |
1056 client.Reset(); | 1058 client.Reset(); |
1057 scheduler->SetNeedsRedraw(); | 1059 scheduler->SetNeedsRedraw(); |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1884 } | 1886 } |
1885 | 1887 |
1886 TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommit) { | 1888 TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommit) { |
1887 DidLoseOutputSurfaceAfterReadyToCommit(false); | 1889 DidLoseOutputSurfaceAfterReadyToCommit(false); |
1888 } | 1890 } |
1889 | 1891 |
1890 TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) { | 1892 TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) { |
1891 DidLoseOutputSurfaceAfterReadyToCommit(true); | 1893 DidLoseOutputSurfaceAfterReadyToCommit(true); |
1892 } | 1894 } |
1893 | 1895 |
1894 TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsManageTiles) { | 1896 TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsPrepareTiles) { |
1895 FakeSchedulerClient client; | 1897 FakeSchedulerClient client; |
1896 SchedulerSettings scheduler_settings; | 1898 SchedulerSettings scheduler_settings; |
1897 scheduler_settings.use_external_begin_frame_source = true; | 1899 scheduler_settings.use_external_begin_frame_source = true; |
1898 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1900 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
1899 scheduler->SetCanStart(); | 1901 scheduler->SetCanStart(); |
1900 scheduler->SetVisible(true); | 1902 scheduler->SetVisible(true); |
1901 scheduler->SetCanDraw(true); | 1903 scheduler->SetCanDraw(true); |
1902 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); | 1904 InitializeOutputSurfaceAndFirstCommit(scheduler, &client); |
1903 | 1905 |
1904 client.Reset(); | 1906 client.Reset(); |
1905 scheduler->SetNeedsManageTiles(); | 1907 scheduler->SetNeedsPrepareTiles(); |
1906 scheduler->SetNeedsRedraw(); | 1908 scheduler->SetNeedsRedraw(); |
1907 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); | 1909 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
1908 | 1910 |
1909 client.Reset(); | 1911 client.Reset(); |
1910 client.AdvanceFrame(); | 1912 client.AdvanceFrame(); |
1911 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); | 1913 EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
1912 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); | 1914 EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
1913 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 1915 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
1914 | 1916 |
1915 client.Reset(); | 1917 client.Reset(); |
1916 scheduler->DidLoseOutputSurface(); | 1918 scheduler->DidLoseOutputSurface(); |
1917 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); | 1919 EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client); |
1918 | 1920 |
1919 client.Reset(); | 1921 client.Reset(); |
1920 client.task_runner().RunPendingTasks(); // Run posted deadline. | 1922 client.task_runner().RunPendingTasks(); // Run posted deadline. |
1921 EXPECT_ACTION("ScheduledActionManageTiles", client, 0, 2); | 1923 EXPECT_ACTION("ScheduledActionPrepareTiles", client, 0, 2); |
1922 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2); | 1924 EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2); |
1923 } | 1925 } |
1924 | 1926 |
1925 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { | 1927 TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) { |
1926 FakeSchedulerClient client; | 1928 FakeSchedulerClient client; |
1927 SchedulerSettings scheduler_settings; | 1929 SchedulerSettings scheduler_settings; |
1928 scheduler_settings.use_external_begin_frame_source = true; | 1930 scheduler_settings.use_external_begin_frame_source = true; |
1929 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); | 1931 TestScheduler* scheduler = client.CreateScheduler(scheduler_settings); |
1930 scheduler->SetCanStart(); | 1932 scheduler->SetCanStart(); |
1931 scheduler->SetVisible(true); | 1933 scheduler->SetVisible(true); |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2277 | 2279 |
2278 // Deadline task is pending | 2280 // Deadline task is pending |
2279 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); | 2281 EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
2280 client.task_runner().RunPendingTasks(); | 2282 client.task_runner().RunPendingTasks(); |
2281 // Deadline task runs immediately | 2283 // Deadline task runs immediately |
2282 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); | 2284 EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
2283 } | 2285 } |
2284 | 2286 |
2285 } // namespace | 2287 } // namespace |
2286 } // namespace cc | 2288 } // namespace cc |
OLD | NEW |