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

Side by Side Diff: components/scheduler/renderer/renderer_scheduler_impl_unittest.cc

Issue 2093983002: scheduler: Tell v8 about the current RAIL mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add missing gyp dependencies Created 4 years, 5 months 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
« no previous file with comments | « components/scheduler/renderer/renderer_scheduler_impl.cc ('k') | content/content_utility.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 using RendererSchedulerImpl::EstimateLongestJankFreeTaskDuration; 183 using RendererSchedulerImpl::EstimateLongestJankFreeTaskDuration;
184 184
185 RendererSchedulerImplForTest( 185 RendererSchedulerImplForTest(
186 scoped_refptr<SchedulerTqmDelegate> main_task_runner) 186 scoped_refptr<SchedulerTqmDelegate> main_task_runner)
187 : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {} 187 : RendererSchedulerImpl(main_task_runner), update_policy_count_(0) {}
188 188
189 void UpdatePolicyLocked(UpdateType update_type) override { 189 void UpdatePolicyLocked(UpdateType update_type) override {
190 update_policy_count_++; 190 update_policy_count_++;
191 RendererSchedulerImpl::UpdatePolicyLocked(update_type); 191 RendererSchedulerImpl::UpdatePolicyLocked(update_type);
192 192
193 std::string use_case = 193 std::string use_case = RendererSchedulerImpl::UseCaseToString(
194 RendererScheduler::UseCaseToString(MainThreadOnly().current_use_case); 194 MainThreadOnly().current_use_case);
195 if (MainThreadOnly().touchstart_expected_soon) { 195 if (MainThreadOnly().touchstart_expected_soon) {
196 use_cases_.push_back(use_case + " touchstart expected"); 196 use_cases_.push_back(use_case + " touchstart expected");
197 } else { 197 } else {
198 use_cases_.push_back(use_case); 198 use_cases_.push_back(use_case);
199 } 199 }
200 } 200 }
201 201
202 void EnsureUrgentPolicyUpdatePostedOnMainThread() { 202 void EnsureUrgentPolicyUpdatePostedOnMainThread() {
203 base::AutoLock lock(any_thread_lock_); 203 base::AutoLock lock(any_thread_lock_);
204 RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread( 204 RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread(
205 FROM_HERE); 205 FROM_HERE);
206 } 206 }
207 207
208 void ScheduleDelayedPolicyUpdate(base::TimeTicks now, base::TimeDelta delay) { 208 void ScheduleDelayedPolicyUpdate(base::TimeTicks now, base::TimeDelta delay) {
209 delayed_update_policy_runner_.SetDeadline(FROM_HERE, delay, now); 209 delayed_update_policy_runner_.SetDeadline(FROM_HERE, delay, now);
210 } 210 }
211 211
212 bool BeginMainFrameOnCriticalPath() { 212 bool BeginMainFrameOnCriticalPath() {
213 base::AutoLock lock(any_thread_lock_); 213 base::AutoLock lock(any_thread_lock_);
214 return AnyThread().begin_main_frame_on_critical_path; 214 return AnyThread().begin_main_frame_on_critical_path;
215 } 215 }
216 216
217 int update_policy_count_; 217 int update_policy_count_;
218 std::vector<std::string> use_cases_; 218 std::vector<std::string> use_cases_;
219 }; 219 };
220 220
221 // Lets gtest print human readable Policy values. 221 // Lets gtest print human readable Policy values.
222 ::std::ostream& operator<<(::std::ostream& os, 222 ::std::ostream& operator<<(::std::ostream& os,
223 const RendererScheduler::UseCase& use_case) { 223 const RendererSchedulerImpl::UseCase& use_case) {
224 return os << RendererScheduler::UseCaseToString(use_case); 224 return os << RendererSchedulerImpl::UseCaseToString(use_case);
225 } 225 }
226 226
227 class RendererSchedulerImplTest : public testing::Test { 227 class RendererSchedulerImplTest : public testing::Test {
228 public: 228 public:
229 using UseCase = RendererSchedulerImpl::UseCase; 229 using UseCase = RendererSchedulerImpl::UseCase;
230 230
231 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) { 231 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) {
232 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); 232 clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
233 } 233 }
234 234
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 487
488 UseCase CurrentUseCase() { 488 UseCase CurrentUseCase() {
489 return scheduler_->MainThreadOnly().current_use_case; 489 return scheduler_->MainThreadOnly().current_use_case;
490 } 490 }
491 491
492 UseCase ForceUpdatePolicyAndGetCurrentUseCase() { 492 UseCase ForceUpdatePolicyAndGetCurrentUseCase() {
493 scheduler_->ForceUpdatePolicy(); 493 scheduler_->ForceUpdatePolicy();
494 return scheduler_->MainThreadOnly().current_use_case; 494 return scheduler_->MainThreadOnly().current_use_case;
495 } 495 }
496 496
497 v8::RAILMode RAILMode() {
498 return scheduler_->MainThreadOnly().current_policy.rail_mode;
499 }
500
501 bool BeginFrameNotExpectedSoon() {
502 return scheduler_->MainThreadOnly().begin_frame_not_expected_soon;
503 }
504
497 bool TouchStartExpectedSoon() { 505 bool TouchStartExpectedSoon() {
498 return scheduler_->MainThreadOnly().touchstart_expected_soon; 506 return scheduler_->MainThreadOnly().touchstart_expected_soon;
499 } 507 }
500 508
501 bool HaveSeenABeginMainframe() { 509 bool HaveSeenABeginMainframe() {
502 return scheduler_->MainThreadOnly().have_seen_a_begin_main_frame; 510 return scheduler_->MainThreadOnly().have_seen_a_begin_main_frame;
503 } 511 }
504 512
505 bool LoadingTasksSeemExpensive() { 513 bool LoadingTasksSeemExpensive() {
506 return scheduler_->MainThreadOnly().loading_tasks_seem_expensive; 514 return scheduler_->MainThreadOnly().loading_tasks_seem_expensive;
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) { 848 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) {
841 std::vector<std::string> run_order; 849 std::vector<std::string> run_order;
842 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 850 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
843 851
844 EnableIdleTasks(); 852 EnableIdleTasks();
845 RunUntilIdle(); 853 RunUntilIdle();
846 EXPECT_THAT(run_order, 854 EXPECT_THAT(run_order,
847 testing::ElementsAre(std::string("L1"), std::string("D1"), 855 testing::ElementsAre(std::string("L1"), std::string("D1"),
848 std::string("C1"), std::string("D2"), 856 std::string("C1"), std::string("D2"),
849 std::string("C2"), std::string("I1"))); 857 std::string("C2"), std::string("I1")));
850 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 858 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
851 } 859 }
852 860
853 TEST_F(RendererSchedulerImplTest, 861 TEST_F(RendererSchedulerImplTest,
854 TestCompositorPolicy_CompositorHandlesInput_WithTouchHandler) { 862 TestCompositorPolicy_CompositorHandlesInput_WithTouchHandler) {
855 std::vector<std::string> run_order; 863 std::vector<std::string> run_order;
856 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 864 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
857 865
858 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 866 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
859 EnableIdleTasks(); 867 EnableIdleTasks();
860 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); 868 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START);
861 RunUntilIdle(); 869 RunUntilIdle();
862 EXPECT_THAT(run_order, 870 EXPECT_THAT(run_order,
863 testing::ElementsAre(std::string("L1"), std::string("D1"), 871 testing::ElementsAre(std::string("L1"), std::string("D1"),
864 std::string("D2"), std::string("I1"), 872 std::string("D2"), std::string("I1"),
865 std::string("C1"), std::string("C2"))); 873 std::string("C1"), std::string("C2")));
866 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase()); 874 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
875 CurrentUseCase());
867 } 876 }
868 877
869 TEST_F(RendererSchedulerImplTest, 878 TEST_F(RendererSchedulerImplTest,
870 TestCompositorPolicy_MainThreadHandlesInput_WithoutScrollUpdates) { 879 TestCompositorPolicy_MainThreadHandlesInput_WithoutScrollUpdates) {
871 std::vector<std::string> run_order; 880 std::vector<std::string> run_order;
872 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 881 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
873 882
874 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 883 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
875 EnableIdleTasks(); 884 EnableIdleTasks();
876 SimulateMainThreadGestureWithoutScrollUpdates(); 885 SimulateMainThreadGestureWithoutScrollUpdates();
877 RunUntilIdle(); 886 RunUntilIdle();
878 EXPECT_THAT(run_order, 887 EXPECT_THAT(run_order,
879 testing::ElementsAre(std::string("C1"), std::string("C2"), 888 testing::ElementsAre(std::string("C1"), std::string("C2"),
880 std::string("L1"), std::string("D1"), 889 std::string("L1"), std::string("D1"),
881 std::string("D2"), std::string("I1"))); 890 std::string("D2"), std::string("I1")));
882 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 891 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
883 CurrentUseCase()); 892 CurrentUseCase());
884 } 893 }
885 894
886 TEST_F(RendererSchedulerImplTest, 895 TEST_F(RendererSchedulerImplTest,
887 TestCompositorPolicy_MainThreadHandlesInput_WithoutPreventDefault) { 896 TestCompositorPolicy_MainThreadHandlesInput_WithoutPreventDefault) {
888 std::vector<std::string> run_order; 897 std::vector<std::string> run_order;
889 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 898 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
890 899
891 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 900 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
892 EnableIdleTasks(); 901 EnableIdleTasks();
893 SimulateMainThreadGestureWithoutPreventDefault(); 902 SimulateMainThreadGestureWithoutPreventDefault();
894 RunUntilIdle(); 903 RunUntilIdle();
895 EXPECT_THAT(run_order, 904 EXPECT_THAT(run_order,
896 testing::ElementsAre(std::string("L1"), std::string("D1"), 905 testing::ElementsAre(std::string("L1"), std::string("D1"),
897 std::string("D2"), std::string("I1"), 906 std::string("D2"), std::string("I1"),
898 std::string("C1"), std::string("C2"))); 907 std::string("C1"), std::string("C2")));
899 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase()); 908 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
909 CurrentUseCase());
900 } 910 }
901 911
902 TEST_F(RendererSchedulerImplTest, 912 TEST_F(RendererSchedulerImplTest,
903 TestCompositorPolicy_CompositorHandlesInput_LongGestureDuration) { 913 TestCompositorPolicy_CompositorHandlesInput_LongGestureDuration) {
904 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 914 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
905 EnableIdleTasks(); 915 EnableIdleTasks();
906 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); 916 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START);
907 917
908 base::TimeTicks loop_end_time = 918 base::TimeTicks loop_end_time =
909 clock_->NowTicks() + base::TimeDelta::FromMilliseconds( 919 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(
(...skipping 11 matching lines...) Expand all
921 } 931 }
922 932
923 std::vector<std::string> run_order; 933 std::vector<std::string> run_order;
924 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 934 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
925 935
926 RunUntilIdle(); 936 RunUntilIdle();
927 EXPECT_THAT(run_order, 937 EXPECT_THAT(run_order,
928 testing::ElementsAre(std::string("C1"), std::string("C2"), 938 testing::ElementsAre(std::string("C1"), std::string("C2"),
929 std::string("L1"), std::string("D1"), 939 std::string("L1"), std::string("D1"),
930 std::string("D2"))); 940 std::string("D2")));
931 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase()); 941 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
942 CurrentUseCase());
932 } 943 }
933 944
934 TEST_F(RendererSchedulerImplTest, 945 TEST_F(RendererSchedulerImplTest,
935 TestCompositorPolicy_CompositorHandlesInput_WithoutTouchHandler) { 946 TestCompositorPolicy_CompositorHandlesInput_WithoutTouchHandler) {
936 std::vector<std::string> run_order; 947 std::vector<std::string> run_order;
937 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 948 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
938 949
939 EnableIdleTasks(); 950 EnableIdleTasks();
940 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); 951 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START);
941 RunUntilIdle(); 952 RunUntilIdle();
942 EXPECT_THAT(run_order, 953 EXPECT_THAT(run_order,
943 testing::ElementsAre(std::string("L1"), std::string("D1"), 954 testing::ElementsAre(std::string("L1"), std::string("D1"),
944 std::string("D2"), std::string("I1"), 955 std::string("D2"), std::string("I1"),
945 std::string("C1"), std::string("C2"))); 956 std::string("C1"), std::string("C2")));
946 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase()); 957 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
958 CurrentUseCase());
947 } 959 }
948 960
949 TEST_F(RendererSchedulerImplTest, 961 TEST_F(RendererSchedulerImplTest,
950 TestCompositorPolicy_MainThreadHandlesInput_WithTouchHandler) { 962 TestCompositorPolicy_MainThreadHandlesInput_WithTouchHandler) {
951 std::vector<std::string> run_order; 963 std::vector<std::string> run_order;
952 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 964 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
953 965
954 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 966 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
955 EnableIdleTasks(); 967 EnableIdleTasks();
956 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 968 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
957 blink::WebInputEvent::GestureScrollBegin); 969 blink::WebInputEvent::GestureScrollBegin);
958 RunUntilIdle(); 970 RunUntilIdle();
959 EXPECT_THAT(run_order, 971 EXPECT_THAT(run_order,
960 testing::ElementsAre(std::string("C1"), std::string("C2"), 972 testing::ElementsAre(std::string("C1"), std::string("C2"),
961 std::string("L1"), std::string("D1"), 973 std::string("L1"), std::string("D1"),
962 std::string("D2"), std::string("I1"))); 974 std::string("D2"), std::string("I1")));
963 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 975 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
964 CurrentUseCase()); 976 CurrentUseCase());
965 scheduler_->DidHandleInputEventOnMainThread( 977 scheduler_->DidHandleInputEventOnMainThread(
966 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 978 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
967 } 979 }
968 980
969 TEST_F(RendererSchedulerImplTest, 981 TEST_F(RendererSchedulerImplTest,
970 TestCompositorPolicy_MainThreadHandlesInput_WithoutTouchHandler) { 982 TestCompositorPolicy_MainThreadHandlesInput_WithoutTouchHandler) {
971 std::vector<std::string> run_order; 983 std::vector<std::string> run_order;
972 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 984 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
973 985
974 EnableIdleTasks(); 986 EnableIdleTasks();
975 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START, 987 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START,
976 blink::WebInputEvent::GestureScrollBegin); 988 blink::WebInputEvent::GestureScrollBegin);
977 RunUntilIdle(); 989 RunUntilIdle();
978 EXPECT_THAT(run_order, 990 EXPECT_THAT(run_order,
979 testing::ElementsAre(std::string("C1"), std::string("C2"), 991 testing::ElementsAre(std::string("C1"), std::string("C2"),
980 std::string("L1"), std::string("D1"), 992 std::string("L1"), std::string("D1"),
981 std::string("D2"), std::string("I1"))); 993 std::string("D2"), std::string("I1")));
982 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 994 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
983 CurrentUseCase()); 995 CurrentUseCase());
984 scheduler_->DidHandleInputEventOnMainThread( 996 scheduler_->DidHandleInputEventOnMainThread(
985 FakeInputEvent(blink::WebInputEvent::GestureFlingStart)); 997 FakeInputEvent(blink::WebInputEvent::GestureFlingStart));
986 } 998 }
987 999
988 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) { 1000 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) {
989 std::vector<std::string> run_order; 1001 std::vector<std::string> run_order;
990 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1002 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
991 1003
992 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1004 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
993 scheduler_->DidAnimateForInputOnCompositorThread(); 1005 scheduler_->DidAnimateForInputOnCompositorThread();
994 // Note DidAnimateForInputOnCompositorThread does not by itself trigger a 1006 // Note DidAnimateForInputOnCompositorThread does not by itself trigger a
995 // policy update. 1007 // policy update.
996 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, 1008 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
997 ForceUpdatePolicyAndGetCurrentUseCase()); 1009 ForceUpdatePolicyAndGetCurrentUseCase());
998 EnableIdleTasks(); 1010 EnableIdleTasks();
999 RunUntilIdle(); 1011 RunUntilIdle();
1000 EXPECT_THAT(run_order, 1012 EXPECT_THAT(run_order,
1001 testing::ElementsAre(std::string("D1"), std::string("D2"), 1013 testing::ElementsAre(std::string("D1"), std::string("D2"),
1002 std::string("I1"), std::string("C1"), 1014 std::string("I1"), std::string("C1"),
1003 std::string("C2"))); 1015 std::string("C2")));
1004 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase()); 1016 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
1017 CurrentUseCase());
1005 } 1018 }
1006 1019
1007 TEST_F(RendererSchedulerImplTest, Navigation_ResetsTaskCostEstimations) { 1020 TEST_F(RendererSchedulerImplTest, Navigation_ResetsTaskCostEstimations) {
1008 std::vector<std::string> run_order; 1021 std::vector<std::string> run_order;
1009 1022
1010 SimulateExpensiveTasks(timer_task_runner_); 1023 SimulateExpensiveTasks(timer_task_runner_);
1011 scheduler_->OnNavigationStarted(); 1024 scheduler_->OnNavigationStarted();
1012 PostTestTasks(&run_order, "C1 T1"); 1025 PostTestTasks(&run_order, "C1 T1");
1013 1026
1014 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START, 1027 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START,
(...skipping 12 matching lines...) Expand all
1027 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1040 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1028 SimulateExpensiveTasks(timer_task_runner_); 1041 SimulateExpensiveTasks(timer_task_runner_);
1029 DoMainFrame(); 1042 DoMainFrame();
1030 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1043 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1031 blink::WebInputEvent::GestureScrollUpdate); 1044 blink::WebInputEvent::GestureScrollUpdate);
1032 1045
1033 PostTestTasks(&run_order, "C1 T1"); 1046 PostTestTasks(&run_order, "C1 T1");
1034 1047
1035 RunUntilIdle(); 1048 RunUntilIdle();
1036 EXPECT_FALSE(TouchStartExpectedSoon()); 1049 EXPECT_FALSE(TouchStartExpectedSoon());
1037 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()); 1050 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_GESTURE,
1051 CurrentUseCase());
1038 1052
1039 EXPECT_THAT(run_order, testing::ElementsAre(std::string("C1"))); 1053 EXPECT_THAT(run_order, testing::ElementsAre(std::string("C1")));
1040 } 1054 }
1041 1055
1042 TEST_F(RendererSchedulerImplTest, 1056 TEST_F(RendererSchedulerImplTest,
1043 ExpensiveTimersDoRunWhenMainThreadInputHandling) { 1057 ExpensiveTimersDoRunWhenMainThreadInputHandling) {
1044 std::vector<std::string> run_order; 1058 std::vector<std::string> run_order;
1045 1059
1046 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1060 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1047 SimulateExpensiveTasks(timer_task_runner_); 1061 SimulateExpensiveTasks(timer_task_runner_);
1048 DoMainFrame(); 1062 DoMainFrame();
1049 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1063 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1050 blink::WebInputEvent::Undefined); 1064 blink::WebInputEvent::Undefined);
1051 1065
1052 PostTestTasks(&run_order, "C1 T1"); 1066 PostTestTasks(&run_order, "C1 T1");
1053 1067
1054 RunUntilIdle(); 1068 RunUntilIdle();
1055 EXPECT_FALSE(TouchStartExpectedSoon()); 1069 EXPECT_FALSE(TouchStartExpectedSoon());
1056 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1070 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1057 CurrentUseCase()); 1071 CurrentUseCase());
1058 1072
1059 EXPECT_THAT(run_order, 1073 EXPECT_THAT(run_order,
1060 testing::ElementsAre(std::string("C1"), std::string("T1"))); 1074 testing::ElementsAre(std::string("C1"), std::string("T1")));
1061 } 1075 }
1062 1076
1063 TEST_F(RendererSchedulerImplTest, 1077 TEST_F(RendererSchedulerImplTest,
1064 ExpensiveTimersDoRunWhenMainThreadScrolling_AndOnCriticalPath) { 1078 ExpensiveTimersDoRunWhenMainThreadScrolling_AndOnCriticalPath) {
1065 std::vector<std::string> run_order; 1079 std::vector<std::string> run_order;
1066 1080
1067 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1081 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1068 SimulateExpensiveTasks(timer_task_runner_); 1082 SimulateExpensiveTasks(timer_task_runner_);
1069 DoMainFrameOnCriticalPath(); 1083 DoMainFrameOnCriticalPath();
1070 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1084 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1071 blink::WebInputEvent::GestureScrollBegin); 1085 blink::WebInputEvent::GestureScrollBegin);
1072 1086
1073 PostTestTasks(&run_order, "C1 T1"); 1087 PostTestTasks(&run_order, "C1 T1");
1074 1088
1075 RunUntilIdle(); 1089 RunUntilIdle();
1076 EXPECT_FALSE(TouchStartExpectedSoon()); 1090 EXPECT_FALSE(TouchStartExpectedSoon());
1077 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1091 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1078 CurrentUseCase()); 1092 CurrentUseCase());
1079 1093
1080 EXPECT_THAT(run_order, 1094 EXPECT_THAT(run_order,
1081 testing::ElementsAre(std::string("C1"), std::string("T1"))); 1095 testing::ElementsAre(std::string("C1"), std::string("T1")));
1082 } 1096 }
1083 1097
1084 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicy_Compositor) { 1098 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicy_Compositor) {
1085 std::vector<std::string> run_order; 1099 std::vector<std::string> run_order;
1086 PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2"); 1100 PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2");
1087 1101
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 scheduler_->OnNavigationStarted(); 1191 scheduler_->OnNavigationStarted();
1178 EnableIdleTasks(); 1192 EnableIdleTasks();
1179 RunUntilIdle(); 1193 RunUntilIdle();
1180 1194
1181 // In loading policy, loading tasks are prioritized other others. 1195 // In loading policy, loading tasks are prioritized other others.
1182 std::string loading_policy_expected[] = { 1196 std::string loading_policy_expected[] = {
1183 std::string("D1"), std::string("L1"), std::string("D2"), 1197 std::string("D1"), std::string("L1"), std::string("D2"),
1184 std::string("L2"), std::string("C1"), std::string("T1"), 1198 std::string("L2"), std::string("C1"), std::string("T1"),
1185 std::string("C2"), std::string("T2"), std::string("I1")}; 1199 std::string("C2"), std::string("T2"), std::string("I1")};
1186 EXPECT_THAT(run_order, testing::ElementsAreArray(loading_policy_expected)); 1200 EXPECT_THAT(run_order, testing::ElementsAreArray(loading_policy_expected));
1187 EXPECT_EQ(RendererScheduler::UseCase::LOADING, CurrentUseCase()); 1201 EXPECT_EQ(RendererSchedulerImpl::UseCase::LOADING, CurrentUseCase());
1188 1202
1189 // Advance 15s and try again, the loading policy should have ended and the 1203 // Advance 15s and try again, the loading policy should have ended and the
1190 // task order should return to the NONE use case where loading tasks are no 1204 // task order should return to the NONE use case where loading tasks are no
1191 // longer prioritized. 1205 // longer prioritized.
1192 clock_->Advance(base::TimeDelta::FromMilliseconds(150000)); 1206 clock_->Advance(base::TimeDelta::FromMilliseconds(150000));
1193 run_order.clear(); 1207 run_order.clear();
1194 PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2"); 1208 PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2");
1195 EnableIdleTasks(); 1209 EnableIdleTasks();
1196 RunUntilIdle(); 1210 RunUntilIdle();
1197 1211
1198 std::string default_order_expected[] = { 1212 std::string default_order_expected[] = {
1199 std::string("D1"), std::string("C1"), std::string("T1"), 1213 std::string("D1"), std::string("C1"), std::string("T1"),
1200 std::string("L1"), std::string("D2"), std::string("C2"), 1214 std::string("L1"), std::string("D2"), std::string("C2"),
1201 std::string("T2"), std::string("L2"), std::string("I1")}; 1215 std::string("T2"), std::string("L2"), std::string("I1")};
1202 EXPECT_THAT(run_order, testing::ElementsAreArray(default_order_expected)); 1216 EXPECT_THAT(run_order, testing::ElementsAreArray(default_order_expected));
1203 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 1217 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1204 } 1218 }
1205 1219
1206 TEST_F(RendererSchedulerImplTest, 1220 TEST_F(RendererSchedulerImplTest,
1207 EventConsumedOnCompositorThread_IgnoresMouseMove_WhenMouseUp) { 1221 EventConsumedOnCompositorThread_IgnoresMouseMove_WhenMouseUp) {
1208 std::vector<std::string> run_order; 1222 std::vector<std::string> run_order;
1209 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1223 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1210 1224
1211 EnableIdleTasks(); 1225 EnableIdleTasks();
1212 scheduler_->DidHandleInputEventOnCompositorThread( 1226 scheduler_->DidHandleInputEventOnCompositorThread(
1213 FakeInputEvent(blink::WebInputEvent::MouseMove), 1227 FakeInputEvent(blink::WebInputEvent::MouseMove),
1214 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1228 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1215 RunUntilIdle(); 1229 RunUntilIdle();
1216 // Note compositor tasks are not prioritized. 1230 // Note compositor tasks are not prioritized.
1217 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 1231 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1218 EXPECT_THAT(run_order, 1232 EXPECT_THAT(run_order,
1219 testing::ElementsAre(std::string("D1"), std::string("C1"), 1233 testing::ElementsAre(std::string("D1"), std::string("C1"),
1220 std::string("D2"), std::string("C2"), 1234 std::string("D2"), std::string("C2"),
1221 std::string("I1"))); 1235 std::string("I1")));
1222 } 1236 }
1223 1237
1224 TEST_F(RendererSchedulerImplTest, 1238 TEST_F(RendererSchedulerImplTest,
1225 EventForwardedToMainThread_IgnoresMouseMove_WhenMouseUp) { 1239 EventForwardedToMainThread_IgnoresMouseMove_WhenMouseUp) {
1226 std::vector<std::string> run_order; 1240 std::vector<std::string> run_order;
1227 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1241 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1228 1242
1229 EnableIdleTasks(); 1243 EnableIdleTasks();
1230 scheduler_->DidHandleInputEventOnCompositorThread( 1244 scheduler_->DidHandleInputEventOnCompositorThread(
1231 FakeInputEvent(blink::WebInputEvent::MouseMove), 1245 FakeInputEvent(blink::WebInputEvent::MouseMove),
1232 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1246 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1233 RunUntilIdle(); 1247 RunUntilIdle();
1234 // Note compositor tasks are not prioritized. 1248 // Note compositor tasks are not prioritized.
1235 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 1249 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1236 EXPECT_THAT(run_order, 1250 EXPECT_THAT(run_order,
1237 testing::ElementsAre(std::string("D1"), std::string("C1"), 1251 testing::ElementsAre(std::string("D1"), std::string("C1"),
1238 std::string("D2"), std::string("C2"), 1252 std::string("D2"), std::string("C2"),
1239 std::string("I1"))); 1253 std::string("I1")));
1240 } 1254 }
1241 1255
1242 TEST_F(RendererSchedulerImplTest, 1256 TEST_F(RendererSchedulerImplTest,
1243 EventConsumedOnCompositorThread_MouseMove_WhenMouseDown) { 1257 EventConsumedOnCompositorThread_MouseMove_WhenMouseDown) {
1244 std::vector<std::string> run_order; 1258 std::vector<std::string> run_order;
1245 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1259 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1300 EnableIdleTasks(); 1314 EnableIdleTasks();
1301 scheduler_->DidHandleInputEventOnCompositorThread( 1315 scheduler_->DidHandleInputEventOnCompositorThread(
1302 FakeInputEvent(blink::WebInputEvent::MouseWheel), 1316 FakeInputEvent(blink::WebInputEvent::MouseWheel),
1303 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1317 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1304 RunUntilIdle(); 1318 RunUntilIdle();
1305 // Note compositor tasks are prioritized. 1319 // Note compositor tasks are prioritized.
1306 EXPECT_THAT(run_order, 1320 EXPECT_THAT(run_order,
1307 testing::ElementsAre(std::string("C1"), std::string("C2"), 1321 testing::ElementsAre(std::string("C1"), std::string("C2"),
1308 std::string("D1"), std::string("D2"), 1322 std::string("D1"), std::string("D2"),
1309 std::string("I1"))); 1323 std::string("I1")));
1310 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1324 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1311 CurrentUseCase()); 1325 CurrentUseCase());
1312 } 1326 }
1313 1327
1314 TEST_F(RendererSchedulerImplTest, 1328 TEST_F(RendererSchedulerImplTest,
1315 EventConsumedOnCompositorThread_IgnoresKeyboardEvents) { 1329 EventConsumedOnCompositorThread_IgnoresKeyboardEvents) {
1316 std::vector<std::string> run_order; 1330 std::vector<std::string> run_order;
1317 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1331 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1318 1332
1319 EnableIdleTasks(); 1333 EnableIdleTasks();
1320 scheduler_->DidHandleInputEventOnCompositorThread( 1334 scheduler_->DidHandleInputEventOnCompositorThread(
1321 FakeInputEvent(blink::WebInputEvent::KeyDown), 1335 FakeInputEvent(blink::WebInputEvent::KeyDown),
1322 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1336 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1323 RunUntilIdle(); 1337 RunUntilIdle();
1324 // Note compositor tasks are not prioritized. 1338 // Note compositor tasks are not prioritized.
1325 EXPECT_THAT(run_order, 1339 EXPECT_THAT(run_order,
1326 testing::ElementsAre(std::string("D1"), std::string("C1"), 1340 testing::ElementsAre(std::string("D1"), std::string("C1"),
1327 std::string("D2"), std::string("C2"), 1341 std::string("D2"), std::string("C2"),
1328 std::string("I1"))); 1342 std::string("I1")));
1329 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 1343 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1330 } 1344 }
1331 1345
1332 TEST_F(RendererSchedulerImplTest, 1346 TEST_F(RendererSchedulerImplTest,
1333 EventForwardedToMainThread_IgnoresKeyboardEvents) { 1347 EventForwardedToMainThread_IgnoresKeyboardEvents) {
1334 std::vector<std::string> run_order; 1348 std::vector<std::string> run_order;
1335 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1349 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1336 1350
1337 EnableIdleTasks(); 1351 EnableIdleTasks();
1338 scheduler_->DidHandleInputEventOnCompositorThread( 1352 scheduler_->DidHandleInputEventOnCompositorThread(
1339 FakeInputEvent(blink::WebInputEvent::KeyDown), 1353 FakeInputEvent(blink::WebInputEvent::KeyDown),
1340 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1354 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1341 RunUntilIdle(); 1355 RunUntilIdle();
1342 // Note compositor tasks are not prioritized. 1356 // Note compositor tasks are not prioritized.
1343 EXPECT_THAT(run_order, 1357 EXPECT_THAT(run_order,
1344 testing::ElementsAre(std::string("D1"), std::string("C1"), 1358 testing::ElementsAre(std::string("D1"), std::string("C1"),
1345 std::string("D2"), std::string("C2"), 1359 std::string("D2"), std::string("C2"),
1346 std::string("I1"))); 1360 std::string("I1")));
1347 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 1361 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1348 // Note compositor tasks are not prioritized. 1362 // Note compositor tasks are not prioritized.
1349 scheduler_->DidHandleInputEventOnMainThread( 1363 scheduler_->DidHandleInputEventOnMainThread(
1350 FakeInputEvent(blink::WebInputEvent::KeyDown)); 1364 FakeInputEvent(blink::WebInputEvent::KeyDown));
1351 } 1365 }
1352 1366
1353 TEST_F(RendererSchedulerImplTest, 1367 TEST_F(RendererSchedulerImplTest,
1354 TestMainthreadScrollingUseCaseDoesNotStarveDefaultTasks) { 1368 TestMainthreadScrollingUseCaseDoesNotStarveDefaultTasks) {
1355 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START, 1369 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START,
1356 blink::WebInputEvent::GestureScrollBegin); 1370 blink::WebInputEvent::GestureScrollBegin);
1357 EnableIdleTasks(); 1371 EnableIdleTasks();
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after
2305 EXPECT_THAT(run_order, 2319 EXPECT_THAT(run_order,
2306 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2320 testing::ElementsAre(std::string("L1"), std::string("D1")));
2307 2321
2308 // Emit a BeginMainFrame, and the loading task should get blocked. 2322 // Emit a BeginMainFrame, and the loading task should get blocked.
2309 DoMainFrame(); 2323 DoMainFrame();
2310 run_order.clear(); 2324 run_order.clear();
2311 2325
2312 PostTestTasks(&run_order, "L1 D1"); 2326 PostTestTasks(&run_order, "L1 D1");
2313 RunUntilIdle(); 2327 RunUntilIdle();
2314 2328
2315 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 2329 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
2316 EXPECT_TRUE(HaveSeenABeginMainframe()); 2330 EXPECT_TRUE(HaveSeenABeginMainframe());
2317 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2331 EXPECT_TRUE(LoadingTasksSeemExpensive());
2318 EXPECT_FALSE(TimerTasksSeemExpensive()); 2332 EXPECT_FALSE(TimerTasksSeemExpensive());
2319 EXPECT_TRUE(TouchStartExpectedSoon()); 2333 EXPECT_TRUE(TouchStartExpectedSoon());
2320 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2334 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2335 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2321 } 2336 }
2322 2337
2323 TEST_F(RendererSchedulerImplTest, 2338 TEST_F(RendererSchedulerImplTest,
2324 ExpensiveLoadingTasksNotBlockedIfNoTouchHandler) { 2339 ExpensiveLoadingTasksNotBlockedIfNoTouchHandler) {
2325 std::vector<std::string> run_order; 2340 std::vector<std::string> run_order;
2326 2341
2327 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(false); 2342 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(false);
2328 DoMainFrame(); 2343 DoMainFrame();
2329 SimulateExpensiveTasks(loading_task_runner_); 2344 SimulateExpensiveTasks(loading_task_runner_);
2330 ForceTouchStartToBeExpectedSoon(); 2345 ForceTouchStartToBeExpectedSoon();
2331 PostTestTasks(&run_order, "L1 D1"); 2346 PostTestTasks(&run_order, "L1 D1");
2332 RunUntilIdle(); 2347 RunUntilIdle();
2333 2348
2334 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2349 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2335 EXPECT_TRUE(HaveSeenABeginMainframe()); 2350 EXPECT_TRUE(HaveSeenABeginMainframe());
2336 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2351 EXPECT_TRUE(LoadingTasksSeemExpensive());
2337 EXPECT_FALSE(TimerTasksSeemExpensive()); 2352 EXPECT_FALSE(TimerTasksSeemExpensive());
2338 EXPECT_FALSE(TouchStartExpectedSoon()); 2353 EXPECT_FALSE(TouchStartExpectedSoon());
2339 EXPECT_THAT(run_order, 2354 EXPECT_THAT(run_order,
2340 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2355 testing::ElementsAre(std::string("L1"), std::string("D1")));
2356 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, RAILMode());
2341 } 2357 }
2342 2358
2343 TEST_F(RendererSchedulerImplTest, 2359 TEST_F(RendererSchedulerImplTest,
2344 ExpensiveTimerTaskBlocked_UseCase_NONE_PreviousCompositorGesture) { 2360 ExpensiveTimerTaskBlocked_UseCase_NONE_PreviousCompositorGesture) {
2345 std::vector<std::string> run_order; 2361 std::vector<std::string> run_order;
2346 2362
2347 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2363 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2348 DoMainFrame(); 2364 DoMainFrame();
2349 SimulateExpensiveTasks(timer_task_runner_); 2365 SimulateExpensiveTasks(timer_task_runner_);
2350 ForceTouchStartToBeExpectedSoon(); 2366 ForceTouchStartToBeExpectedSoon();
2351 2367
2352 PostTestTasks(&run_order, "T1 D1"); 2368 PostTestTasks(&run_order, "T1 D1");
2353 RunUntilIdle(); 2369 RunUntilIdle();
2354 2370
2355 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2371 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2356 EXPECT_TRUE(HaveSeenABeginMainframe()); 2372 EXPECT_TRUE(HaveSeenABeginMainframe());
2357 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2373 EXPECT_FALSE(LoadingTasksSeemExpensive());
2358 EXPECT_TRUE(TimerTasksSeemExpensive()); 2374 EXPECT_TRUE(TimerTasksSeemExpensive());
2359 EXPECT_TRUE(TouchStartExpectedSoon()); 2375 EXPECT_TRUE(TouchStartExpectedSoon());
2360 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2376 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2377 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2361 } 2378 }
2362 2379
2363 TEST_F(RendererSchedulerImplTest, 2380 TEST_F(RendererSchedulerImplTest,
2364 ExpensiveTimerTaskNotBlocked_UseCase_NONE_PreviousMainThreadGesture) { 2381 ExpensiveTimerTaskNotBlocked_UseCase_NONE_PreviousMainThreadGesture) {
2365 std::vector<std::string> run_order; 2382 std::vector<std::string> run_order;
2366 2383
2367 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2384 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2368 DoMainFrame(); 2385 DoMainFrame();
2369 SimulateExpensiveTasks(timer_task_runner_); 2386 SimulateExpensiveTasks(timer_task_runner_);
2370 2387
(...skipping 14 matching lines...) Expand all
2385 PostTestTasks(&run_order, "T1 D1"); 2402 PostTestTasks(&run_order, "T1 D1");
2386 RunUntilIdle(); 2403 RunUntilIdle();
2387 2404
2388 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2405 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2389 EXPECT_TRUE(HaveSeenABeginMainframe()); 2406 EXPECT_TRUE(HaveSeenABeginMainframe());
2390 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2407 EXPECT_FALSE(LoadingTasksSeemExpensive());
2391 EXPECT_TRUE(TimerTasksSeemExpensive()); 2408 EXPECT_TRUE(TimerTasksSeemExpensive());
2392 EXPECT_TRUE(TouchStartExpectedSoon()); 2409 EXPECT_TRUE(TouchStartExpectedSoon());
2393 EXPECT_THAT(run_order, 2410 EXPECT_THAT(run_order,
2394 testing::ElementsAre(std::string("T1"), std::string("D1"))); 2411 testing::ElementsAre(std::string("T1"), std::string("D1")));
2412 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, RAILMode());
2395 } 2413 }
2396 2414
2397 TEST_F(RendererSchedulerImplTest, 2415 TEST_F(RendererSchedulerImplTest,
2398 ExpensiveTimerTaskBlocked_UseCase_COMPOSITOR_GESTURE) { 2416 ExpensiveTimerTaskBlocked_UseCase_COMPOSITOR_GESTURE) {
2399 std::vector<std::string> run_order; 2417 std::vector<std::string> run_order;
2400 2418
2401 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2419 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2402 DoMainFrame(); 2420 DoMainFrame();
2403 SimulateExpensiveTasks(timer_task_runner_); 2421 SimulateExpensiveTasks(timer_task_runner_);
2404 ForceTouchStartToBeExpectedSoon(); 2422 ForceTouchStartToBeExpectedSoon();
2405 scheduler_->DidAnimateForInputOnCompositorThread(); 2423 scheduler_->DidAnimateForInputOnCompositorThread();
2406 2424
2407 PostTestTasks(&run_order, "T1 D1"); 2425 PostTestTasks(&run_order, "T1 D1");
2408 RunUntilIdle(); 2426 RunUntilIdle();
2409 2427
2410 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE, 2428 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE,
2411 ForceUpdatePolicyAndGetCurrentUseCase()); 2429 ForceUpdatePolicyAndGetCurrentUseCase());
2412 EXPECT_TRUE(HaveSeenABeginMainframe()); 2430 EXPECT_TRUE(HaveSeenABeginMainframe());
2413 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2431 EXPECT_FALSE(LoadingTasksSeemExpensive());
2414 EXPECT_TRUE(TimerTasksSeemExpensive()); 2432 EXPECT_TRUE(TimerTasksSeemExpensive());
2415 EXPECT_TRUE(TouchStartExpectedSoon()); 2433 EXPECT_TRUE(TouchStartExpectedSoon());
2416 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2434 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2435 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2417 } 2436 }
2418 2437
2419 TEST_F(RendererSchedulerImplTest, 2438 TEST_F(RendererSchedulerImplTest,
2420 ExpensiveTimerTaskNotBlockedIfDissalowed_UseCase_COMPOSITOR_GESTURE) { 2439 ExpensiveTimerTaskNotBlockedIfDisallowed_UseCase_COMPOSITOR_GESTURE) {
2421 std::vector<std::string> run_order; 2440 std::vector<std::string> run_order;
2422 2441
2423 scheduler_->SetExpensiveTaskBlockingAllowed(false); 2442 scheduler_->SetExpensiveTaskBlockingAllowed(false);
2424 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2443 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2425 DoMainFrame(); 2444 DoMainFrame();
2426 SimulateExpensiveTasks(timer_task_runner_); 2445 SimulateExpensiveTasks(timer_task_runner_);
2427 ForceTouchStartToBeExpectedSoon(); 2446 ForceTouchStartToBeExpectedSoon();
2428 scheduler_->DidAnimateForInputOnCompositorThread(); 2447 scheduler_->DidAnimateForInputOnCompositorThread();
2429 2448
2430 PostTestTasks(&run_order, "T1 D1"); 2449 PostTestTasks(&run_order, "T1 D1");
2431 RunUntilIdle(); 2450 RunUntilIdle();
2432 2451
2433 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE, 2452 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE,
2434 ForceUpdatePolicyAndGetCurrentUseCase()); 2453 ForceUpdatePolicyAndGetCurrentUseCase());
2435 EXPECT_TRUE(HaveSeenABeginMainframe()); 2454 EXPECT_TRUE(HaveSeenABeginMainframe());
2436 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2455 EXPECT_FALSE(LoadingTasksSeemExpensive());
2437 EXPECT_TRUE(TimerTasksSeemExpensive()); 2456 EXPECT_TRUE(TimerTasksSeemExpensive());
2438 EXPECT_TRUE(TouchStartExpectedSoon()); 2457 EXPECT_TRUE(TouchStartExpectedSoon());
2439 EXPECT_THAT(run_order, testing::ElementsAre(std::string("T1"), 2458 EXPECT_THAT(run_order, testing::ElementsAre(std::string("T1"),
2440 std::string("D1"))); 2459 std::string("D1")));
2460 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2441 } 2461 }
2442 2462
2443 TEST_F(RendererSchedulerImplTest, 2463 TEST_F(RendererSchedulerImplTest,
2444 ExpensiveTimerTaskBlocked_EvenIfBeginMainFrameNotExpectedSoon) { 2464 ExpensiveTimerTaskBlocked_EvenIfBeginMainFrameNotExpectedSoon) {
2445 std::vector<std::string> run_order; 2465 std::vector<std::string> run_order;
2446 2466
2447 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2467 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2448 DoMainFrame(); 2468 DoMainFrame();
2449 SimulateExpensiveTasks(timer_task_runner_); 2469 SimulateExpensiveTasks(timer_task_runner_);
2450 ForceTouchStartToBeExpectedSoon(); 2470 ForceTouchStartToBeExpectedSoon();
2451 scheduler_->BeginFrameNotExpectedSoon(); 2471 scheduler_->BeginFrameNotExpectedSoon();
2452 2472
2453 PostTestTasks(&run_order, "T1 D1"); 2473 PostTestTasks(&run_order, "T1 D1");
2454 RunUntilIdle(); 2474 RunUntilIdle();
2455 2475
2456 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2476 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2457 EXPECT_TRUE(HaveSeenABeginMainframe()); 2477 EXPECT_TRUE(HaveSeenABeginMainframe());
2458 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2478 EXPECT_FALSE(LoadingTasksSeemExpensive());
2459 EXPECT_TRUE(TimerTasksSeemExpensive()); 2479 EXPECT_TRUE(TimerTasksSeemExpensive());
2460 EXPECT_TRUE(TouchStartExpectedSoon()); 2480 EXPECT_TRUE(TouchStartExpectedSoon());
2461 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2481 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2482 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2462 } 2483 }
2463 2484
2464 TEST_F(RendererSchedulerImplTest, 2485 TEST_F(RendererSchedulerImplTest,
2465 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) { 2486 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) {
2466 std::vector<std::string> run_order; 2487 std::vector<std::string> run_order;
2467 2488
2468 DoMainFrame(); 2489 DoMainFrame();
2469 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2490 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2470 SimulateExpensiveTasks(loading_task_runner_); 2491 SimulateExpensiveTasks(loading_task_runner_);
2471 ForceTouchStartToBeExpectedSoon(); 2492 ForceTouchStartToBeExpectedSoon();
2472 scheduler_->AddPendingNavigation( 2493 scheduler_->AddPendingNavigation(
2473 blink::WebScheduler::NavigatingFrameType::kChildFrame); 2494 blink::WebScheduler::NavigatingFrameType::kChildFrame);
2474 2495
2475 PostTestTasks(&run_order, "L1 D1"); 2496 PostTestTasks(&run_order, "L1 D1");
2476 RunUntilIdle(); 2497 RunUntilIdle();
2477 2498
2478 // The expensive loading task gets blocked. 2499 // The expensive loading task gets blocked.
2479 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2500 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2501 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2480 } 2502 }
2481 2503
2482 TEST_F(RendererSchedulerImplTest, 2504 TEST_F(RendererSchedulerImplTest,
2483 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) { 2505 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) {
2484 std::vector<std::string> run_order; 2506 std::vector<std::string> run_order;
2485 2507
2486 DoMainFrame(); 2508 DoMainFrame();
2487 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2509 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2488 SimulateExpensiveTasks(loading_task_runner_); 2510 SimulateExpensiveTasks(loading_task_runner_);
2489 ForceTouchStartToBeExpectedSoon(); 2511 ForceTouchStartToBeExpectedSoon();
(...skipping 14 matching lines...) Expand all
2504 2526
2505 // After the nagigation has been cancelled, the expensive loading tasks should 2527 // After the nagigation has been cancelled, the expensive loading tasks should
2506 // get blocked. 2528 // get blocked.
2507 scheduler_->RemovePendingNavigation( 2529 scheduler_->RemovePendingNavigation(
2508 blink::WebScheduler::NavigatingFrameType::kMainFrame); 2530 blink::WebScheduler::NavigatingFrameType::kMainFrame);
2509 run_order.clear(); 2531 run_order.clear();
2510 2532
2511 PostTestTasks(&run_order, "L1 D1"); 2533 PostTestTasks(&run_order, "L1 D1");
2512 RunUntilIdle(); 2534 RunUntilIdle();
2513 2535
2514 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 2536 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
2515 EXPECT_TRUE(HaveSeenABeginMainframe()); 2537 EXPECT_TRUE(HaveSeenABeginMainframe());
2516 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2538 EXPECT_TRUE(LoadingTasksSeemExpensive());
2517 EXPECT_FALSE(TimerTasksSeemExpensive()); 2539 EXPECT_FALSE(TimerTasksSeemExpensive());
2518 EXPECT_TRUE(TouchStartExpectedSoon()); 2540 EXPECT_TRUE(TouchStartExpectedSoon());
2519 EXPECT_EQ(0, NavigationTaskExpectedCount()); 2541 EXPECT_EQ(0, NavigationTaskExpectedCount());
2520 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2542 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2543 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2521 } 2544 }
2522 2545
2523 TEST_F( 2546 TEST_F(
2524 RendererSchedulerImplTest, 2547 RendererSchedulerImplTest,
2525 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) { 2548 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) {
2526 std::vector<std::string> run_order; 2549 std::vector<std::string> run_order;
2527 2550
2528 DoMainFrame(); 2551 DoMainFrame();
2529 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2552 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2530 SimulateExpensiveTasks(loading_task_runner_); 2553 SimulateExpensiveTasks(loading_task_runner_);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2566 2589
2567 2590
2568 run_order.clear(); 2591 run_order.clear();
2569 scheduler_->RemovePendingNavigation( 2592 scheduler_->RemovePendingNavigation(
2570 blink::WebScheduler::NavigatingFrameType::kMainFrame); 2593 blink::WebScheduler::NavigatingFrameType::kMainFrame);
2571 // Navigation task expected ref count is now zero, the expensive loading tasks 2594 // Navigation task expected ref count is now zero, the expensive loading tasks
2572 // should get blocked. 2595 // should get blocked.
2573 PostTestTasks(&run_order, "L1 D1"); 2596 PostTestTasks(&run_order, "L1 D1");
2574 RunUntilIdle(); 2597 RunUntilIdle();
2575 2598
2576 EXPECT_EQ(RendererScheduler::UseCase::NONE, CurrentUseCase()); 2599 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
2577 EXPECT_TRUE(HaveSeenABeginMainframe()); 2600 EXPECT_TRUE(HaveSeenABeginMainframe());
2578 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2601 EXPECT_TRUE(LoadingTasksSeemExpensive());
2579 EXPECT_FALSE(TimerTasksSeemExpensive()); 2602 EXPECT_FALSE(TimerTasksSeemExpensive());
2580 EXPECT_TRUE(TouchStartExpectedSoon()); 2603 EXPECT_TRUE(TouchStartExpectedSoon());
2581 EXPECT_EQ(0, NavigationTaskExpectedCount()); 2604 EXPECT_EQ(0, NavigationTaskExpectedCount());
2582 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2605 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1")));
2606 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
2583 } 2607 }
2584 2608
2585 TEST_F(RendererSchedulerImplTest, 2609 TEST_F(RendererSchedulerImplTest,
2586 ExpensiveLoadingTasksNotBlockedDuringMainThreadGestures) { 2610 ExpensiveLoadingTasksNotBlockedDuringMainThreadGestures) {
2587 std::vector<std::string> run_order; 2611 std::vector<std::string> run_order;
2588 2612
2589 SimulateExpensiveTasks(loading_task_runner_); 2613 SimulateExpensiveTasks(loading_task_runner_);
2590 2614
2591 // Loading tasks should not be disabled during main thread user interactions. 2615 // Loading tasks should not be disabled during main thread user interactions.
2592 PostTestTasks(&run_order, "C1 L1"); 2616 PostTestTasks(&run_order, "C1 L1");
2593 2617
2594 // Trigger main_thread_gesture UseCase 2618 // Trigger main_thread_gesture UseCase
2595 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 2619 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
2596 blink::WebInputEvent::GestureScrollBegin); 2620 blink::WebInputEvent::GestureScrollBegin);
2597 RunUntilIdle(); 2621 RunUntilIdle();
2598 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 2622 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
2599 CurrentUseCase()); 2623 CurrentUseCase());
2600 2624
2601 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2625 EXPECT_TRUE(LoadingTasksSeemExpensive());
2602 EXPECT_FALSE(TimerTasksSeemExpensive()); 2626 EXPECT_FALSE(TimerTasksSeemExpensive());
2603 EXPECT_THAT(run_order, 2627 EXPECT_THAT(run_order,
2604 testing::ElementsAre(std::string("C1"), std::string("L1"))); 2628 testing::ElementsAre(std::string("C1"), std::string("L1")));
2629 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, RAILMode());
2605 } 2630 }
2606 2631
2607 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) { 2632 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) {
2608 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2633 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2609 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 2634 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
2610 blink::WebInputEvent::TouchMove); 2635 blink::WebInputEvent::TouchMove);
2611 RunUntilIdle(); 2636 RunUntilIdle();
2612 for (int i = 0; i < 20; i++) { 2637 for (int i = 0; i < 20; i++) {
2613 simulate_timer_task_ran_ = false; 2638 simulate_timer_task_ran_ = false;
2614 2639
2615 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create( 2640 cc::BeginFrameArgs begin_frame_args = cc::BeginFrameArgs::Create(
2616 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(), 2641 BEGINFRAME_FROM_HERE, clock_->NowTicks(), base::TimeTicks(),
2617 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL); 2642 base::TimeDelta::FromMilliseconds(16), cc::BeginFrameArgs::NORMAL);
2618 begin_frame_args.on_critical_path = false; 2643 begin_frame_args.on_critical_path = false;
2619 scheduler_->WillBeginFrame(begin_frame_args); 2644 scheduler_->WillBeginFrame(begin_frame_args);
2620 2645
2621 compositor_task_runner_->PostTask( 2646 compositor_task_runner_->PostTask(
2622 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: 2647 FROM_HERE, base::Bind(&RendererSchedulerImplTest::
2623 SimulateMainThreadInputHandlingCompositorTask, 2648 SimulateMainThreadInputHandlingCompositorTask,
2624 base::Unretained(this), 2649 base::Unretained(this),
2625 base::TimeDelta::FromMilliseconds(8))); 2650 base::TimeDelta::FromMilliseconds(8)));
2626 timer_task_runner_->PostTask( 2651 timer_task_runner_->PostTask(
2627 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, 2652 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask,
2628 base::Unretained(this), 2653 base::Unretained(this),
2629 base::TimeDelta::FromMilliseconds(4))); 2654 base::TimeDelta::FromMilliseconds(4)));
2630 2655
2631 RunUntilIdle(); 2656 RunUntilIdle();
2632 EXPECT_TRUE(simulate_timer_task_ran_) << " i = " << i; 2657 EXPECT_TRUE(simulate_timer_task_ran_) << " i = " << i;
2633 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 2658 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
2634 CurrentUseCase()) 2659 CurrentUseCase())
2635 << " i = " << i; 2660 << " i = " << i;
2636 EXPECT_FALSE(LoadingTasksSeemExpensive()) << " i = " << i; 2661 EXPECT_FALSE(LoadingTasksSeemExpensive()) << " i = " << i;
2637 EXPECT_FALSE(TimerTasksSeemExpensive()) << " i = " << i; 2662 EXPECT_FALSE(TimerTasksSeemExpensive()) << " i = " << i;
2638 2663
2639 base::TimeDelta time_till_next_frame = 2664 base::TimeDelta time_till_next_frame =
2640 EstimatedNextFrameBegin() - clock_->NowTicks(); 2665 EstimatedNextFrameBegin() - clock_->NowTicks();
2641 if (time_till_next_frame > base::TimeDelta()) 2666 if (time_till_next_frame > base::TimeDelta())
2642 clock_->Advance(time_till_next_frame); 2667 clock_->Advance(time_till_next_frame);
2643 } 2668 }
(...skipping 18 matching lines...) Expand all
2662 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask, 2687 base::Bind(&RendererSchedulerImplTest::SimulateMainThreadCompositorTask,
2663 base::Unretained(this), 2688 base::Unretained(this),
2664 base::TimeDelta::FromMilliseconds(8))); 2689 base::TimeDelta::FromMilliseconds(8)));
2665 timer_task_runner_->PostTask( 2690 timer_task_runner_->PostTask(
2666 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, 2691 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask,
2667 base::Unretained(this), 2692 base::Unretained(this),
2668 base::TimeDelta::FromMilliseconds(40))); 2693 base::TimeDelta::FromMilliseconds(40)));
2669 2694
2670 RunUntilIdle(); 2695 RunUntilIdle();
2671 EXPECT_TRUE(simulate_timer_task_ran_) << " i = " << i; 2696 EXPECT_TRUE(simulate_timer_task_ran_) << " i = " << i;
2672 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, CurrentUseCase()) 2697 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
2698 CurrentUseCase())
2673 << " i = " << i; 2699 << " i = " << i;
2674 EXPECT_FALSE(LoadingTasksSeemExpensive()) << " i = " << i; 2700 EXPECT_FALSE(LoadingTasksSeemExpensive()) << " i = " << i;
2675 EXPECT_FALSE(TimerTasksSeemExpensive()) << " i = " << i; 2701 EXPECT_FALSE(TimerTasksSeemExpensive()) << " i = " << i;
2676 2702
2677 base::TimeDelta time_till_next_frame = 2703 base::TimeDelta time_till_next_frame =
2678 EstimatedNextFrameBegin() - clock_->NowTicks(); 2704 EstimatedNextFrameBegin() - clock_->NowTicks();
2679 if (time_till_next_frame > base::TimeDelta()) 2705 if (time_till_next_frame > base::TimeDelta())
2680 clock_->Advance(time_till_next_frame); 2706 clock_->Advance(time_till_next_frame);
2681 } 2707 }
2682 } 2708 }
(...skipping 17 matching lines...) Expand all
2700 FROM_HERE, base::Bind(&RendererSchedulerImplTest:: 2726 FROM_HERE, base::Bind(&RendererSchedulerImplTest::
2701 SimulateMainThreadInputHandlingCompositorTask, 2727 SimulateMainThreadInputHandlingCompositorTask,
2702 base::Unretained(this), 2728 base::Unretained(this),
2703 base::TimeDelta::FromMilliseconds(8))); 2729 base::TimeDelta::FromMilliseconds(8)));
2704 timer_task_runner_->PostTask( 2730 timer_task_runner_->PostTask(
2705 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask, 2731 FROM_HERE, base::Bind(&RendererSchedulerImplTest::SimulateTimerTask,
2706 base::Unretained(this), 2732 base::Unretained(this),
2707 base::TimeDelta::FromMilliseconds(10))); 2733 base::TimeDelta::FromMilliseconds(10)));
2708 2734
2709 RunUntilIdle(); 2735 RunUntilIdle();
2710 EXPECT_EQ(RendererScheduler::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 2736 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
2711 CurrentUseCase()) 2737 CurrentUseCase())
2712 << " i = " << i; 2738 << " i = " << i;
2713 EXPECT_FALSE(LoadingTasksSeemExpensive()) << " i = " << i; 2739 EXPECT_FALSE(LoadingTasksSeemExpensive()) << " i = " << i;
2714 if (i == 0) { 2740 if (i == 0) {
2715 EXPECT_FALSE(TimerTasksSeemExpensive()) << " i = " << i; 2741 EXPECT_FALSE(TimerTasksSeemExpensive()) << " i = " << i;
2716 } else { 2742 } else {
2717 EXPECT_TRUE(TimerTasksSeemExpensive()) << " i = " << i; 2743 EXPECT_TRUE(TimerTasksSeemExpensive()) << " i = " << i;
2718 } 2744 }
2719 EXPECT_TRUE(simulate_timer_task_ran_) << " i = " << i; 2745 EXPECT_TRUE(simulate_timer_task_ran_) << " i = " << i;
2720 2746
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
3159 now += base::TimeDelta::FromMilliseconds(500); 3185 now += base::TimeDelta::FromMilliseconds(500);
3160 EXPECT_FALSE(idle_delegate->CanEnterLongIdlePeriod(now, &next_time_to_check)); 3186 EXPECT_FALSE(idle_delegate->CanEnterLongIdlePeriod(now, &next_time_to_check));
3161 EXPECT_GE(next_time_to_check, base::TimeDelta()); 3187 EXPECT_GE(next_time_to_check, base::TimeDelta());
3162 } 3188 }
3163 3189
3164 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_TouchStartDuringFling) { 3190 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_TouchStartDuringFling) {
3165 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 3191 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
3166 scheduler_->DidAnimateForInputOnCompositorThread(); 3192 scheduler_->DidAnimateForInputOnCompositorThread();
3167 // Note DidAnimateForInputOnCompositorThread does not by itself trigger a 3193 // Note DidAnimateForInputOnCompositorThread does not by itself trigger a
3168 // policy update. 3194 // policy update.
3169 EXPECT_EQ(RendererScheduler::UseCase::COMPOSITOR_GESTURE, 3195 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
3170 ForceUpdatePolicyAndGetCurrentUseCase()); 3196 ForceUpdatePolicyAndGetCurrentUseCase());
3171 3197
3172 // Make sure TouchStart causes a policy change. 3198 // Make sure TouchStart causes a policy change.
3173 scheduler_->DidHandleInputEventOnCompositorThread( 3199 scheduler_->DidHandleInputEventOnCompositorThread(
3174 FakeInputEvent(blink::WebInputEvent::TouchStart), 3200 FakeInputEvent(blink::WebInputEvent::TouchStart),
3175 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 3201 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
3176 EXPECT_EQ(RendererScheduler::UseCase::TOUCHSTART, 3202 EXPECT_EQ(RendererSchedulerImpl::UseCase::TOUCHSTART,
3177 ForceUpdatePolicyAndGetCurrentUseCase()); 3203 ForceUpdatePolicyAndGetCurrentUseCase());
3178 } 3204 }
3179 3205
3180 TEST_F(RendererSchedulerImplTest, SYNCHRONIZED_GESTURE_CompositingExpensive) { 3206 TEST_F(RendererSchedulerImplTest, SYNCHRONIZED_GESTURE_CompositingExpensive) {
3181 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); 3207 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START);
3182 3208
3183 // With the compositor task taking 20ms, there is not enough time to run 3209 // With the compositor task taking 20ms, there is not enough time to run
3184 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks 3210 // other tasks in the same 16ms frame. To avoid starvation, compositing tasks
3185 // should therefore not get prioritized. 3211 // should therefore not get prioritized.
3186 std::vector<std::string> run_order; 3212 std::vector<std::string> run_order;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
3292 base::Bind(&RendererSchedulerImplTest::SimulatedCompositorTaskPending, 3318 base::Bind(&RendererSchedulerImplTest::SimulatedCompositorTaskPending,
3293 base::Unretained(this))); 3319 base::Unretained(this)));
3294 EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()) << "i = " << i; 3320 EXPECT_EQ(UseCase::MAIN_THREAD_GESTURE, CurrentUseCase()) << "i = " << i;
3295 } 3321 }
3296 3322
3297 EXPECT_EQ(TaskQueue::HIGH_PRIORITY, 3323 EXPECT_EQ(TaskQueue::HIGH_PRIORITY,
3298 scheduler_->CompositorTaskRunner()->GetQueuePriority()); 3324 scheduler_->CompositorTaskRunner()->GetQueuePriority());
3299 EXPECT_EQ(279u, run_order.size()); 3325 EXPECT_EQ(279u, run_order.size());
3300 } 3326 }
3301 3327
3328 class MockRAILModeObserver : public RendererScheduler::RAILModeObserver {
3329 public:
3330 MOCK_METHOD1(OnRAILModeChanged, void(v8::RAILMode rail_mode));
3331 };
3332
3333 TEST_F(RendererSchedulerImplTest, TestResponseRAILMode) {
3334 MockRAILModeObserver observer;
3335 scheduler_->SetRAILModeObserver(&observer);
3336 EXPECT_CALL(observer, OnRAILModeChanged(v8::PERFORMANCE_RESPONSE));
3337
3338 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
3339 ForceTouchStartToBeExpectedSoon();
3340 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
3341 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, RAILMode());
3342 scheduler_->SetRAILModeObserver(nullptr);
3343 }
3344
3345 TEST_F(RendererSchedulerImplTest, TestAnimateRAILMode) {
3346 MockRAILModeObserver observer;
3347 scheduler_->SetRAILModeObserver(&observer);
3348 EXPECT_CALL(observer, OnRAILModeChanged(v8::PERFORMANCE_ANIMATION)).Times(0);
3349
3350 EXPECT_FALSE(BeginFrameNotExpectedSoon());
3351 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
3352 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, RAILMode());
3353 scheduler_->SetRAILModeObserver(nullptr);
3354 }
3355
3356 TEST_F(RendererSchedulerImplTest, TestIdleRAILMode) {
3357 MockRAILModeObserver observer;
3358 scheduler_->SetRAILModeObserver(&observer);
3359 EXPECT_CALL(observer, OnRAILModeChanged(v8::PERFORMANCE_ANIMATION));
3360 EXPECT_CALL(observer, OnRAILModeChanged(v8::PERFORMANCE_IDLE));
3361
3362 scheduler_->SetAllRenderWidgetsHidden(true);
3363 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
3364 EXPECT_EQ(v8::PERFORMANCE_IDLE, RAILMode());
3365 scheduler_->SetAllRenderWidgetsHidden(false);
3366 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
3367 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, RAILMode());
3368 scheduler_->SetRAILModeObserver(nullptr);
3369 }
3370
3302 } // namespace scheduler 3371 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/renderer/renderer_scheduler_impl.cc ('k') | content/content_utility.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698