| 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 |