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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl_unittest.cc

Issue 2967013002: Be explicit about namespace testing to not mix it with blink::testing (Closed)
Patch Set: Dropped mojo parts that need another review. Created 3 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
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 "platform/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "platform/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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 int update_policy_count_; 249 int update_policy_count_;
250 std::vector<std::string> use_cases_; 250 std::vector<std::string> use_cases_;
251 }; 251 };
252 252
253 // Lets gtest print human readable Policy values. 253 // Lets gtest print human readable Policy values.
254 ::std::ostream& operator<<(::std::ostream& os, 254 ::std::ostream& operator<<(::std::ostream& os,
255 const RendererSchedulerImpl::UseCase& use_case) { 255 const RendererSchedulerImpl::UseCase& use_case) {
256 return os << RendererSchedulerImpl::UseCaseToString(use_case); 256 return os << RendererSchedulerImpl::UseCaseToString(use_case);
257 } 257 }
258 258
259 class RendererSchedulerImplTest : public testing::Test { 259 class RendererSchedulerImplTest : public ::testing::Test {
260 public: 260 public:
261 using UseCase = RendererSchedulerImpl::UseCase; 261 using UseCase = RendererSchedulerImpl::UseCase;
262 262
263 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) { 263 RendererSchedulerImplTest() : clock_(new base::SimpleTestTickClock()) {
264 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); 264 clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
265 } 265 }
266 266
267 RendererSchedulerImplTest(base::MessageLoop* message_loop) 267 RendererSchedulerImplTest(base::MessageLoop* message_loop)
268 : clock_(new base::SimpleTestTickClock()), message_loop_(message_loop) { 268 : clock_(new base::SimpleTestTickClock()), message_loop_(message_loop) {
269 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); 269 clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 698
699 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest); 699 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImplTest);
700 }; 700 };
701 701
702 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) { 702 TEST_F(RendererSchedulerImplTest, TestPostDefaultTask) {
703 std::vector<std::string> run_order; 703 std::vector<std::string> run_order;
704 PostTestTasks(&run_order, "D1 D2 D3 D4"); 704 PostTestTasks(&run_order, "D1 D2 D3 D4");
705 705
706 RunUntilIdle(); 706 RunUntilIdle();
707 EXPECT_THAT(run_order, 707 EXPECT_THAT(run_order,
708 testing::ElementsAre(std::string("D1"), std::string("D2"), 708 ::testing::ElementsAre(std::string("D1"), std::string("D2"),
709 std::string("D3"), std::string("D4"))); 709 std::string("D3"), std::string("D4")));
710 } 710 }
711 711
712 TEST_F(RendererSchedulerImplTest, TestPostDefaultAndCompositor) { 712 TEST_F(RendererSchedulerImplTest, TestPostDefaultAndCompositor) {
713 std::vector<std::string> run_order; 713 std::vector<std::string> run_order;
714 PostTestTasks(&run_order, "D1 C1"); 714 PostTestTasks(&run_order, "D1 C1");
715 RunUntilIdle(); 715 RunUntilIdle();
716 EXPECT_THAT(run_order, testing::Contains("D1")); 716 EXPECT_THAT(run_order, ::testing::Contains("D1"));
717 EXPECT_THAT(run_order, testing::Contains("C1")); 717 EXPECT_THAT(run_order, ::testing::Contains("C1"));
718 } 718 }
719 719
720 TEST_F(RendererSchedulerImplTest, TestRentrantTask) { 720 TEST_F(RendererSchedulerImplTest, TestRentrantTask) {
721 int count = 0; 721 int count = 0;
722 std::vector<int> run_order; 722 std::vector<int> run_order;
723 default_task_runner_->PostTask( 723 default_task_runner_->PostTask(
724 FROM_HERE, base::Bind(AppendToVectorReentrantTask, 724 FROM_HERE, base::Bind(AppendToVectorReentrantTask,
725 base::RetainedRef(default_task_runner_), &run_order, 725 base::RetainedRef(default_task_runner_), &run_order,
726 &count, 5)); 726 &count, 5));
727 RunUntilIdle(); 727 RunUntilIdle();
728 728
729 EXPECT_THAT(run_order, testing::ElementsAre(0, 1, 2, 3, 4)); 729 EXPECT_THAT(run_order, ::testing::ElementsAre(0, 1, 2, 3, 4));
730 } 730 }
731 731
732 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) { 732 TEST_F(RendererSchedulerImplTest, TestPostIdleTask) {
733 int run_count = 0; 733 int run_count = 0;
734 base::TimeTicks expected_deadline = 734 base::TimeTicks expected_deadline =
735 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300); 735 clock_->NowTicks() + base::TimeDelta::FromMilliseconds(2300);
736 base::TimeTicks deadline_in_task; 736 base::TimeTicks deadline_in_task;
737 737
738 clock_->Advance(base::TimeDelta::FromMilliseconds(100)); 738 clock_->Advance(base::TimeDelta::FromMilliseconds(100));
739 idle_task_runner_->PostIdleTask( 739 idle_task_runner_->PostIdleTask(
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 EXPECT_EQ(1, run_count); // We should still be in the new idle period. 847 EXPECT_EQ(1, run_count); // We should still be in the new idle period.
848 } 848 }
849 849
850 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) { 850 TEST_F(RendererSchedulerImplTest, TestDefaultPolicy) {
851 std::vector<std::string> run_order; 851 std::vector<std::string> run_order;
852 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 852 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
853 853
854 EnableIdleTasks(); 854 EnableIdleTasks();
855 RunUntilIdle(); 855 RunUntilIdle();
856 EXPECT_THAT(run_order, 856 EXPECT_THAT(run_order,
857 testing::ElementsAre(std::string("C1"), std::string("C2"), 857 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
858 std::string("L1"), std::string("D1"), 858 std::string("L1"), std::string("D1"),
859 std::string("D2"), std::string("I1"))); 859 std::string("D2"), std::string("I1")));
860 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 860 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
861 } 861 }
862 862
863 TEST_F(RendererSchedulerImplTest, TestDefaultPolicyWithSlowCompositor) { 863 TEST_F(RendererSchedulerImplTest, TestDefaultPolicyWithSlowCompositor) {
864 RunSlowCompositorTask(); 864 RunSlowCompositorTask();
865 865
866 std::vector<std::string> run_order; 866 std::vector<std::string> run_order;
867 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 867 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
868 868
869 EnableIdleTasks(); 869 EnableIdleTasks();
870 RunUntilIdle(); 870 RunUntilIdle();
871 EXPECT_THAT(run_order, 871 EXPECT_THAT(run_order,
872 testing::ElementsAre(std::string("L1"), std::string("D1"), 872 ::testing::ElementsAre(std::string("L1"), std::string("D1"),
873 std::string("C1"), std::string("D2"), 873 std::string("C1"), std::string("D2"),
874 std::string("C2"), std::string("I1"))); 874 std::string("C2"), std::string("I1")));
875 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 875 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
876 } 876 }
877 877
878 TEST_F(RendererSchedulerImplTest, 878 TEST_F(RendererSchedulerImplTest,
879 TestCompositorPolicy_CompositorHandlesInput_WithTouchHandler) { 879 TestCompositorPolicy_CompositorHandlesInput_WithTouchHandler) {
880 std::vector<std::string> run_order; 880 std::vector<std::string> run_order;
881 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 881 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
882 882
883 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 883 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
884 EnableIdleTasks(); 884 EnableIdleTasks();
885 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); 885 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START);
886 RunUntilIdle(); 886 RunUntilIdle();
887 EXPECT_THAT(run_order, 887 EXPECT_THAT(run_order,
888 testing::ElementsAre(std::string("L1"), std::string("D1"), 888 ::testing::ElementsAre(std::string("L1"), std::string("D1"),
889 std::string("D2"), std::string("C1"), 889 std::string("D2"), std::string("C1"),
890 std::string("C2"), std::string("I1"))); 890 std::string("C2"), std::string("I1")));
891 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 891 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
892 CurrentUseCase()); 892 CurrentUseCase());
893 } 893 }
894 894
895 TEST_F(RendererSchedulerImplTest, 895 TEST_F(RendererSchedulerImplTest,
896 TestCompositorPolicy_MainThreadHandlesInput_WithoutScrollUpdates) { 896 TestCompositorPolicy_MainThreadHandlesInput_WithoutScrollUpdates) {
897 std::vector<std::string> run_order; 897 std::vector<std::string> run_order;
898 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 898 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
899 899
900 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 900 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
901 EnableIdleTasks(); 901 EnableIdleTasks();
902 SimulateMainThreadGestureWithoutScrollUpdates(); 902 SimulateMainThreadGestureWithoutScrollUpdates();
903 RunUntilIdle(); 903 RunUntilIdle();
904 EXPECT_THAT(run_order, 904 EXPECT_THAT(run_order,
905 testing::ElementsAre(std::string("C1"), std::string("C2"), 905 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
906 std::string("L1"), std::string("D1"), 906 std::string("L1"), std::string("D1"),
907 std::string("D2"), std::string("I1"))); 907 std::string("D2"), std::string("I1")));
908 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 908 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
909 CurrentUseCase()); 909 CurrentUseCase());
910 } 910 }
911 911
912 TEST_F(RendererSchedulerImplTest, 912 TEST_F(RendererSchedulerImplTest,
913 TestCompositorPolicy_MainThreadHandlesInput_WithoutPreventDefault) { 913 TestCompositorPolicy_MainThreadHandlesInput_WithoutPreventDefault) {
914 std::vector<std::string> run_order; 914 std::vector<std::string> run_order;
915 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 915 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
916 916
917 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 917 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
918 EnableIdleTasks(); 918 EnableIdleTasks();
919 SimulateMainThreadGestureWithoutPreventDefault(); 919 SimulateMainThreadGestureWithoutPreventDefault();
920 RunUntilIdle(); 920 RunUntilIdle();
921 EXPECT_THAT(run_order, 921 EXPECT_THAT(run_order,
922 testing::ElementsAre(std::string("L1"), std::string("D1"), 922 ::testing::ElementsAre(std::string("L1"), std::string("D1"),
923 std::string("D2"), std::string("C1"), 923 std::string("D2"), std::string("C1"),
924 std::string("C2"), std::string("I1"))); 924 std::string("C2"), std::string("I1")));
925 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 925 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
926 CurrentUseCase()); 926 CurrentUseCase());
927 } 927 }
928 928
929 TEST_F(RendererSchedulerImplTest, 929 TEST_F(RendererSchedulerImplTest,
930 TestCompositorPolicy_CompositorHandlesInput_LongGestureDuration) { 930 TestCompositorPolicy_CompositorHandlesInput_LongGestureDuration) {
931 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 931 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
932 EnableIdleTasks(); 932 EnableIdleTasks();
933 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START); 933 SimulateCompositorGestureStart(TouchEventPolicy::SEND_TOUCH_START);
934 934
(...skipping 10 matching lines...) Expand all
945 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 945 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
946 clock_->Advance(base::TimeDelta::FromMilliseconds(16)); 946 clock_->Advance(base::TimeDelta::FromMilliseconds(16));
947 RunUntilIdle(); 947 RunUntilIdle();
948 } 948 }
949 949
950 std::vector<std::string> run_order; 950 std::vector<std::string> run_order;
951 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 951 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
952 952
953 RunUntilIdle(); 953 RunUntilIdle();
954 EXPECT_THAT(run_order, 954 EXPECT_THAT(run_order,
955 testing::ElementsAre(std::string("C1"), std::string("C2"), 955 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
956 std::string("L1"), std::string("D1"), 956 std::string("L1"), std::string("D1"),
957 std::string("D2"))); 957 std::string("D2")));
958 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 958 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
959 CurrentUseCase()); 959 CurrentUseCase());
960 } 960 }
961 961
962 TEST_F(RendererSchedulerImplTest, 962 TEST_F(RendererSchedulerImplTest,
963 TestCompositorPolicy_CompositorHandlesInput_WithoutTouchHandler) { 963 TestCompositorPolicy_CompositorHandlesInput_WithoutTouchHandler) {
964 std::vector<std::string> run_order; 964 std::vector<std::string> run_order;
965 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 965 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
966 966
967 EnableIdleTasks(); 967 EnableIdleTasks();
968 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); 968 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START);
969 RunUntilIdle(); 969 RunUntilIdle();
970 EXPECT_THAT(run_order, 970 EXPECT_THAT(run_order,
971 testing::ElementsAre(std::string("L1"), std::string("D1"), 971 ::testing::ElementsAre(std::string("L1"), std::string("D1"),
972 std::string("D2"), std::string("C1"), 972 std::string("D2"), std::string("C1"),
973 std::string("C2"), std::string("I1"))); 973 std::string("C2"), std::string("I1")));
974 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 974 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
975 CurrentUseCase()); 975 CurrentUseCase());
976 } 976 }
977 977
978 TEST_F(RendererSchedulerImplTest, 978 TEST_F(RendererSchedulerImplTest,
979 TestCompositorPolicy_MainThreadHandlesInput_WithTouchHandler) { 979 TestCompositorPolicy_MainThreadHandlesInput_WithTouchHandler) {
980 std::vector<std::string> run_order; 980 std::vector<std::string> run_order;
981 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 981 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
982 982
983 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 983 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
984 EnableIdleTasks(); 984 EnableIdleTasks();
985 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 985 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
986 blink::WebInputEvent::kGestureScrollBegin); 986 blink::WebInputEvent::kGestureScrollBegin);
987 RunUntilIdle(); 987 RunUntilIdle();
988 EXPECT_THAT(run_order, 988 EXPECT_THAT(run_order,
989 testing::ElementsAre(std::string("C1"), std::string("C2"), 989 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
990 std::string("L1"), std::string("D1"), 990 std::string("L1"), std::string("D1"),
991 std::string("D2"), std::string("I1"))); 991 std::string("D2"), std::string("I1")));
992 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 992 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
993 CurrentUseCase()); 993 CurrentUseCase());
994 scheduler_->DidHandleInputEventOnMainThread( 994 scheduler_->DidHandleInputEventOnMainThread(
995 FakeInputEvent(blink::WebInputEvent::kGestureFlingStart), 995 FakeInputEvent(blink::WebInputEvent::kGestureFlingStart),
996 WebInputEventResult::kHandledSystem); 996 WebInputEventResult::kHandledSystem);
997 } 997 }
998 998
999 TEST_F(RendererSchedulerImplTest, 999 TEST_F(RendererSchedulerImplTest,
1000 TestCompositorPolicy_MainThreadHandlesInput_WithoutTouchHandler) { 1000 TestCompositorPolicy_MainThreadHandlesInput_WithoutTouchHandler) {
1001 std::vector<std::string> run_order; 1001 std::vector<std::string> run_order;
1002 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 1002 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
1003 1003
1004 EnableIdleTasks(); 1004 EnableIdleTasks();
1005 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START, 1005 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START,
1006 blink::WebInputEvent::kGestureScrollBegin); 1006 blink::WebInputEvent::kGestureScrollBegin);
1007 RunUntilIdle(); 1007 RunUntilIdle();
1008 EXPECT_THAT(run_order, 1008 EXPECT_THAT(run_order,
1009 testing::ElementsAre(std::string("C1"), std::string("C2"), 1009 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1010 std::string("L1"), std::string("D1"), 1010 std::string("L1"), std::string("D1"),
1011 std::string("D2"), std::string("I1"))); 1011 std::string("D2"), std::string("I1")));
1012 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1012 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1013 CurrentUseCase()); 1013 CurrentUseCase());
1014 scheduler_->DidHandleInputEventOnMainThread( 1014 scheduler_->DidHandleInputEventOnMainThread(
1015 FakeInputEvent(blink::WebInputEvent::kGestureFlingStart), 1015 FakeInputEvent(blink::WebInputEvent::kGestureFlingStart),
1016 WebInputEventResult::kHandledSystem); 1016 WebInputEventResult::kHandledSystem);
1017 } 1017 }
1018 1018
1019 TEST_F(RendererSchedulerImplTest, 1019 TEST_F(RendererSchedulerImplTest,
1020 TestCompositorPolicy_MainThreadHandlesInput_SingleEvent_PreventDefault) { 1020 TestCompositorPolicy_MainThreadHandlesInput_SingleEvent_PreventDefault) {
1021 std::vector<std::string> run_order; 1021 std::vector<std::string> run_order;
1022 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 1022 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
1023 1023
1024 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1024 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1025 EnableIdleTasks(); 1025 EnableIdleTasks();
1026 scheduler_->DidHandleInputEventOnCompositorThread( 1026 scheduler_->DidHandleInputEventOnCompositorThread(
1027 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1027 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1028 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1028 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1029 scheduler_->DidHandleInputEventOnMainThread( 1029 scheduler_->DidHandleInputEventOnMainThread(
1030 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1030 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1031 WebInputEventResult::kHandledApplication); 1031 WebInputEventResult::kHandledApplication);
1032 RunUntilIdle(); 1032 RunUntilIdle();
1033 // Because the main thread is performing custom input handling, we let all 1033 // Because the main thread is performing custom input handling, we let all
1034 // tasks run. However compositing tasks are still given priority. 1034 // tasks run. However compositing tasks are still given priority.
1035 EXPECT_THAT(run_order, 1035 EXPECT_THAT(run_order,
1036 testing::ElementsAre(std::string("C1"), std::string("C2"), 1036 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1037 std::string("L1"), std::string("D1"), 1037 std::string("L1"), std::string("D1"),
1038 std::string("D2"), std::string("I1"))); 1038 std::string("D2"), std::string("I1")));
1039 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1039 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1040 CurrentUseCase()); 1040 CurrentUseCase());
1041 } 1041 }
1042 1042
1043 TEST_F( 1043 TEST_F(
1044 RendererSchedulerImplTest, 1044 RendererSchedulerImplTest,
1045 TestCompositorPolicy_MainThreadHandlesInput_SingleEvent_NoPreventDefault) { 1045 TestCompositorPolicy_MainThreadHandlesInput_SingleEvent_NoPreventDefault) {
1046 std::vector<std::string> run_order; 1046 std::vector<std::string> run_order;
1047 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2"); 1047 PostTestTasks(&run_order, "L1 I1 D1 C1 D2 C2");
1048 1048
1049 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1049 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1050 EnableIdleTasks(); 1050 EnableIdleTasks();
1051 scheduler_->DidHandleInputEventOnCompositorThread( 1051 scheduler_->DidHandleInputEventOnCompositorThread(
1052 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1052 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1053 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1053 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1054 scheduler_->DidHandleInputEventOnMainThread( 1054 scheduler_->DidHandleInputEventOnMainThread(
1055 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1055 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1056 WebInputEventResult::kHandledSystem); 1056 WebInputEventResult::kHandledSystem);
1057 RunUntilIdle(); 1057 RunUntilIdle();
1058 // Because we are still waiting for the touchstart to be processed, 1058 // Because we are still waiting for the touchstart to be processed,
1059 // non-essential tasks like loading tasks are blocked. 1059 // non-essential tasks like loading tasks are blocked.
1060 EXPECT_THAT(run_order, 1060 EXPECT_THAT(run_order,
1061 testing::ElementsAre(std::string("C1"), std::string("C2"), 1061 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1062 std::string("D1"), std::string("D2"), 1062 std::string("D1"), std::string("D2"),
1063 std::string("I1"))); 1063 std::string("I1")));
1064 EXPECT_EQ(RendererSchedulerImpl::UseCase::TOUCHSTART, CurrentUseCase()); 1064 EXPECT_EQ(RendererSchedulerImpl::UseCase::TOUCHSTART, CurrentUseCase());
1065 } 1065 }
1066 1066
1067 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) { 1067 TEST_F(RendererSchedulerImplTest, TestCompositorPolicy_DidAnimateForInput) {
1068 std::vector<std::string> run_order; 1068 std::vector<std::string> run_order;
1069 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1069 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1070 1070
1071 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1071 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1072 scheduler_->DidAnimateForInputOnCompositorThread(); 1072 scheduler_->DidAnimateForInputOnCompositorThread();
1073 // Note DidAnimateForInputOnCompositorThread does not by itself trigger a 1073 // Note DidAnimateForInputOnCompositorThread does not by itself trigger a
1074 // policy update. 1074 // policy update.
1075 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 1075 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
1076 ForceUpdatePolicyAndGetCurrentUseCase()); 1076 ForceUpdatePolicyAndGetCurrentUseCase());
1077 EnableIdleTasks(); 1077 EnableIdleTasks();
1078 RunUntilIdle(); 1078 RunUntilIdle();
1079 EXPECT_THAT(run_order, 1079 EXPECT_THAT(run_order,
1080 testing::ElementsAre(std::string("D1"), std::string("D2"), 1080 ::testing::ElementsAre(std::string("D1"), std::string("D2"),
1081 std::string("C1"), std::string("C2"), 1081 std::string("C1"), std::string("C2"),
1082 std::string("I1"))); 1082 std::string("I1")));
1083 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 1083 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
1084 CurrentUseCase()); 1084 CurrentUseCase());
1085 } 1085 }
1086 1086
1087 TEST_F(RendererSchedulerImplTest, Navigation_ResetsTaskCostEstimations) { 1087 TEST_F(RendererSchedulerImplTest, Navigation_ResetsTaskCostEstimations) {
1088 std::vector<std::string> run_order; 1088 std::vector<std::string> run_order;
1089 1089
1090 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1090 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1091 SimulateExpensiveTasks(timer_task_runner_); 1091 SimulateExpensiveTasks(timer_task_runner_);
1092 DoMainFrame(); 1092 DoMainFrame();
1093 // A navigation occurs which creates a new Document thus resetting the task 1093 // A navigation occurs which creates a new Document thus resetting the task
1094 // cost estimations. 1094 // cost estimations.
1095 scheduler_->OnNavigate(); 1095 scheduler_->OnNavigate();
1096 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1096 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1097 blink::WebInputEvent::kGestureScrollUpdate); 1097 blink::WebInputEvent::kGestureScrollUpdate);
1098 1098
1099 PostTestTasks(&run_order, "C1 T1"); 1099 PostTestTasks(&run_order, "C1 T1");
1100 1100
1101 RunUntilIdle(); 1101 RunUntilIdle();
1102 1102
1103 EXPECT_THAT(run_order, 1103 EXPECT_THAT(run_order,
1104 testing::ElementsAre(std::string("C1"), std::string("T1"))); 1104 ::testing::ElementsAre(std::string("C1"), std::string("T1")));
1105 } 1105 }
1106 1106
1107 TEST_F(RendererSchedulerImplTest, 1107 TEST_F(RendererSchedulerImplTest,
1108 ExpensiveTimersDontRunWhenMainThreadScrolling) { 1108 ExpensiveTimersDontRunWhenMainThreadScrolling) {
1109 std::vector<std::string> run_order; 1109 std::vector<std::string> run_order;
1110 1110
1111 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1111 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1112 SimulateExpensiveTasks(timer_task_runner_); 1112 SimulateExpensiveTasks(timer_task_runner_);
1113 DoMainFrame(); 1113 DoMainFrame();
1114 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1114 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1115 blink::WebInputEvent::kGestureScrollUpdate); 1115 blink::WebInputEvent::kGestureScrollUpdate);
1116 1116
1117 PostTestTasks(&run_order, "C1 T1"); 1117 PostTestTasks(&run_order, "C1 T1");
1118 1118
1119 RunUntilIdle(); 1119 RunUntilIdle();
1120 EXPECT_FALSE(TouchStartExpectedSoon()); 1120 EXPECT_FALSE(TouchStartExpectedSoon());
1121 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_GESTURE, 1121 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_GESTURE,
1122 CurrentUseCase()); 1122 CurrentUseCase());
1123 1123
1124 EXPECT_THAT(run_order, testing::ElementsAre(std::string("C1"))); 1124 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("C1")));
1125 } 1125 }
1126 1126
1127 TEST_F(RendererSchedulerImplTest, 1127 TEST_F(RendererSchedulerImplTest,
1128 ExpensiveTimersDoRunWhenMainThreadInputHandling) { 1128 ExpensiveTimersDoRunWhenMainThreadInputHandling) {
1129 std::vector<std::string> run_order; 1129 std::vector<std::string> run_order;
1130 1130
1131 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1131 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1132 SimulateExpensiveTasks(timer_task_runner_); 1132 SimulateExpensiveTasks(timer_task_runner_);
1133 DoMainFrame(); 1133 DoMainFrame();
1134 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1134 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1135 blink::WebInputEvent::kUndefined); 1135 blink::WebInputEvent::kUndefined);
1136 1136
1137 PostTestTasks(&run_order, "C1 T1"); 1137 PostTestTasks(&run_order, "C1 T1");
1138 1138
1139 RunUntilIdle(); 1139 RunUntilIdle();
1140 EXPECT_FALSE(TouchStartExpectedSoon()); 1140 EXPECT_FALSE(TouchStartExpectedSoon());
1141 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1141 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1142 CurrentUseCase()); 1142 CurrentUseCase());
1143 1143
1144 EXPECT_THAT(run_order, 1144 EXPECT_THAT(run_order,
1145 testing::ElementsAre(std::string("C1"), std::string("T1"))); 1145 ::testing::ElementsAre(std::string("C1"), std::string("T1")));
1146 } 1146 }
1147 1147
1148 TEST_F(RendererSchedulerImplTest, 1148 TEST_F(RendererSchedulerImplTest,
1149 ExpensiveTimersDoRunWhenMainThreadScrolling_AndOnCriticalPath) { 1149 ExpensiveTimersDoRunWhenMainThreadScrolling_AndOnCriticalPath) {
1150 std::vector<std::string> run_order; 1150 std::vector<std::string> run_order;
1151 1151
1152 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1152 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1153 SimulateExpensiveTasks(timer_task_runner_); 1153 SimulateExpensiveTasks(timer_task_runner_);
1154 DoMainFrameOnCriticalPath(); 1154 DoMainFrameOnCriticalPath();
1155 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1155 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
1156 blink::WebInputEvent::kGestureScrollBegin); 1156 blink::WebInputEvent::kGestureScrollBegin);
1157 1157
1158 PostTestTasks(&run_order, "C1 T1"); 1158 PostTestTasks(&run_order, "C1 T1");
1159 1159
1160 RunUntilIdle(); 1160 RunUntilIdle();
1161 EXPECT_FALSE(TouchStartExpectedSoon()); 1161 EXPECT_FALSE(TouchStartExpectedSoon());
1162 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1162 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1163 CurrentUseCase()); 1163 CurrentUseCase());
1164 1164
1165 EXPECT_THAT(run_order, 1165 EXPECT_THAT(run_order,
1166 testing::ElementsAre(std::string("C1"), std::string("T1"))); 1166 ::testing::ElementsAre(std::string("C1"), std::string("T1")));
1167 } 1167 }
1168 1168
1169 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicy_Compositor) { 1169 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicy_Compositor) {
1170 std::vector<std::string> run_order; 1170 std::vector<std::string> run_order;
1171 PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2"); 1171 PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2");
1172 1172
1173 // Observation of touchstart should defer execution of timer, idle and loading 1173 // Observation of touchstart should defer execution of timer, idle and loading
1174 // tasks. 1174 // tasks.
1175 scheduler_->DidHandleInputEventOnCompositorThread( 1175 scheduler_->DidHandleInputEventOnCompositorThread(
1176 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1176 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1177 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1177 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1178 EnableIdleTasks(); 1178 EnableIdleTasks();
1179 RunUntilIdle(); 1179 RunUntilIdle();
1180 EXPECT_THAT(run_order, 1180 EXPECT_THAT(run_order,
1181 testing::ElementsAre(std::string("C1"), std::string("C2"), 1181 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1182 std::string("D1"), std::string("D2"))); 1182 std::string("D1"), std::string("D2")));
1183 1183
1184 // Animation or meta events like TapDown/FlingCancel shouldn't affect the 1184 // Animation or meta events like TapDown/FlingCancel shouldn't affect the
1185 // priority. 1185 // priority.
1186 run_order.clear(); 1186 run_order.clear();
1187 scheduler_->DidAnimateForInputOnCompositorThread(); 1187 scheduler_->DidAnimateForInputOnCompositorThread();
1188 scheduler_->DidHandleInputEventOnCompositorThread( 1188 scheduler_->DidHandleInputEventOnCompositorThread(
1189 FakeInputEvent(blink::WebInputEvent::kGestureFlingCancel), 1189 FakeInputEvent(blink::WebInputEvent::kGestureFlingCancel),
1190 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1190 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1191 scheduler_->DidHandleInputEventOnCompositorThread( 1191 scheduler_->DidHandleInputEventOnCompositorThread(
1192 FakeInputEvent(blink::WebInputEvent::kGestureTapDown), 1192 FakeInputEvent(blink::WebInputEvent::kGestureTapDown),
1193 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1193 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1194 RunUntilIdle(); 1194 RunUntilIdle();
1195 EXPECT_THAT(run_order, testing::ElementsAre()); 1195 EXPECT_THAT(run_order, ::testing::ElementsAre());
1196 1196
1197 // Action events like ScrollBegin will kick us back into compositor priority, 1197 // Action events like ScrollBegin will kick us back into compositor priority,
1198 // allowing service of the timer, loading and idle queues. 1198 // allowing service of the timer, loading and idle queues.
1199 run_order.clear(); 1199 run_order.clear();
1200 scheduler_->DidHandleInputEventOnCompositorThread( 1200 scheduler_->DidHandleInputEventOnCompositorThread(
1201 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin), 1201 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin),
1202 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1202 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1203 RunUntilIdle(); 1203 RunUntilIdle();
1204 1204
1205 EXPECT_THAT(run_order, 1205 EXPECT_THAT(run_order,
1206 testing::ElementsAre(std::string("L1"), std::string("T1"), 1206 ::testing::ElementsAre(std::string("L1"), std::string("T1"),
1207 std::string("T2"))); 1207 std::string("T2")));
1208 } 1208 }
1209 1209
1210 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicy_MainThread) { 1210 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicy_MainThread) {
1211 std::vector<std::string> run_order; 1211 std::vector<std::string> run_order;
1212 PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2"); 1212 PostTestTasks(&run_order, "L1 D1 C1 D2 C2 T1 T2");
1213 1213
1214 // Observation of touchstart should defer execution of timer, idle and loading 1214 // Observation of touchstart should defer execution of timer, idle and loading
1215 // tasks. 1215 // tasks.
1216 scheduler_->DidHandleInputEventOnCompositorThread( 1216 scheduler_->DidHandleInputEventOnCompositorThread(
1217 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1217 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1218 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1218 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1219 scheduler_->DidHandleInputEventOnMainThread( 1219 scheduler_->DidHandleInputEventOnMainThread(
1220 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1220 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1221 WebInputEventResult::kHandledSystem); 1221 WebInputEventResult::kHandledSystem);
1222 EnableIdleTasks(); 1222 EnableIdleTasks();
1223 RunUntilIdle(); 1223 RunUntilIdle();
1224 EXPECT_THAT(run_order, 1224 EXPECT_THAT(run_order,
1225 testing::ElementsAre(std::string("C1"), std::string("C2"), 1225 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1226 std::string("D1"), std::string("D2"))); 1226 std::string("D1"), std::string("D2")));
1227 1227
1228 // Meta events like TapDown/FlingCancel shouldn't affect the priority. 1228 // Meta events like TapDown/FlingCancel shouldn't affect the priority.
1229 run_order.clear(); 1229 run_order.clear();
1230 scheduler_->DidHandleInputEventOnCompositorThread( 1230 scheduler_->DidHandleInputEventOnCompositorThread(
1231 FakeInputEvent(blink::WebInputEvent::kGestureFlingCancel), 1231 FakeInputEvent(blink::WebInputEvent::kGestureFlingCancel),
1232 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1232 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1233 scheduler_->DidHandleInputEventOnMainThread( 1233 scheduler_->DidHandleInputEventOnMainThread(
1234 FakeInputEvent(blink::WebInputEvent::kGestureFlingCancel), 1234 FakeInputEvent(blink::WebInputEvent::kGestureFlingCancel),
1235 WebInputEventResult::kHandledSystem); 1235 WebInputEventResult::kHandledSystem);
1236 scheduler_->DidHandleInputEventOnCompositorThread( 1236 scheduler_->DidHandleInputEventOnCompositorThread(
1237 FakeInputEvent(blink::WebInputEvent::kGestureTapDown), 1237 FakeInputEvent(blink::WebInputEvent::kGestureTapDown),
1238 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1238 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1239 scheduler_->DidHandleInputEventOnMainThread( 1239 scheduler_->DidHandleInputEventOnMainThread(
1240 FakeInputEvent(blink::WebInputEvent::kGestureTapDown), 1240 FakeInputEvent(blink::WebInputEvent::kGestureTapDown),
1241 WebInputEventResult::kHandledSystem); 1241 WebInputEventResult::kHandledSystem);
1242 RunUntilIdle(); 1242 RunUntilIdle();
1243 EXPECT_THAT(run_order, testing::ElementsAre()); 1243 EXPECT_THAT(run_order, ::testing::ElementsAre());
1244 1244
1245 // Action events like ScrollBegin will kick us back into compositor priority, 1245 // Action events like ScrollBegin will kick us back into compositor priority,
1246 // allowing service of the timer, loading and idle queues. 1246 // allowing service of the timer, loading and idle queues.
1247 run_order.clear(); 1247 run_order.clear();
1248 scheduler_->DidHandleInputEventOnCompositorThread( 1248 scheduler_->DidHandleInputEventOnCompositorThread(
1249 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin), 1249 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin),
1250 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1250 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1251 scheduler_->DidHandleInputEventOnMainThread( 1251 scheduler_->DidHandleInputEventOnMainThread(
1252 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin), 1252 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin),
1253 WebInputEventResult::kHandledSystem); 1253 WebInputEventResult::kHandledSystem);
1254 RunUntilIdle(); 1254 RunUntilIdle();
1255 1255
1256 EXPECT_THAT(run_order, 1256 EXPECT_THAT(run_order,
1257 testing::ElementsAre(std::string("L1"), std::string("T1"), 1257 ::testing::ElementsAre(std::string("L1"), std::string("T1"),
1258 std::string("T2"))); 1258 std::string("T2")));
1259 } 1259 }
1260 1260
1261 // TODO(alexclarke): Reenable once we've reinstaed the Loading UseCase. 1261 // TODO(alexclarke): Reenable once we've reinstaed the Loading UseCase.
1262 TEST_F(RendererSchedulerImplTest, DISABLED_LoadingUseCase) { 1262 TEST_F(RendererSchedulerImplTest, DISABLED_LoadingUseCase) {
1263 std::vector<std::string> run_order; 1263 std::vector<std::string> run_order;
1264 PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2"); 1264 PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2");
1265 1265
1266 scheduler_->OnNavigate(); 1266 scheduler_->OnNavigate();
1267 EnableIdleTasks(); 1267 EnableIdleTasks();
1268 RunUntilIdle(); 1268 RunUntilIdle();
1269 1269
1270 // In loading policy, loading tasks are prioritized other others. 1270 // In loading policy, loading tasks are prioritized other others.
1271 std::string loading_policy_expected[] = { 1271 std::string loading_policy_expected[] = {
1272 std::string("D1"), std::string("L1"), std::string("D2"), 1272 std::string("D1"), std::string("L1"), std::string("D2"),
1273 std::string("L2"), std::string("C1"), std::string("T1"), 1273 std::string("L2"), std::string("C1"), std::string("T1"),
1274 std::string("C2"), std::string("T2"), std::string("I1")}; 1274 std::string("C2"), std::string("T2"), std::string("I1")};
1275 EXPECT_THAT(run_order, testing::ElementsAreArray(loading_policy_expected)); 1275 EXPECT_THAT(run_order, ::testing::ElementsAreArray(loading_policy_expected));
1276 EXPECT_EQ(RendererSchedulerImpl::UseCase::LOADING, CurrentUseCase()); 1276 EXPECT_EQ(RendererSchedulerImpl::UseCase::LOADING, CurrentUseCase());
1277 1277
1278 // Advance 15s and try again, the loading policy should have ended and the 1278 // Advance 15s and try again, the loading policy should have ended and the
1279 // task order should return to the NONE use case where loading tasks are no 1279 // task order should return to the NONE use case where loading tasks are no
1280 // longer prioritized. 1280 // longer prioritized.
1281 clock_->Advance(base::TimeDelta::FromMilliseconds(150000)); 1281 clock_->Advance(base::TimeDelta::FromMilliseconds(150000));
1282 run_order.clear(); 1282 run_order.clear();
1283 PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2"); 1283 PostTestTasks(&run_order, "I1 D1 C1 T1 L1 D2 C2 T2 L2");
1284 EnableIdleTasks(); 1284 EnableIdleTasks();
1285 RunUntilIdle(); 1285 RunUntilIdle();
1286 1286
1287 std::string default_order_expected[] = { 1287 std::string default_order_expected[] = {
1288 std::string("D1"), std::string("C1"), std::string("T1"), 1288 std::string("D1"), std::string("C1"), std::string("T1"),
1289 std::string("L1"), std::string("D2"), std::string("C2"), 1289 std::string("L1"), std::string("D2"), std::string("C2"),
1290 std::string("T2"), std::string("L2"), std::string("I1")}; 1290 std::string("T2"), std::string("L2"), std::string("I1")};
1291 EXPECT_THAT(run_order, testing::ElementsAreArray(default_order_expected)); 1291 EXPECT_THAT(run_order, ::testing::ElementsAreArray(default_order_expected));
1292 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 1292 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1293 } 1293 }
1294 1294
1295 TEST_F(RendererSchedulerImplTest, 1295 TEST_F(RendererSchedulerImplTest,
1296 EventConsumedOnCompositorThread_IgnoresMouseMove_WhenMouseUp) { 1296 EventConsumedOnCompositorThread_IgnoresMouseMove_WhenMouseUp) {
1297 RunSlowCompositorTask(); 1297 RunSlowCompositorTask();
1298 1298
1299 std::vector<std::string> run_order; 1299 std::vector<std::string> run_order;
1300 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1300 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1301 1301
1302 EnableIdleTasks(); 1302 EnableIdleTasks();
1303 scheduler_->DidHandleInputEventOnCompositorThread( 1303 scheduler_->DidHandleInputEventOnCompositorThread(
1304 FakeInputEvent(blink::WebInputEvent::kMouseMove), 1304 FakeInputEvent(blink::WebInputEvent::kMouseMove),
1305 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1305 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1306 RunUntilIdle(); 1306 RunUntilIdle();
1307 // Note compositor tasks are not prioritized. 1307 // Note compositor tasks are not prioritized.
1308 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 1308 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1309 EXPECT_THAT(run_order, 1309 EXPECT_THAT(run_order,
1310 testing::ElementsAre(std::string("D1"), std::string("C1"), 1310 ::testing::ElementsAre(std::string("D1"), std::string("C1"),
1311 std::string("D2"), std::string("C2"), 1311 std::string("D2"), std::string("C2"),
1312 std::string("I1"))); 1312 std::string("I1")));
1313 } 1313 }
1314 1314
1315 TEST_F(RendererSchedulerImplTest, 1315 TEST_F(RendererSchedulerImplTest,
1316 EventForwardedToMainThread_IgnoresMouseMove_WhenMouseUp) { 1316 EventForwardedToMainThread_IgnoresMouseMove_WhenMouseUp) {
1317 RunSlowCompositorTask(); 1317 RunSlowCompositorTask();
1318 1318
1319 std::vector<std::string> run_order; 1319 std::vector<std::string> run_order;
1320 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1320 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1321 1321
1322 EnableIdleTasks(); 1322 EnableIdleTasks();
1323 scheduler_->DidHandleInputEventOnCompositorThread( 1323 scheduler_->DidHandleInputEventOnCompositorThread(
1324 FakeInputEvent(blink::WebInputEvent::kMouseMove), 1324 FakeInputEvent(blink::WebInputEvent::kMouseMove),
1325 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1325 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1326 RunUntilIdle(); 1326 RunUntilIdle();
1327 // Note compositor tasks are not prioritized. 1327 // Note compositor tasks are not prioritized.
1328 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 1328 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1329 EXPECT_THAT(run_order, 1329 EXPECT_THAT(run_order,
1330 testing::ElementsAre(std::string("D1"), std::string("C1"), 1330 ::testing::ElementsAre(std::string("D1"), std::string("C1"),
1331 std::string("D2"), std::string("C2"), 1331 std::string("D2"), std::string("C2"),
1332 std::string("I1"))); 1332 std::string("I1")));
1333 } 1333 }
1334 1334
1335 TEST_F(RendererSchedulerImplTest, 1335 TEST_F(RendererSchedulerImplTest,
1336 EventConsumedOnCompositorThread_MouseMove_WhenMouseDown) { 1336 EventConsumedOnCompositorThread_MouseMove_WhenMouseDown) {
1337 std::vector<std::string> run_order; 1337 std::vector<std::string> run_order;
1338 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1338 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1339 1339
1340 // Note that currently the compositor will never consume mouse move events, 1340 // Note that currently the compositor will never consume mouse move events,
1341 // but this test reflects what should happen if that was the case. 1341 // but this test reflects what should happen if that was the case.
1342 EnableIdleTasks(); 1342 EnableIdleTasks();
1343 scheduler_->DidHandleInputEventOnCompositorThread( 1343 scheduler_->DidHandleInputEventOnCompositorThread(
1344 FakeInputEvent(blink::WebInputEvent::kMouseMove, 1344 FakeInputEvent(blink::WebInputEvent::kMouseMove,
1345 blink::WebInputEvent::kLeftButtonDown), 1345 blink::WebInputEvent::kLeftButtonDown),
1346 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1346 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1347 RunUntilIdle(); 1347 RunUntilIdle();
1348 // Note compositor tasks deprioritized. 1348 // Note compositor tasks deprioritized.
1349 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 1349 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
1350 CurrentUseCase()); 1350 CurrentUseCase());
1351 EXPECT_THAT(run_order, 1351 EXPECT_THAT(run_order,
1352 testing::ElementsAre(std::string("D1"), std::string("D2"), 1352 ::testing::ElementsAre(std::string("D1"), std::string("D2"),
1353 std::string("C1"), std::string("C2"), 1353 std::string("C1"), std::string("C2"),
1354 std::string("I1"))); 1354 std::string("I1")));
1355 } 1355 }
1356 1356
1357 TEST_F(RendererSchedulerImplTest, 1357 TEST_F(RendererSchedulerImplTest,
1358 EventForwardedToMainThread_MouseMove_WhenMouseDown) { 1358 EventForwardedToMainThread_MouseMove_WhenMouseDown) {
1359 std::vector<std::string> run_order; 1359 std::vector<std::string> run_order;
1360 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1360 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1361 1361
1362 EnableIdleTasks(); 1362 EnableIdleTasks();
1363 scheduler_->DidHandleInputEventOnCompositorThread( 1363 scheduler_->DidHandleInputEventOnCompositorThread(
1364 FakeInputEvent(blink::WebInputEvent::kMouseMove, 1364 FakeInputEvent(blink::WebInputEvent::kMouseMove,
1365 blink::WebInputEvent::kLeftButtonDown), 1365 blink::WebInputEvent::kLeftButtonDown),
1366 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1366 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1367 RunUntilIdle(); 1367 RunUntilIdle();
1368 // Note compositor tasks are prioritized. 1368 // Note compositor tasks are prioritized.
1369 EXPECT_THAT(run_order, 1369 EXPECT_THAT(run_order,
1370 testing::ElementsAre(std::string("C1"), std::string("C2"), 1370 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1371 std::string("D1"), std::string("D2"), 1371 std::string("D1"), std::string("D2"),
1372 std::string("I1"))); 1372 std::string("I1")));
1373 scheduler_->DidHandleInputEventOnMainThread( 1373 scheduler_->DidHandleInputEventOnMainThread(
1374 FakeInputEvent(blink::WebInputEvent::kMouseMove, 1374 FakeInputEvent(blink::WebInputEvent::kMouseMove,
1375 blink::WebInputEvent::kLeftButtonDown), 1375 blink::WebInputEvent::kLeftButtonDown),
1376 WebInputEventResult::kHandledSystem); 1376 WebInputEventResult::kHandledSystem);
1377 } 1377 }
1378 1378
1379 TEST_F(RendererSchedulerImplTest, 1379 TEST_F(RendererSchedulerImplTest,
1380 EventForwardedToMainThread_MouseMove_WhenMouseDown_AfterMouseWheel) { 1380 EventForwardedToMainThread_MouseMove_WhenMouseDown_AfterMouseWheel) {
1381 // Simulate a main thread driven mouse wheel scroll gesture. 1381 // Simulate a main thread driven mouse wheel scroll gesture.
1382 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 1382 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
(...skipping 17 matching lines...) Expand all
1400 FakeInputEvent(blink::WebInputEvent::kMouseMove, 1400 FakeInputEvent(blink::WebInputEvent::kMouseMove,
1401 blink::WebInputEvent::kLeftButtonDown), 1401 blink::WebInputEvent::kLeftButtonDown),
1402 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1402 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1403 RunUntilIdle(); 1403 RunUntilIdle();
1404 1404
1405 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1405 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1406 CurrentUseCase()); 1406 CurrentUseCase());
1407 1407
1408 // Note compositor tasks are prioritized. 1408 // Note compositor tasks are prioritized.
1409 EXPECT_THAT(run_order, 1409 EXPECT_THAT(run_order,
1410 testing::ElementsAre(std::string("C1"), std::string("C2"), 1410 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1411 std::string("D1"), std::string("D2"), 1411 std::string("D1"), std::string("D2"),
1412 std::string("I1"))); 1412 std::string("I1")));
1413 } 1413 }
1414 1414
1415 TEST_F(RendererSchedulerImplTest, 1415 TEST_F(RendererSchedulerImplTest,
1416 EventForwardedToMainThread_MouseClick) { 1416 EventForwardedToMainThread_MouseClick) {
1417 // A mouse click should be detected as main thread input handling, which means 1417 // A mouse click should be detected as main thread input handling, which means
1418 // we won't try to defer expensive tasks because of one. We can, however, 1418 // we won't try to defer expensive tasks because of one. We can, however,
1419 // prioritize compositing/input handling. 1419 // prioritize compositing/input handling.
1420 std::vector<std::string> run_order; 1420 std::vector<std::string> run_order;
1421 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1421 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1422 EnableIdleTasks(); 1422 EnableIdleTasks();
1423 1423
1424 scheduler_->DidHandleInputEventOnCompositorThread( 1424 scheduler_->DidHandleInputEventOnCompositorThread(
1425 FakeInputEvent(blink::WebInputEvent::kMouseDown, 1425 FakeInputEvent(blink::WebInputEvent::kMouseDown,
1426 blink::WebInputEvent::kLeftButtonDown), 1426 blink::WebInputEvent::kLeftButtonDown),
1427 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1427 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1428 scheduler_->DidHandleInputEventOnCompositorThread( 1428 scheduler_->DidHandleInputEventOnCompositorThread(
1429 FakeInputEvent(blink::WebInputEvent::kMouseUp, 1429 FakeInputEvent(blink::WebInputEvent::kMouseUp,
1430 blink::WebInputEvent::kLeftButtonDown), 1430 blink::WebInputEvent::kLeftButtonDown),
1431 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1431 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1432 RunUntilIdle(); 1432 RunUntilIdle();
1433 1433
1434 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1434 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1435 CurrentUseCase()); 1435 CurrentUseCase());
1436 1436
1437 // Note compositor tasks are prioritized. 1437 // Note compositor tasks are prioritized.
1438 EXPECT_THAT(run_order, 1438 EXPECT_THAT(run_order,
1439 testing::ElementsAre(std::string("C1"), std::string("C2"), 1439 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1440 std::string("D1"), std::string("D2"), 1440 std::string("D1"), std::string("D2"),
1441 std::string("I1"))); 1441 std::string("I1")));
1442 } 1442 }
1443 1443
1444 TEST_F(RendererSchedulerImplTest, EventConsumedOnCompositorThread_MouseWheel) { 1444 TEST_F(RendererSchedulerImplTest, EventConsumedOnCompositorThread_MouseWheel) {
1445 std::vector<std::string> run_order; 1445 std::vector<std::string> run_order;
1446 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1446 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1447 1447
1448 EnableIdleTasks(); 1448 EnableIdleTasks();
1449 scheduler_->DidHandleInputEventOnCompositorThread( 1449 scheduler_->DidHandleInputEventOnCompositorThread(
1450 FakeInputEvent(blink::WebInputEvent::kMouseWheel), 1450 FakeInputEvent(blink::WebInputEvent::kMouseWheel),
1451 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1451 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1452 RunUntilIdle(); 1452 RunUntilIdle();
1453 // Note compositor tasks are not prioritized. 1453 // Note compositor tasks are not prioritized.
1454 EXPECT_THAT(run_order, 1454 EXPECT_THAT(run_order,
1455 testing::ElementsAre(std::string("D1"), std::string("D2"), 1455 ::testing::ElementsAre(std::string("D1"), std::string("D2"),
1456 std::string("C1"), std::string("C2"), 1456 std::string("C1"), std::string("C2"),
1457 std::string("I1"))); 1457 std::string("I1")));
1458 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 1458 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
1459 CurrentUseCase()); 1459 CurrentUseCase());
1460 } 1460 }
1461 1461
1462 TEST_F(RendererSchedulerImplTest, 1462 TEST_F(RendererSchedulerImplTest,
1463 EventForwardedToMainThread_MouseWheel_PreventDefault) { 1463 EventForwardedToMainThread_MouseWheel_PreventDefault) {
1464 std::vector<std::string> run_order; 1464 std::vector<std::string> run_order;
1465 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1465 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1466 1466
1467 EnableIdleTasks(); 1467 EnableIdleTasks();
1468 scheduler_->DidHandleInputEventOnCompositorThread( 1468 scheduler_->DidHandleInputEventOnCompositorThread(
1469 FakeInputEvent(blink::WebInputEvent::kMouseWheel), 1469 FakeInputEvent(blink::WebInputEvent::kMouseWheel),
1470 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1470 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1471 RunUntilIdle(); 1471 RunUntilIdle();
1472 // Note compositor tasks are prioritized (since they are fast). 1472 // Note compositor tasks are prioritized (since they are fast).
1473 EXPECT_THAT(run_order, 1473 EXPECT_THAT(run_order,
1474 testing::ElementsAre(std::string("C1"), std::string("C2"), 1474 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1475 std::string("D1"), std::string("D2"), 1475 std::string("D1"), std::string("D2"),
1476 std::string("I1"))); 1476 std::string("I1")));
1477 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 1477 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
1478 CurrentUseCase()); 1478 CurrentUseCase());
1479 } 1479 }
1480 1480
1481 TEST_F(RendererSchedulerImplTest, EventForwardedToMainThread_NoPreventDefault) { 1481 TEST_F(RendererSchedulerImplTest, EventForwardedToMainThread_NoPreventDefault) {
1482 std::vector<std::string> run_order; 1482 std::vector<std::string> run_order;
1483 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1483 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1484 1484
1485 EnableIdleTasks(); 1485 EnableIdleTasks();
1486 scheduler_->DidHandleInputEventOnCompositorThread( 1486 scheduler_->DidHandleInputEventOnCompositorThread(
1487 FakeInputEvent(blink::WebInputEvent::kMouseWheel), 1487 FakeInputEvent(blink::WebInputEvent::kMouseWheel),
1488 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1488 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1489 scheduler_->DidHandleInputEventOnCompositorThread( 1489 scheduler_->DidHandleInputEventOnCompositorThread(
1490 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin), 1490 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin),
1491 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1491 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1492 scheduler_->DidHandleInputEventOnCompositorThread( 1492 scheduler_->DidHandleInputEventOnCompositorThread(
1493 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate), 1493 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate),
1494 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1494 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1495 scheduler_->DidHandleInputEventOnCompositorThread( 1495 scheduler_->DidHandleInputEventOnCompositorThread(
1496 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate), 1496 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate),
1497 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1497 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1498 RunUntilIdle(); 1498 RunUntilIdle();
1499 // Note compositor tasks are prioritized. 1499 // Note compositor tasks are prioritized.
1500 EXPECT_THAT(run_order, 1500 EXPECT_THAT(run_order,
1501 testing::ElementsAre(std::string("C1"), std::string("C2"), 1501 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1502 std::string("D1"), std::string("D2"), 1502 std::string("D1"), std::string("D2"),
1503 std::string("I1"))); 1503 std::string("I1")));
1504 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_GESTURE, 1504 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_GESTURE,
1505 CurrentUseCase()); 1505 CurrentUseCase());
1506 } 1506 }
1507 1507
1508 TEST_F( 1508 TEST_F(
1509 RendererSchedulerImplTest, 1509 RendererSchedulerImplTest,
1510 EventForwardedToMainThreadAndBackToCompositor_MouseWheel_NoPreventDefault) { 1510 EventForwardedToMainThreadAndBackToCompositor_MouseWheel_NoPreventDefault) {
1511 std::vector<std::string> run_order; 1511 std::vector<std::string> run_order;
1512 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1512 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1513 1513
1514 EnableIdleTasks(); 1514 EnableIdleTasks();
1515 scheduler_->DidHandleInputEventOnCompositorThread( 1515 scheduler_->DidHandleInputEventOnCompositorThread(
1516 FakeInputEvent(blink::WebInputEvent::kMouseWheel), 1516 FakeInputEvent(blink::WebInputEvent::kMouseWheel),
1517 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1517 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1518 scheduler_->DidHandleInputEventOnCompositorThread( 1518 scheduler_->DidHandleInputEventOnCompositorThread(
1519 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin), 1519 FakeInputEvent(blink::WebInputEvent::kGestureScrollBegin),
1520 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1520 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1521 scheduler_->DidHandleInputEventOnCompositorThread( 1521 scheduler_->DidHandleInputEventOnCompositorThread(
1522 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate), 1522 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate),
1523 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1523 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1524 scheduler_->DidHandleInputEventOnCompositorThread( 1524 scheduler_->DidHandleInputEventOnCompositorThread(
1525 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate), 1525 FakeInputEvent(blink::WebInputEvent::kGestureScrollUpdate),
1526 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1526 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1527 RunUntilIdle(); 1527 RunUntilIdle();
1528 // Note compositor tasks are not prioritized. 1528 // Note compositor tasks are not prioritized.
1529 EXPECT_THAT(run_order, 1529 EXPECT_THAT(run_order,
1530 testing::ElementsAre(std::string("D1"), std::string("D2"), 1530 ::testing::ElementsAre(std::string("D1"), std::string("D2"),
1531 std::string("C1"), std::string("C2"), 1531 std::string("C1"), std::string("C2"),
1532 std::string("I1"))); 1532 std::string("I1")));
1533 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE, 1533 EXPECT_EQ(RendererSchedulerImpl::UseCase::COMPOSITOR_GESTURE,
1534 CurrentUseCase()); 1534 CurrentUseCase());
1535 } 1535 }
1536 1536
1537 TEST_F(RendererSchedulerImplTest, 1537 TEST_F(RendererSchedulerImplTest,
1538 EventConsumedOnCompositorThread_IgnoresKeyboardEvents) { 1538 EventConsumedOnCompositorThread_IgnoresKeyboardEvents) {
1539 RunSlowCompositorTask(); 1539 RunSlowCompositorTask();
1540 1540
1541 std::vector<std::string> run_order; 1541 std::vector<std::string> run_order;
1542 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1542 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1543 1543
1544 EnableIdleTasks(); 1544 EnableIdleTasks();
1545 scheduler_->DidHandleInputEventOnCompositorThread( 1545 scheduler_->DidHandleInputEventOnCompositorThread(
1546 FakeInputEvent(blink::WebInputEvent::kKeyDown), 1546 FakeInputEvent(blink::WebInputEvent::kKeyDown),
1547 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1547 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1548 RunUntilIdle(); 1548 RunUntilIdle();
1549 // Note compositor tasks are not prioritized. 1549 // Note compositor tasks are not prioritized.
1550 EXPECT_THAT(run_order, 1550 EXPECT_THAT(run_order,
1551 testing::ElementsAre(std::string("D1"), std::string("C1"), 1551 ::testing::ElementsAre(std::string("D1"), std::string("C1"),
1552 std::string("D2"), std::string("C2"), 1552 std::string("D2"), std::string("C2"),
1553 std::string("I1"))); 1553 std::string("I1")));
1554 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 1554 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1555 } 1555 }
1556 1556
1557 TEST_F(RendererSchedulerImplTest, 1557 TEST_F(RendererSchedulerImplTest,
1558 EventForwardedToMainThread_IgnoresKeyboardEvents) { 1558 EventForwardedToMainThread_IgnoresKeyboardEvents) {
1559 RunSlowCompositorTask(); 1559 RunSlowCompositorTask();
1560 1560
1561 std::vector<std::string> run_order; 1561 std::vector<std::string> run_order;
1562 PostTestTasks(&run_order, "I1 D1 C1 D2 C2"); 1562 PostTestTasks(&run_order, "I1 D1 C1 D2 C2");
1563 1563
1564 EnableIdleTasks(); 1564 EnableIdleTasks();
1565 scheduler_->DidHandleInputEventOnCompositorThread( 1565 scheduler_->DidHandleInputEventOnCompositorThread(
1566 FakeInputEvent(blink::WebInputEvent::kKeyDown), 1566 FakeInputEvent(blink::WebInputEvent::kKeyDown),
1567 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 1567 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
1568 RunUntilIdle(); 1568 RunUntilIdle();
1569 // Note compositor tasks are not prioritized. 1569 // Note compositor tasks are not prioritized.
1570 EXPECT_THAT(run_order, 1570 EXPECT_THAT(run_order,
1571 testing::ElementsAre(std::string("D1"), std::string("C1"), 1571 ::testing::ElementsAre(std::string("D1"), std::string("C1"),
1572 std::string("D2"), std::string("C2"), 1572 std::string("D2"), std::string("C2"),
1573 std::string("I1"))); 1573 std::string("I1")));
1574 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 1574 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
1575 // Note compositor tasks are not prioritized. 1575 // Note compositor tasks are not prioritized.
1576 scheduler_->DidHandleInputEventOnMainThread( 1576 scheduler_->DidHandleInputEventOnMainThread(
1577 FakeInputEvent(blink::WebInputEvent::kKeyDown), 1577 FakeInputEvent(blink::WebInputEvent::kKeyDown),
1578 WebInputEventResult::kHandledSystem); 1578 WebInputEventResult::kHandledSystem);
1579 } 1579 }
1580 1580
1581 TEST_F(RendererSchedulerImplTest, 1581 TEST_F(RendererSchedulerImplTest,
1582 TestMainthreadScrollingUseCaseDoesNotStarveDefaultTasks) { 1582 TestMainthreadScrollingUseCaseDoesNotStarveDefaultTasks) {
1583 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START, 1583 SimulateMainThreadGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START,
1584 blink::WebInputEvent::kGestureScrollBegin); 1584 blink::WebInputEvent::kGestureScrollBegin);
1585 EnableIdleTasks(); 1585 EnableIdleTasks();
1586 1586
1587 std::vector<std::string> run_order; 1587 std::vector<std::string> run_order;
1588 PostTestTasks(&run_order, "D1 C1"); 1588 PostTestTasks(&run_order, "D1 C1");
1589 1589
1590 for (int i = 0; i < 20; i++) { 1590 for (int i = 0; i < 20; i++) {
1591 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask)); 1591 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(&NullTask));
1592 } 1592 }
1593 PostTestTasks(&run_order, "C2"); 1593 PostTestTasks(&run_order, "C2");
1594 1594
1595 scheduler_->DidHandleInputEventOnCompositorThread( 1595 scheduler_->DidHandleInputEventOnCompositorThread(
1596 FakeInputEvent(blink::WebInputEvent::kGestureFlingStart), 1596 FakeInputEvent(blink::WebInputEvent::kGestureFlingStart),
1597 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1597 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1598 RunUntilIdle(); 1598 RunUntilIdle();
1599 // Ensure that the default D1 task gets to run at some point before the final 1599 // Ensure that the default D1 task gets to run at some point before the final
1600 // C2 compositor task. 1600 // C2 compositor task.
1601 EXPECT_THAT(run_order, 1601 EXPECT_THAT(run_order,
1602 testing::ElementsAre(std::string("C1"), std::string("D1"), 1602 ::testing::ElementsAre(std::string("C1"), std::string("D1"),
1603 std::string("C2"))); 1603 std::string("C2")));
1604 } 1604 }
1605 1605
1606 TEST_F(RendererSchedulerImplTest, 1606 TEST_F(RendererSchedulerImplTest,
1607 TestCompositorPolicyEnds_CompositorHandlesInput) { 1607 TestCompositorPolicyEnds_CompositorHandlesInput) {
1608 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START); 1608 SimulateCompositorGestureStart(TouchEventPolicy::DONT_SEND_TOUCH_START);
1609 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE, 1609 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE,
1610 ForceUpdatePolicyAndGetCurrentUseCase()); 1610 ForceUpdatePolicyAndGetCurrentUseCase());
1611 1611
1612 clock_->Advance(base::TimeDelta::FromMilliseconds(1000)); 1612 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1613 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 1613 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
(...skipping 12 matching lines...) Expand all
1626 1626
1627 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) { 1627 TEST_F(RendererSchedulerImplTest, TestTouchstartPolicyEndsAfterTimeout) {
1628 std::vector<std::string> run_order; 1628 std::vector<std::string> run_order;
1629 PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); 1629 PostTestTasks(&run_order, "L1 D1 C1 D2 C2");
1630 1630
1631 scheduler_->DidHandleInputEventOnCompositorThread( 1631 scheduler_->DidHandleInputEventOnCompositorThread(
1632 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1632 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1633 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1633 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1634 RunUntilIdle(); 1634 RunUntilIdle();
1635 EXPECT_THAT(run_order, 1635 EXPECT_THAT(run_order,
1636 testing::ElementsAre(std::string("C1"), std::string("C2"), 1636 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1637 std::string("D1"), std::string("D2"))); 1637 std::string("D1"), std::string("D2")));
1638 1638
1639 run_order.clear(); 1639 run_order.clear();
1640 clock_->Advance(base::TimeDelta::FromMilliseconds(1000)); 1640 clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
1641 1641
1642 // Don't post any compositor tasks to simulate a very long running event 1642 // Don't post any compositor tasks to simulate a very long running event
1643 // handler. 1643 // handler.
1644 PostTestTasks(&run_order, "D1 D2"); 1644 PostTestTasks(&run_order, "D1 D2");
1645 1645
1646 // Touchstart policy mode should have ended now that the clock has advanced. 1646 // Touchstart policy mode should have ended now that the clock has advanced.
1647 RunUntilIdle(); 1647 RunUntilIdle();
1648 EXPECT_THAT(run_order, 1648 EXPECT_THAT(run_order,
1649 testing::ElementsAre(std::string("L1"), std::string("D1"), 1649 ::testing::ElementsAre(std::string("L1"), std::string("D1"),
1650 std::string("D2"))); 1650 std::string("D2")));
1651 } 1651 }
1652 1652
1653 TEST_F(RendererSchedulerImplTest, 1653 TEST_F(RendererSchedulerImplTest,
1654 TestTouchstartPolicyEndsAfterConsecutiveTouchmoves) { 1654 TestTouchstartPolicyEndsAfterConsecutiveTouchmoves) {
1655 std::vector<std::string> run_order; 1655 std::vector<std::string> run_order;
1656 PostTestTasks(&run_order, "L1 D1 C1 D2 C2"); 1656 PostTestTasks(&run_order, "L1 D1 C1 D2 C2");
1657 1657
1658 // Observation of touchstart should defer execution of idle and loading tasks. 1658 // Observation of touchstart should defer execution of idle and loading tasks.
1659 scheduler_->DidHandleInputEventOnCompositorThread( 1659 scheduler_->DidHandleInputEventOnCompositorThread(
1660 FakeInputEvent(blink::WebInputEvent::kTouchStart), 1660 FakeInputEvent(blink::WebInputEvent::kTouchStart),
1661 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1661 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1662 RunUntilIdle(); 1662 RunUntilIdle();
1663 EXPECT_THAT(run_order, 1663 EXPECT_THAT(run_order,
1664 testing::ElementsAre(std::string("C1"), std::string("C2"), 1664 ::testing::ElementsAre(std::string("C1"), std::string("C2"),
1665 std::string("D1"), std::string("D2"))); 1665 std::string("D1"), std::string("D2")));
1666 1666
1667 // Receiving the first touchmove will not affect scheduler priority. 1667 // Receiving the first touchmove will not affect scheduler priority.
1668 run_order.clear(); 1668 run_order.clear();
1669 scheduler_->DidHandleInputEventOnCompositorThread( 1669 scheduler_->DidHandleInputEventOnCompositorThread(
1670 FakeInputEvent(blink::WebInputEvent::kTouchMove), 1670 FakeInputEvent(blink::WebInputEvent::kTouchMove),
1671 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1671 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1672 RunUntilIdle(); 1672 RunUntilIdle();
1673 EXPECT_THAT(run_order, testing::ElementsAre()); 1673 EXPECT_THAT(run_order, ::testing::ElementsAre());
1674 1674
1675 // Receiving the second touchmove will kick us back into compositor priority. 1675 // Receiving the second touchmove will kick us back into compositor priority.
1676 run_order.clear(); 1676 run_order.clear();
1677 scheduler_->DidHandleInputEventOnCompositorThread( 1677 scheduler_->DidHandleInputEventOnCompositorThread(
1678 FakeInputEvent(blink::WebInputEvent::kTouchMove), 1678 FakeInputEvent(blink::WebInputEvent::kTouchMove),
1679 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 1679 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
1680 RunUntilIdle(); 1680 RunUntilIdle();
1681 EXPECT_THAT(run_order, testing::ElementsAre(std::string("L1"))); 1681 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("L1")));
1682 } 1682 }
1683 1683
1684 TEST_F(RendererSchedulerImplTest, TestIsHighPriorityWorkAnticipated) { 1684 TEST_F(RendererSchedulerImplTest, TestIsHighPriorityWorkAnticipated) {
1685 bool is_anticipated_before = false; 1685 bool is_anticipated_before = false;
1686 bool is_anticipated_after = false; 1686 bool is_anticipated_after = false;
1687 1687
1688 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 1688 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
1689 default_task_runner_->PostTask( 1689 default_task_runner_->PostTask(
1690 FROM_HERE, base::Bind(&AnticipationTestTask, scheduler_.get(), 1690 FROM_HERE, base::Bind(&AnticipationTestTask, scheduler_.get(),
1691 SimulateInputType::kNone, &is_anticipated_before, 1691 SimulateInputType::kNone, &is_anticipated_before,
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 WebInputEventResult::kHandledSystem); 2037 WebInputEventResult::kHandledSystem);
2038 2038
2039 EXPECT_EQ(2, mock_scheduler_->update_policy_count_); 2039 EXPECT_EQ(2, mock_scheduler_->update_policy_count_);
2040 2040
2041 // We expect both the urgent and the delayed updates to run in addition to the 2041 // We expect both the urgent and the delayed updates to run in addition to the
2042 // earlier updated cause by IsHighPriorityWorkAnticipated, a final update 2042 // earlier updated cause by IsHighPriorityWorkAnticipated, a final update
2043 // transitions from 'not_scrolling touchstart expected' to 'not_scrolling'. 2043 // transitions from 'not_scrolling touchstart expected' to 'not_scrolling'.
2044 RunUntilIdle(); 2044 RunUntilIdle();
2045 EXPECT_THAT( 2045 EXPECT_THAT(
2046 mock_scheduler_->use_cases_, 2046 mock_scheduler_->use_cases_,
2047 testing::ElementsAre( 2047 ::testing::ElementsAre(
2048 std::string("none"), std::string("compositor_gesture"), 2048 std::string("none"), std::string("compositor_gesture"),
2049 std::string("compositor_gesture touchstart expected"), 2049 std::string("compositor_gesture touchstart expected"),
2050 std::string("none touchstart expected"), std::string("none"))); 2050 std::string("none touchstart expected"), std::string("none")));
2051 } 2051 }
2052 2052
2053 class RendererSchedulerImplWithMessageLoopTest 2053 class RendererSchedulerImplWithMessageLoopTest
2054 : public RendererSchedulerImplTest { 2054 : public RendererSchedulerImplTest {
2055 public: 2055 public:
2056 RendererSchedulerImplWithMessageLoopTest() 2056 RendererSchedulerImplWithMessageLoopTest()
2057 : RendererSchedulerImplTest(new base::MessageLoop()) {} 2057 : RendererSchedulerImplTest(new base::MessageLoop()) {}
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2099 default_task_runner_->PostTask( 2099 default_task_runner_->PostTask(
2100 FROM_HERE, 2100 FROM_HERE,
2101 base::Bind( 2101 base::Bind(
2102 &RendererSchedulerImplWithMessageLoopTest::PostFromNestedRunloop, 2102 &RendererSchedulerImplWithMessageLoopTest::PostFromNestedRunloop,
2103 base::Unretained(this), 2103 base::Unretained(this),
2104 base::Unretained(&tasks_to_post_from_nested_loop))); 2104 base::Unretained(&tasks_to_post_from_nested_loop)));
2105 2105
2106 EnableIdleTasks(); 2106 EnableIdleTasks();
2107 RunUntilIdle(); 2107 RunUntilIdle();
2108 // Note we expect task 3 to run last because it's non-nestable. 2108 // Note we expect task 3 to run last because it's non-nestable.
2109 EXPECT_THAT(order, testing::ElementsAre(std::string("1"), std::string("2"), 2109 EXPECT_THAT(order, ::testing::ElementsAre(std::string("1"), std::string("2"),
2110 std::string("4"), std::string("5"), 2110 std::string("4"), std::string("5"),
2111 std::string("3"))); 2111 std::string("3")));
2112 } 2112 }
2113 2113
2114 TEST_F(RendererSchedulerImplTest, TestBeginMainFrameNotExpectedUntil) { 2114 TEST_F(RendererSchedulerImplTest, TestBeginMainFrameNotExpectedUntil) {
2115 base::TimeDelta ten_millis(base::TimeDelta::FromMilliseconds(10)); 2115 base::TimeDelta ten_millis(base::TimeDelta::FromMilliseconds(10));
2116 base::TimeTicks expected_deadline = clock_->NowTicks() + ten_millis; 2116 base::TimeTicks expected_deadline = clock_->NowTicks() + ten_millis;
2117 base::TimeTicks deadline_in_task; 2117 base::TimeTicks deadline_in_task;
2118 int run_count = 0; 2118 int run_count = 0;
2119 2119
2120 idle_task_runner_->PostIdleTask( 2120 idle_task_runner_->PostIdleTask(
2121 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task)); 2121 FROM_HERE, base::Bind(&IdleTestTask, &run_count, &deadline_in_task));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2206 idle_task_runner_->PostIdleTask( 2206 idle_task_runner_->PostIdleTask(
2207 FROM_HERE, 2207 FROM_HERE,
2208 base::Bind(&RepostingUpdateClockIdleTestTask, 2208 base::Bind(&RepostingUpdateClockIdleTestTask,
2209 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(), 2209 base::RetainedRef(idle_task_runner_), &run_count, clock_.get(),
2210 idle_task_runtime, &actual_deadlines)); 2210 idle_task_runtime, &actual_deadlines));
2211 scheduler_->BeginFrameNotExpectedSoon(); 2211 scheduler_->BeginFrameNotExpectedSoon();
2212 RunUntilIdle(); 2212 RunUntilIdle();
2213 EXPECT_EQ(3, run_count); 2213 EXPECT_EQ(3, run_count);
2214 EXPECT_THAT( 2214 EXPECT_THAT(
2215 actual_deadlines, 2215 actual_deadlines,
2216 testing::ElementsAre( 2216 ::testing::ElementsAre(
2217 clock_before + maximum_idle_period_duration(), 2217 clock_before + maximum_idle_period_duration(),
2218 clock_before + idle_task_runtime + maximum_idle_period_duration(), 2218 clock_before + idle_task_runtime + maximum_idle_period_duration(),
2219 clock_before + (2 * idle_task_runtime) + 2219 clock_before + (2 * idle_task_runtime) +
2220 maximum_idle_period_duration())); 2220 maximum_idle_period_duration()));
2221 2221
2222 // Check that idle tasks don't run after the idle period ends with a 2222 // Check that idle tasks don't run after the idle period ends with a
2223 // new BeginMainFrame. 2223 // new BeginMainFrame.
2224 g_max_idle_task_reposts = 5; 2224 g_max_idle_task_reposts = 5;
2225 idle_task_runner_->PostIdleTask( 2225 idle_task_runner_->PostIdleTask(
2226 FROM_HERE, 2226 FROM_HERE,
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2344 base::TimeDelta::FromMilliseconds(10)); 2344 base::TimeDelta::FromMilliseconds(10));
2345 RunUntilIdle(); 2345 RunUntilIdle();
2346 EXPECT_EQ(2, run_count); 2346 EXPECT_EQ(2, run_count);
2347 } 2347 }
2348 2348
2349 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) { 2349 TEST_F(RendererSchedulerImplTest, TimerQueueEnabledByDefault) {
2350 std::vector<std::string> run_order; 2350 std::vector<std::string> run_order;
2351 PostTestTasks(&run_order, "T1 T2"); 2351 PostTestTasks(&run_order, "T1 T2");
2352 RunUntilIdle(); 2352 RunUntilIdle();
2353 EXPECT_THAT(run_order, 2353 EXPECT_THAT(run_order,
2354 testing::ElementsAre(std::string("T1"), std::string("T2"))); 2354 ::testing::ElementsAre(std::string("T1"), std::string("T2")));
2355 } 2355 }
2356 2356
2357 TEST_F(RendererSchedulerImplTest, SuspendAndResumeTimerQueue) { 2357 TEST_F(RendererSchedulerImplTest, SuspendAndResumeTimerQueue) {
2358 std::vector<std::string> run_order; 2358 std::vector<std::string> run_order;
2359 PostTestTasks(&run_order, "T1 T2"); 2359 PostTestTasks(&run_order, "T1 T2");
2360 2360
2361 scheduler_->SuspendTimerQueue(); 2361 scheduler_->SuspendTimerQueue();
2362 RunUntilIdle(); 2362 RunUntilIdle();
2363 EXPECT_THAT(run_order, testing::ElementsAre()); 2363 EXPECT_THAT(run_order, ::testing::ElementsAre());
2364 2364
2365 scheduler_->ResumeTimerQueue(); 2365 scheduler_->ResumeTimerQueue();
2366 RunUntilIdle(); 2366 RunUntilIdle();
2367 EXPECT_THAT(run_order, 2367 EXPECT_THAT(run_order,
2368 testing::ElementsAre(std::string("T1"), std::string("T2"))); 2368 ::testing::ElementsAre(std::string("T1"), std::string("T2")));
2369 } 2369 }
2370 2370
2371 TEST_F(RendererSchedulerImplTest, SuspendAndThrottleTimerQueue) { 2371 TEST_F(RendererSchedulerImplTest, SuspendAndThrottleTimerQueue) {
2372 std::vector<std::string> run_order; 2372 std::vector<std::string> run_order;
2373 PostTestTasks(&run_order, "T1 T2"); 2373 PostTestTasks(&run_order, "T1 T2");
2374 2374
2375 scheduler_->SuspendTimerQueue(); 2375 scheduler_->SuspendTimerQueue();
2376 RunUntilIdle(); 2376 RunUntilIdle();
2377 scheduler_->task_queue_throttler()->IncreaseThrottleRefCount( 2377 scheduler_->task_queue_throttler()->IncreaseThrottleRefCount(
2378 static_cast<TaskQueue*>(timer_task_runner_.get())); 2378 static_cast<TaskQueue*>(timer_task_runner_.get()));
2379 RunUntilIdle(); 2379 RunUntilIdle();
2380 EXPECT_THAT(run_order, testing::ElementsAre()); 2380 EXPECT_THAT(run_order, ::testing::ElementsAre());
2381 } 2381 }
2382 2382
2383 TEST_F(RendererSchedulerImplTest, ThrottleAndSuspendTimerQueue) { 2383 TEST_F(RendererSchedulerImplTest, ThrottleAndSuspendTimerQueue) {
2384 std::vector<std::string> run_order; 2384 std::vector<std::string> run_order;
2385 PostTestTasks(&run_order, "T1 T2"); 2385 PostTestTasks(&run_order, "T1 T2");
2386 2386
2387 scheduler_->task_queue_throttler()->IncreaseThrottleRefCount( 2387 scheduler_->task_queue_throttler()->IncreaseThrottleRefCount(
2388 static_cast<TaskQueue*>(timer_task_runner_.get())); 2388 static_cast<TaskQueue*>(timer_task_runner_.get()));
2389 RunUntilIdle(); 2389 RunUntilIdle();
2390 scheduler_->SuspendTimerQueue(); 2390 scheduler_->SuspendTimerQueue();
2391 RunUntilIdle(); 2391 RunUntilIdle();
2392 EXPECT_THAT(run_order, testing::ElementsAre()); 2392 EXPECT_THAT(run_order, ::testing::ElementsAre());
2393 } 2393 }
2394 2394
2395 TEST_F(RendererSchedulerImplTest, MultipleSuspendsNeedMultipleResumes) { 2395 TEST_F(RendererSchedulerImplTest, MultipleSuspendsNeedMultipleResumes) {
2396 std::vector<std::string> run_order; 2396 std::vector<std::string> run_order;
2397 PostTestTasks(&run_order, "T1 T2"); 2397 PostTestTasks(&run_order, "T1 T2");
2398 2398
2399 scheduler_->SuspendTimerQueue(); 2399 scheduler_->SuspendTimerQueue();
2400 scheduler_->SuspendTimerQueue(); 2400 scheduler_->SuspendTimerQueue();
2401 scheduler_->SuspendTimerQueue(); 2401 scheduler_->SuspendTimerQueue();
2402 RunUntilIdle(); 2402 RunUntilIdle();
2403 EXPECT_THAT(run_order, testing::ElementsAre()); 2403 EXPECT_THAT(run_order, ::testing::ElementsAre());
2404 2404
2405 scheduler_->ResumeTimerQueue(); 2405 scheduler_->ResumeTimerQueue();
2406 RunUntilIdle(); 2406 RunUntilIdle();
2407 EXPECT_THAT(run_order, testing::ElementsAre()); 2407 EXPECT_THAT(run_order, ::testing::ElementsAre());
2408 2408
2409 scheduler_->ResumeTimerQueue(); 2409 scheduler_->ResumeTimerQueue();
2410 RunUntilIdle(); 2410 RunUntilIdle();
2411 EXPECT_THAT(run_order, testing::ElementsAre()); 2411 EXPECT_THAT(run_order, ::testing::ElementsAre());
2412 2412
2413 scheduler_->ResumeTimerQueue(); 2413 scheduler_->ResumeTimerQueue();
2414 RunUntilIdle(); 2414 RunUntilIdle();
2415 EXPECT_THAT(run_order, 2415 EXPECT_THAT(run_order,
2416 testing::ElementsAre(std::string("T1"), std::string("T2"))); 2416 ::testing::ElementsAre(std::string("T1"), std::string("T2")));
2417 } 2417 }
2418 2418
2419 TEST_F(RendererSchedulerImplTest, SuspendRenderer) { 2419 TEST_F(RendererSchedulerImplTest, SuspendRenderer) {
2420 // Assume that the renderer is backgrounded. 2420 // Assume that the renderer is backgrounded.
2421 scheduler_->SetRendererBackgrounded(true); 2421 scheduler_->SetRendererBackgrounded(true);
2422 2422
2423 // Tasks in some queues don't fire when the renderer is suspended. 2423 // Tasks in some queues don't fire when the renderer is suspended.
2424 std::vector<std::string> run_order; 2424 std::vector<std::string> run_order;
2425 PostTestTasks(&run_order, "D1 C1 L1 I1 T1"); 2425 PostTestTasks(&run_order, "D1 C1 L1 I1 T1");
2426 scheduler_->SuspendRenderer(); 2426 scheduler_->SuspendRenderer();
2427 EnableIdleTasks(); 2427 EnableIdleTasks();
2428 RunUntilIdle(); 2428 RunUntilIdle();
2429 EXPECT_THAT(run_order, 2429 EXPECT_THAT(run_order,
2430 testing::ElementsAre(std::string("C1"), std::string("D1"), 2430 ::testing::ElementsAre(std::string("C1"), std::string("D1"),
2431 std::string("I1"))); 2431 std::string("I1")));
2432 2432
2433 // The rest queued tasks fire when the tab goes foregrounded. 2433 // The rest queued tasks fire when the tab goes foregrounded.
2434 run_order.clear(); 2434 run_order.clear();
2435 scheduler_->SetRendererBackgrounded(false); 2435 scheduler_->SetRendererBackgrounded(false);
2436 RunUntilIdle(); 2436 RunUntilIdle();
2437 EXPECT_THAT(run_order, 2437 EXPECT_THAT(run_order,
2438 testing::ElementsAre(std::string("L1"), std::string("T1"))); 2438 ::testing::ElementsAre(std::string("L1"), std::string("T1")));
2439 2439
2440 run_order.clear(); 2440 run_order.clear();
2441 PostTestTasks(&run_order, "D2 T2"); 2441 PostTestTasks(&run_order, "D2 T2");
2442 // The renderer is foregrounded. Suspending doesn't take effect. 2442 // The renderer is foregrounded. Suspending doesn't take effect.
2443 scheduler_->SuspendRenderer(); 2443 scheduler_->SuspendRenderer();
2444 RunUntilIdle(); 2444 RunUntilIdle();
2445 EXPECT_THAT(run_order, 2445 EXPECT_THAT(run_order,
2446 testing::ElementsAre(std::string("D2"), std::string("T2"))); 2446 ::testing::ElementsAre(std::string("D2"), std::string("T2")));
2447 } 2447 }
2448 2448
2449 TEST_F(RendererSchedulerImplTest, ResumeRenderer) { 2449 TEST_F(RendererSchedulerImplTest, ResumeRenderer) {
2450 ScopedAutoAdvanceNowEnabler enable_auto_advance_now(mock_task_runner_); 2450 ScopedAutoAdvanceNowEnabler enable_auto_advance_now(mock_task_runner_);
2451 2451
2452 // Assume that the renderer is backgrounded. 2452 // Assume that the renderer is backgrounded.
2453 scheduler_->SetRendererBackgrounded(true); 2453 scheduler_->SetRendererBackgrounded(true);
2454 2454
2455 // Tasks in some queues don't fire when the renderer is suspended. 2455 // Tasks in some queues don't fire when the renderer is suspended.
2456 std::vector<std::string> run_order; 2456 std::vector<std::string> run_order;
2457 PostTestTasks(&run_order, "D1 C1 L1 I1 T1"); 2457 PostTestTasks(&run_order, "D1 C1 L1 I1 T1");
2458 scheduler_->SuspendRenderer(); 2458 scheduler_->SuspendRenderer();
2459 EnableIdleTasks(); 2459 EnableIdleTasks();
2460 RunUntilIdle(); 2460 RunUntilIdle();
2461 EXPECT_THAT(run_order, 2461 EXPECT_THAT(run_order,
2462 testing::ElementsAre(std::string("C1"), std::string("D1"), 2462 ::testing::ElementsAre(std::string("C1"), std::string("D1"),
2463 std::string("I1"))); 2463 std::string("I1")));
2464 2464
2465 // The rest queued tasks fire when the renderer is resumed. 2465 // The rest queued tasks fire when the renderer is resumed.
2466 run_order.clear(); 2466 run_order.clear();
2467 scheduler_->ResumeRenderer(); 2467 scheduler_->ResumeRenderer();
2468 RunUntilIdle(); 2468 RunUntilIdle();
2469 EXPECT_THAT(run_order, 2469 EXPECT_THAT(run_order,
2470 testing::ElementsAre(std::string("L1"), std::string("T1"))); 2470 ::testing::ElementsAre(std::string("L1"), std::string("T1")));
2471 2471
2472 run_order.clear(); 2472 run_order.clear();
2473 // No crash occurs when the renderer is suspended again, and 2473 // No crash occurs when the renderer is suspended again, and
2474 // tasks in some queues don't fire because of suspended. 2474 // tasks in some queues don't fire because of suspended.
2475 PostTestTasks(&run_order, "D2 C2 L2 I2 T2"); 2475 PostTestTasks(&run_order, "D2 C2 L2 I2 T2");
2476 scheduler_->SuspendRenderer(); 2476 scheduler_->SuspendRenderer();
2477 EnableIdleTasks(); 2477 EnableIdleTasks();
2478 RunUntilIdle(); 2478 RunUntilIdle();
2479 EXPECT_THAT(run_order, 2479 EXPECT_THAT(run_order,
2480 testing::ElementsAre(std::string("C2"), std::string("D2"), 2480 ::testing::ElementsAre(std::string("C2"), std::string("D2"),
2481 std::string("I2"))); 2481 std::string("I2")));
2482 2482
2483 // The rest queued tasks fire when the renderer is resumed. 2483 // The rest queued tasks fire when the renderer is resumed.
2484 run_order.clear(); 2484 run_order.clear();
2485 scheduler_->ResumeRenderer(); 2485 scheduler_->ResumeRenderer();
2486 RunUntilIdle(); 2486 RunUntilIdle();
2487 EXPECT_THAT(run_order, 2487 EXPECT_THAT(run_order,
2488 testing::ElementsAre(std::string("L2"), std::string("T2"))); 2488 ::testing::ElementsAre(std::string("L2"), std::string("T2")));
2489 2489
2490 run_order.clear(); 2490 run_order.clear();
2491 PostTestTasks(&run_order, "D3 T3"); 2491 PostTestTasks(&run_order, "D3 T3");
2492 // No crash occurs when the resumed renderer goes foregrounded. 2492 // No crash occurs when the resumed renderer goes foregrounded.
2493 // Posted tasks while the renderer is resumed fire. 2493 // Posted tasks while the renderer is resumed fire.
2494 scheduler_->SetRendererBackgrounded(false); 2494 scheduler_->SetRendererBackgrounded(false);
2495 RunUntilIdle(); 2495 RunUntilIdle();
2496 EXPECT_THAT(run_order, 2496 EXPECT_THAT(run_order,
2497 testing::ElementsAre(std::string("D3"), std::string("T3"))); 2497 ::testing::ElementsAre(std::string("D3"), std::string("T3")));
2498 2498
2499 run_order.clear(); 2499 run_order.clear();
2500 PostTestTasks(&run_order, "D4 T4"); 2500 PostTestTasks(&run_order, "D4 T4");
2501 // The renderer is foregrounded. Resuming doesn't take effect. 2501 // The renderer is foregrounded. Resuming doesn't take effect.
2502 scheduler_->ResumeRenderer(); 2502 scheduler_->ResumeRenderer();
2503 RunUntilIdle(); 2503 RunUntilIdle();
2504 EXPECT_THAT(run_order, 2504 EXPECT_THAT(run_order,
2505 testing::ElementsAre(std::string("D4"), std::string("T4"))); 2505 ::testing::ElementsAre(std::string("D4"), std::string("T4")));
2506 } 2506 }
2507 2507
2508 TEST_F(RendererSchedulerImplTest, UseCaseToString) { 2508 TEST_F(RendererSchedulerImplTest, UseCaseToString) {
2509 CheckAllUseCaseToString(); 2509 CheckAllUseCaseToString();
2510 } 2510 }
2511 2511
2512 TEST_F(RendererSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) { 2512 TEST_F(RendererSchedulerImplTest, MismatchedDidHandleInputEventOnMainThread) {
2513 // This should not DCHECK because there was no corresponding compositor side 2513 // This should not DCHECK because there was no corresponding compositor side
2514 // call to DidHandleInputEventOnCompositorThread with 2514 // call to DidHandleInputEventOnCompositorThread with
2515 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the 2515 // INPUT_EVENT_ACK_STATE_NOT_CONSUMED. There are legitimate reasons for the
(...skipping 16 matching lines...) Expand all
2532 begin_frame_args.on_critical_path = false; 2532 begin_frame_args.on_critical_path = false;
2533 scheduler_->WillBeginFrame(begin_frame_args); 2533 scheduler_->WillBeginFrame(begin_frame_args);
2534 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath()); 2534 ASSERT_FALSE(scheduler_->BeginMainFrameOnCriticalPath());
2535 } 2535 }
2536 2536
2537 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) { 2537 TEST_F(RendererSchedulerImplTest, ShutdownPreventsPostingOfNewTasks) {
2538 scheduler_->Shutdown(); 2538 scheduler_->Shutdown();
2539 std::vector<std::string> run_order; 2539 std::vector<std::string> run_order;
2540 PostTestTasks(&run_order, "D1 C1"); 2540 PostTestTasks(&run_order, "D1 C1");
2541 RunUntilIdle(); 2541 RunUntilIdle();
2542 EXPECT_THAT(run_order, testing::ElementsAre()); 2542 EXPECT_THAT(run_order, ::testing::ElementsAre());
2543 } 2543 }
2544 2544
2545 TEST_F(RendererSchedulerImplTest, TestRendererBackgroundedTimerSuspension) { 2545 TEST_F(RendererSchedulerImplTest, TestRendererBackgroundedTimerSuspension) {
2546 scheduler_->SetTimerQueueSuspensionWhenBackgroundedEnabled(true); 2546 scheduler_->SetTimerQueueSuspensionWhenBackgroundedEnabled(true);
2547 2547
2548 std::vector<std::string> run_order; 2548 std::vector<std::string> run_order;
2549 PostTestTasks(&run_order, "T1 T2"); 2549 PostTestTasks(&run_order, "T1 T2");
2550 2550
2551 base::TimeTicks now; 2551 base::TimeTicks now;
2552 2552
2553 // The background signal will not immediately suspend the timer queue. 2553 // The background signal will not immediately suspend the timer queue.
2554 scheduler_->SetRendererBackgrounded(true); 2554 scheduler_->SetRendererBackgrounded(true);
2555 now += base::TimeDelta::FromMilliseconds(1100); 2555 now += base::TimeDelta::FromMilliseconds(1100);
2556 clock_->SetNowTicks(now); 2556 clock_->SetNowTicks(now);
2557 RunUntilIdle(); 2557 RunUntilIdle();
2558 EXPECT_THAT(run_order, 2558 EXPECT_THAT(run_order,
2559 testing::ElementsAre(std::string("T1"), std::string("T2"))); 2559 ::testing::ElementsAre(std::string("T1"), std::string("T2")));
2560 2560
2561 run_order.clear(); 2561 run_order.clear();
2562 PostTestTasks(&run_order, "T3"); 2562 PostTestTasks(&run_order, "T3");
2563 2563
2564 now += base::TimeDelta::FromSeconds(1); 2564 now += base::TimeDelta::FromSeconds(1);
2565 clock_->SetNowTicks(now); 2565 clock_->SetNowTicks(now);
2566 RunUntilIdle(); 2566 RunUntilIdle();
2567 EXPECT_THAT(run_order, testing::ElementsAre(std::string("T3"))); 2567 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("T3")));
2568 2568
2569 // Advance the time until after the scheduled timer queue suspension. 2569 // Advance the time until after the scheduled timer queue suspension.
2570 now = base::TimeTicks() + suspend_timers_when_backgrounded_delay() + 2570 now = base::TimeTicks() + suspend_timers_when_backgrounded_delay() +
2571 base::TimeDelta::FromMilliseconds(10); 2571 base::TimeDelta::FromMilliseconds(10);
2572 run_order.clear(); 2572 run_order.clear();
2573 clock_->SetNowTicks(now); 2573 clock_->SetNowTicks(now);
2574 RunUntilIdle(); 2574 RunUntilIdle();
2575 ASSERT_TRUE(run_order.empty()); 2575 ASSERT_TRUE(run_order.empty());
2576 2576
2577 // Timer tasks should be suspended until the foregrounded signal. 2577 // Timer tasks should be suspended until the foregrounded signal.
2578 PostTestTasks(&run_order, "T4 T5"); 2578 PostTestTasks(&run_order, "T4 T5");
2579 now += base::TimeDelta::FromSeconds(10); 2579 now += base::TimeDelta::FromSeconds(10);
2580 clock_->SetNowTicks(now); 2580 clock_->SetNowTicks(now);
2581 RunUntilIdle(); 2581 RunUntilIdle();
2582 EXPECT_THAT(run_order, testing::ElementsAre()); 2582 EXPECT_THAT(run_order, ::testing::ElementsAre());
2583 2583
2584 scheduler_->SetRendererBackgrounded(false); 2584 scheduler_->SetRendererBackgrounded(false);
2585 RunUntilIdle(); 2585 RunUntilIdle();
2586 EXPECT_THAT(run_order, 2586 EXPECT_THAT(run_order,
2587 testing::ElementsAre(std::string("T4"), std::string("T5"))); 2587 ::testing::ElementsAre(std::string("T4"), std::string("T5")));
2588 2588
2589 // Subsequent timer tasks should fire as usual. 2589 // Subsequent timer tasks should fire as usual.
2590 run_order.clear(); 2590 run_order.clear();
2591 PostTestTasks(&run_order, "T6"); 2591 PostTestTasks(&run_order, "T6");
2592 RunUntilIdle(); 2592 RunUntilIdle();
2593 EXPECT_THAT(run_order, testing::ElementsAre(std::string("T6"))); 2593 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("T6")));
2594 } 2594 }
2595 2595
2596 TEST_F(RendererSchedulerImplTest, 2596 TEST_F(RendererSchedulerImplTest,
2597 ExpensiveLoadingTasksNotBlockedTillFirstBeginMainFrame) { 2597 ExpensiveLoadingTasksNotBlockedTillFirstBeginMainFrame) {
2598 std::vector<std::string> run_order; 2598 std::vector<std::string> run_order;
2599 2599
2600 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2600 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2601 SimulateExpensiveTasks(loading_task_runner_); 2601 SimulateExpensiveTasks(loading_task_runner_);
2602 ForceTouchStartToBeExpectedSoon(); 2602 ForceTouchStartToBeExpectedSoon();
2603 PostTestTasks(&run_order, "L1 D1"); 2603 PostTestTasks(&run_order, "L1 D1");
2604 RunUntilIdle(); 2604 RunUntilIdle();
2605 2605
2606 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2606 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2607 EXPECT_FALSE(HaveSeenABeginMainframe()); 2607 EXPECT_FALSE(HaveSeenABeginMainframe());
2608 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2608 EXPECT_TRUE(LoadingTasksSeemExpensive());
2609 EXPECT_FALSE(TimerTasksSeemExpensive()); 2609 EXPECT_FALSE(TimerTasksSeemExpensive());
2610 EXPECT_TRUE(TouchStartExpectedSoon()); 2610 EXPECT_TRUE(TouchStartExpectedSoon());
2611 EXPECT_THAT(run_order, 2611 EXPECT_THAT(run_order,
2612 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2612 ::testing::ElementsAre(std::string("L1"), std::string("D1")));
2613 2613
2614 // Emit a BeginMainFrame, and the loading task should get blocked. 2614 // Emit a BeginMainFrame, and the loading task should get blocked.
2615 DoMainFrame(); 2615 DoMainFrame();
2616 run_order.clear(); 2616 run_order.clear();
2617 2617
2618 PostTestTasks(&run_order, "L1 D1"); 2618 PostTestTasks(&run_order, "L1 D1");
2619 RunUntilIdle(); 2619 RunUntilIdle();
2620 2620
2621 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 2621 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
2622 EXPECT_TRUE(HaveSeenABeginMainframe()); 2622 EXPECT_TRUE(HaveSeenABeginMainframe());
2623 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2623 EXPECT_TRUE(LoadingTasksSeemExpensive());
2624 EXPECT_FALSE(TimerTasksSeemExpensive()); 2624 EXPECT_FALSE(TimerTasksSeemExpensive());
2625 EXPECT_TRUE(TouchStartExpectedSoon()); 2625 EXPECT_TRUE(TouchStartExpectedSoon());
2626 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2626 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2627 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2627 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2628 } 2628 }
2629 2629
2630 TEST_F(RendererSchedulerImplTest, 2630 TEST_F(RendererSchedulerImplTest,
2631 ExpensiveLoadingTasksNotBlockedIfNoTouchHandler) { 2631 ExpensiveLoadingTasksNotBlockedIfNoTouchHandler) {
2632 std::vector<std::string> run_order; 2632 std::vector<std::string> run_order;
2633 2633
2634 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(false); 2634 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(false);
2635 DoMainFrame(); 2635 DoMainFrame();
2636 SimulateExpensiveTasks(loading_task_runner_); 2636 SimulateExpensiveTasks(loading_task_runner_);
2637 ForceTouchStartToBeExpectedSoon(); 2637 ForceTouchStartToBeExpectedSoon();
2638 PostTestTasks(&run_order, "L1 D1"); 2638 PostTestTasks(&run_order, "L1 D1");
2639 RunUntilIdle(); 2639 RunUntilIdle();
2640 2640
2641 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2641 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2642 EXPECT_TRUE(HaveSeenABeginMainframe()); 2642 EXPECT_TRUE(HaveSeenABeginMainframe());
2643 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2643 EXPECT_TRUE(LoadingTasksSeemExpensive());
2644 EXPECT_FALSE(TimerTasksSeemExpensive()); 2644 EXPECT_FALSE(TimerTasksSeemExpensive());
2645 EXPECT_FALSE(TouchStartExpectedSoon()); 2645 EXPECT_FALSE(TouchStartExpectedSoon());
2646 EXPECT_THAT(run_order, 2646 EXPECT_THAT(run_order,
2647 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2647 ::testing::ElementsAre(std::string("L1"), std::string("D1")));
2648 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, GetRAILMode()); 2648 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, GetRAILMode());
2649 } 2649 }
2650 2650
2651 TEST_F(RendererSchedulerImplTest, 2651 TEST_F(RendererSchedulerImplTest,
2652 ExpensiveTimerTaskBlocked_UseCase_NONE_PreviousCompositorGesture) { 2652 ExpensiveTimerTaskBlocked_UseCase_NONE_PreviousCompositorGesture) {
2653 std::vector<std::string> run_order; 2653 std::vector<std::string> run_order;
2654 2654
2655 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2655 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2656 DoMainFrame(); 2656 DoMainFrame();
2657 SimulateExpensiveTasks(timer_task_runner_); 2657 SimulateExpensiveTasks(timer_task_runner_);
2658 ForceTouchStartToBeExpectedSoon(); 2658 ForceTouchStartToBeExpectedSoon();
2659 2659
2660 PostTestTasks(&run_order, "T1 D1"); 2660 PostTestTasks(&run_order, "T1 D1");
2661 RunUntilIdle(); 2661 RunUntilIdle();
2662 2662
2663 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2663 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2664 EXPECT_TRUE(HaveSeenABeginMainframe()); 2664 EXPECT_TRUE(HaveSeenABeginMainframe());
2665 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2665 EXPECT_FALSE(LoadingTasksSeemExpensive());
2666 EXPECT_TRUE(TimerTasksSeemExpensive()); 2666 EXPECT_TRUE(TimerTasksSeemExpensive());
2667 EXPECT_TRUE(TouchStartExpectedSoon()); 2667 EXPECT_TRUE(TouchStartExpectedSoon());
2668 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2668 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2669 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2669 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2670 } 2670 }
2671 2671
2672 TEST_F(RendererSchedulerImplTest, 2672 TEST_F(RendererSchedulerImplTest,
2673 ExpensiveTimerTaskNotBlocked_UseCase_NONE_PreviousMainThreadGesture) { 2673 ExpensiveTimerTaskNotBlocked_UseCase_NONE_PreviousMainThreadGesture) {
2674 std::vector<std::string> run_order; 2674 std::vector<std::string> run_order;
2675 2675
2676 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2676 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2677 DoMainFrame(); 2677 DoMainFrame();
2678 SimulateExpensiveTasks(timer_task_runner_); 2678 SimulateExpensiveTasks(timer_task_runner_);
(...skipping 15 matching lines...) Expand all
2694 2694
2695 PostTestTasks(&run_order, "T1 D1"); 2695 PostTestTasks(&run_order, "T1 D1");
2696 RunUntilIdle(); 2696 RunUntilIdle();
2697 2697
2698 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2698 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2699 EXPECT_TRUE(HaveSeenABeginMainframe()); 2699 EXPECT_TRUE(HaveSeenABeginMainframe());
2700 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2700 EXPECT_FALSE(LoadingTasksSeemExpensive());
2701 EXPECT_TRUE(TimerTasksSeemExpensive()); 2701 EXPECT_TRUE(TimerTasksSeemExpensive());
2702 EXPECT_TRUE(TouchStartExpectedSoon()); 2702 EXPECT_TRUE(TouchStartExpectedSoon());
2703 EXPECT_THAT(run_order, 2703 EXPECT_THAT(run_order,
2704 testing::ElementsAre(std::string("T1"), std::string("D1"))); 2704 ::testing::ElementsAre(std::string("T1"), std::string("D1")));
2705 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, GetRAILMode()); 2705 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, GetRAILMode());
2706 } 2706 }
2707 2707
2708 TEST_F(RendererSchedulerImplTest, 2708 TEST_F(RendererSchedulerImplTest,
2709 ExpensiveTimerTaskBlocked_UseCase_COMPOSITOR_GESTURE) { 2709 ExpensiveTimerTaskBlocked_UseCase_COMPOSITOR_GESTURE) {
2710 std::vector<std::string> run_order; 2710 std::vector<std::string> run_order;
2711 2711
2712 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2712 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2713 DoMainFrame(); 2713 DoMainFrame();
2714 SimulateExpensiveTasks(timer_task_runner_); 2714 SimulateExpensiveTasks(timer_task_runner_);
2715 ForceTouchStartToBeExpectedSoon(); 2715 ForceTouchStartToBeExpectedSoon();
2716 scheduler_->DidAnimateForInputOnCompositorThread(); 2716 scheduler_->DidAnimateForInputOnCompositorThread();
2717 2717
2718 PostTestTasks(&run_order, "T1 D1"); 2718 PostTestTasks(&run_order, "T1 D1");
2719 RunUntilIdle(); 2719 RunUntilIdle();
2720 2720
2721 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE, 2721 EXPECT_EQ(UseCase::COMPOSITOR_GESTURE,
2722 ForceUpdatePolicyAndGetCurrentUseCase()); 2722 ForceUpdatePolicyAndGetCurrentUseCase());
2723 EXPECT_TRUE(HaveSeenABeginMainframe()); 2723 EXPECT_TRUE(HaveSeenABeginMainframe());
2724 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2724 EXPECT_FALSE(LoadingTasksSeemExpensive());
2725 EXPECT_TRUE(TimerTasksSeemExpensive()); 2725 EXPECT_TRUE(TimerTasksSeemExpensive());
2726 EXPECT_TRUE(TouchStartExpectedSoon()); 2726 EXPECT_TRUE(TouchStartExpectedSoon());
2727 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2727 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2728 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2728 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2729 } 2729 }
2730 2730
2731 TEST_F(RendererSchedulerImplTest, 2731 TEST_F(RendererSchedulerImplTest,
2732 ExpensiveTimerTaskBlocked_EvenIfBeginMainFrameNotExpectedSoon) { 2732 ExpensiveTimerTaskBlocked_EvenIfBeginMainFrameNotExpectedSoon) {
2733 std::vector<std::string> run_order; 2733 std::vector<std::string> run_order;
2734 2734
2735 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2735 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2736 DoMainFrame(); 2736 DoMainFrame();
2737 SimulateExpensiveTasks(timer_task_runner_); 2737 SimulateExpensiveTasks(timer_task_runner_);
2738 ForceTouchStartToBeExpectedSoon(); 2738 ForceTouchStartToBeExpectedSoon();
2739 scheduler_->BeginFrameNotExpectedSoon(); 2739 scheduler_->BeginFrameNotExpectedSoon();
2740 2740
2741 PostTestTasks(&run_order, "T1 D1"); 2741 PostTestTasks(&run_order, "T1 D1");
2742 RunUntilIdle(); 2742 RunUntilIdle();
2743 2743
2744 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2744 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2745 EXPECT_TRUE(HaveSeenABeginMainframe()); 2745 EXPECT_TRUE(HaveSeenABeginMainframe());
2746 EXPECT_FALSE(LoadingTasksSeemExpensive()); 2746 EXPECT_FALSE(LoadingTasksSeemExpensive());
2747 EXPECT_TRUE(TimerTasksSeemExpensive()); 2747 EXPECT_TRUE(TimerTasksSeemExpensive());
2748 EXPECT_TRUE(TouchStartExpectedSoon()); 2748 EXPECT_TRUE(TouchStartExpectedSoon());
2749 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2749 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2750 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2750 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2751 } 2751 }
2752 2752
2753 TEST_F(RendererSchedulerImplTest, 2753 TEST_F(RendererSchedulerImplTest,
2754 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) { 2754 ExpensiveLoadingTasksBlockedIfChildFrameNavigationExpected) {
2755 std::vector<std::string> run_order; 2755 std::vector<std::string> run_order;
2756 2756
2757 DoMainFrame(); 2757 DoMainFrame();
2758 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2758 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2759 SimulateExpensiveTasks(loading_task_runner_); 2759 SimulateExpensiveTasks(loading_task_runner_);
2760 ForceTouchStartToBeExpectedSoon(); 2760 ForceTouchStartToBeExpectedSoon();
2761 scheduler_->AddPendingNavigation( 2761 scheduler_->AddPendingNavigation(
2762 scheduler::RendererScheduler::NavigatingFrameType::kChildFrame); 2762 scheduler::RendererScheduler::NavigatingFrameType::kChildFrame);
2763 2763
2764 PostTestTasks(&run_order, "L1 D1"); 2764 PostTestTasks(&run_order, "L1 D1");
2765 RunUntilIdle(); 2765 RunUntilIdle();
2766 2766
2767 // The expensive loading task gets blocked. 2767 // The expensive loading task gets blocked.
2768 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2768 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2769 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2769 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2770 } 2770 }
2771 2771
2772 TEST_F(RendererSchedulerImplTest, 2772 TEST_F(RendererSchedulerImplTest,
2773 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) { 2773 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected) {
2774 std::vector<std::string> run_order; 2774 std::vector<std::string> run_order;
2775 2775
2776 DoMainFrame(); 2776 DoMainFrame();
2777 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2777 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2778 SimulateExpensiveTasks(loading_task_runner_); 2778 SimulateExpensiveTasks(loading_task_runner_);
2779 ForceTouchStartToBeExpectedSoon(); 2779 ForceTouchStartToBeExpectedSoon();
2780 scheduler_->AddPendingNavigation( 2780 scheduler_->AddPendingNavigation(
2781 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); 2781 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame);
2782 2782
2783 PostTestTasks(&run_order, "L1 D1"); 2783 PostTestTasks(&run_order, "L1 D1");
2784 RunUntilIdle(); 2784 RunUntilIdle();
2785 2785
2786 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2786 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2787 EXPECT_TRUE(HaveSeenABeginMainframe()); 2787 EXPECT_TRUE(HaveSeenABeginMainframe());
2788 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2788 EXPECT_TRUE(LoadingTasksSeemExpensive());
2789 EXPECT_FALSE(TimerTasksSeemExpensive()); 2789 EXPECT_FALSE(TimerTasksSeemExpensive());
2790 EXPECT_TRUE(TouchStartExpectedSoon()); 2790 EXPECT_TRUE(TouchStartExpectedSoon());
2791 EXPECT_EQ(1, NavigationTaskExpectedCount()); 2791 EXPECT_EQ(1, NavigationTaskExpectedCount());
2792 EXPECT_THAT(run_order, 2792 EXPECT_THAT(run_order,
2793 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2793 ::testing::ElementsAre(std::string("L1"), std::string("D1")));
2794 2794
2795 // After the nagigation has been cancelled, the expensive loading tasks should 2795 // After the nagigation has been cancelled, the expensive loading tasks should
2796 // get blocked. 2796 // get blocked.
2797 scheduler_->RemovePendingNavigation( 2797 scheduler_->RemovePendingNavigation(
2798 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); 2798 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame);
2799 run_order.clear(); 2799 run_order.clear();
2800 2800
2801 PostTestTasks(&run_order, "L1 D1"); 2801 PostTestTasks(&run_order, "L1 D1");
2802 RunUntilIdle(); 2802 RunUntilIdle();
2803 2803
2804 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 2804 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
2805 EXPECT_TRUE(HaveSeenABeginMainframe()); 2805 EXPECT_TRUE(HaveSeenABeginMainframe());
2806 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2806 EXPECT_TRUE(LoadingTasksSeemExpensive());
2807 EXPECT_FALSE(TimerTasksSeemExpensive()); 2807 EXPECT_FALSE(TimerTasksSeemExpensive());
2808 EXPECT_TRUE(TouchStartExpectedSoon()); 2808 EXPECT_TRUE(TouchStartExpectedSoon());
2809 EXPECT_EQ(0, NavigationTaskExpectedCount()); 2809 EXPECT_EQ(0, NavigationTaskExpectedCount());
2810 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2810 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2811 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2811 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2812 } 2812 }
2813 2813
2814 TEST_F(RendererSchedulerImplTest, 2814 TEST_F(RendererSchedulerImplTest,
2815 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) { 2815 ExpensiveLoadingTasksNotBlockedIfMainFrameNavigationExpected_Multiple) {
2816 std::vector<std::string> run_order; 2816 std::vector<std::string> run_order;
2817 2817
2818 DoMainFrame(); 2818 DoMainFrame();
2819 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2819 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2820 SimulateExpensiveTasks(loading_task_runner_); 2820 SimulateExpensiveTasks(loading_task_runner_);
2821 ForceTouchStartToBeExpectedSoon(); 2821 ForceTouchStartToBeExpectedSoon();
2822 scheduler_->AddPendingNavigation( 2822 scheduler_->AddPendingNavigation(
2823 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); 2823 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame);
2824 scheduler_->AddPendingNavigation( 2824 scheduler_->AddPendingNavigation(
2825 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); 2825 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame);
2826 2826
2827 PostTestTasks(&run_order, "L1 D1"); 2827 PostTestTasks(&run_order, "L1 D1");
2828 RunUntilIdle(); 2828 RunUntilIdle();
2829 2829
2830 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2830 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2831 EXPECT_TRUE(HaveSeenABeginMainframe()); 2831 EXPECT_TRUE(HaveSeenABeginMainframe());
2832 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2832 EXPECT_TRUE(LoadingTasksSeemExpensive());
2833 EXPECT_FALSE(TimerTasksSeemExpensive()); 2833 EXPECT_FALSE(TimerTasksSeemExpensive());
2834 EXPECT_TRUE(TouchStartExpectedSoon()); 2834 EXPECT_TRUE(TouchStartExpectedSoon());
2835 EXPECT_EQ(2, NavigationTaskExpectedCount()); 2835 EXPECT_EQ(2, NavigationTaskExpectedCount());
2836 EXPECT_THAT(run_order, 2836 EXPECT_THAT(run_order,
2837 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2837 ::testing::ElementsAre(std::string("L1"), std::string("D1")));
2838 2838
2839 run_order.clear(); 2839 run_order.clear();
2840 scheduler_->RemovePendingNavigation( 2840 scheduler_->RemovePendingNavigation(
2841 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); 2841 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame);
2842 // Navigation task expected ref count non-zero so expensive tasks still not 2842 // Navigation task expected ref count non-zero so expensive tasks still not
2843 // blocked. 2843 // blocked.
2844 PostTestTasks(&run_order, "L1 D1"); 2844 PostTestTasks(&run_order, "L1 D1");
2845 RunUntilIdle(); 2845 RunUntilIdle();
2846 2846
2847 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase()); 2847 EXPECT_EQ(UseCase::NONE, ForceUpdatePolicyAndGetCurrentUseCase());
2848 EXPECT_TRUE(HaveSeenABeginMainframe()); 2848 EXPECT_TRUE(HaveSeenABeginMainframe());
2849 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2849 EXPECT_TRUE(LoadingTasksSeemExpensive());
2850 EXPECT_FALSE(TimerTasksSeemExpensive()); 2850 EXPECT_FALSE(TimerTasksSeemExpensive());
2851 EXPECT_TRUE(TouchStartExpectedSoon()); 2851 EXPECT_TRUE(TouchStartExpectedSoon());
2852 EXPECT_EQ(1, NavigationTaskExpectedCount()); 2852 EXPECT_EQ(1, NavigationTaskExpectedCount());
2853 EXPECT_THAT(run_order, 2853 EXPECT_THAT(run_order,
2854 testing::ElementsAre(std::string("L1"), std::string("D1"))); 2854 ::testing::ElementsAre(std::string("L1"), std::string("D1")));
2855 2855
2856 run_order.clear(); 2856 run_order.clear();
2857 scheduler_->RemovePendingNavigation( 2857 scheduler_->RemovePendingNavigation(
2858 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame); 2858 scheduler::RendererScheduler::NavigatingFrameType::kMainFrame);
2859 // Navigation task expected ref count is now zero, the expensive loading tasks 2859 // Navigation task expected ref count is now zero, the expensive loading tasks
2860 // should get blocked. 2860 // should get blocked.
2861 PostTestTasks(&run_order, "L1 D1"); 2861 PostTestTasks(&run_order, "L1 D1");
2862 RunUntilIdle(); 2862 RunUntilIdle();
2863 2863
2864 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase()); 2864 EXPECT_EQ(RendererSchedulerImpl::UseCase::NONE, CurrentUseCase());
2865 EXPECT_TRUE(HaveSeenABeginMainframe()); 2865 EXPECT_TRUE(HaveSeenABeginMainframe());
2866 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2866 EXPECT_TRUE(LoadingTasksSeemExpensive());
2867 EXPECT_FALSE(TimerTasksSeemExpensive()); 2867 EXPECT_FALSE(TimerTasksSeemExpensive());
2868 EXPECT_TRUE(TouchStartExpectedSoon()); 2868 EXPECT_TRUE(TouchStartExpectedSoon());
2869 EXPECT_EQ(0, NavigationTaskExpectedCount()); 2869 EXPECT_EQ(0, NavigationTaskExpectedCount());
2870 EXPECT_THAT(run_order, testing::ElementsAre(std::string("D1"))); 2870 EXPECT_THAT(run_order, ::testing::ElementsAre(std::string("D1")));
2871 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode()); 2871 EXPECT_EQ(v8::PERFORMANCE_RESPONSE, GetRAILMode());
2872 } 2872 }
2873 2873
2874 TEST_F(RendererSchedulerImplTest, 2874 TEST_F(RendererSchedulerImplTest,
2875 ExpensiveLoadingTasksNotBlockedDuringMainThreadGestures) { 2875 ExpensiveLoadingTasksNotBlockedDuringMainThreadGestures) {
2876 std::vector<std::string> run_order; 2876 std::vector<std::string> run_order;
2877 2877
2878 SimulateExpensiveTasks(loading_task_runner_); 2878 SimulateExpensiveTasks(loading_task_runner_);
2879 2879
2880 // Loading tasks should not be disabled during main thread user interactions. 2880 // Loading tasks should not be disabled during main thread user interactions.
2881 PostTestTasks(&run_order, "C1 L1"); 2881 PostTestTasks(&run_order, "C1 L1");
2882 2882
2883 // Trigger main_thread_gesture UseCase 2883 // Trigger main_thread_gesture UseCase
2884 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 2884 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
2885 blink::WebInputEvent::kGestureScrollBegin); 2885 blink::WebInputEvent::kGestureScrollBegin);
2886 RunUntilIdle(); 2886 RunUntilIdle();
2887 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING, 2887 EXPECT_EQ(RendererSchedulerImpl::UseCase::MAIN_THREAD_CUSTOM_INPUT_HANDLING,
2888 CurrentUseCase()); 2888 CurrentUseCase());
2889 2889
2890 EXPECT_TRUE(LoadingTasksSeemExpensive()); 2890 EXPECT_TRUE(LoadingTasksSeemExpensive());
2891 EXPECT_FALSE(TimerTasksSeemExpensive()); 2891 EXPECT_FALSE(TimerTasksSeemExpensive());
2892 EXPECT_THAT(run_order, 2892 EXPECT_THAT(run_order,
2893 testing::ElementsAre(std::string("C1"), std::string("L1"))); 2893 ::testing::ElementsAre(std::string("C1"), std::string("L1")));
2894 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, GetRAILMode()); 2894 EXPECT_EQ(v8::PERFORMANCE_ANIMATION, GetRAILMode());
2895 } 2895 }
2896 2896
2897 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) { 2897 TEST_F(RendererSchedulerImplTest, ModeratelyExpensiveTimer_NotBlocked) {
2898 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true); 2898 scheduler_->SetHasVisibleRenderWidgetWithTouchHandler(true);
2899 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START, 2899 SimulateMainThreadGestureStart(TouchEventPolicy::SEND_TOUCH_START,
2900 blink::WebInputEvent::kTouchMove); 2900 blink::WebInputEvent::kTouchMove);
2901 RunUntilIdle(); 2901 RunUntilIdle();
2902 for (int i = 0; i < 20; i++) { 2902 for (int i = 0; i < 20; i++) {
2903 simulate_timer_task_ran_ = false; 2903 simulate_timer_task_ran_ = false;
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after
3857 scheduler_->SetRendererBackgrounded(true); 3857 scheduler_->SetRendererBackgrounded(true);
3858 3858
3859 std::vector<base::TimeTicks> run_times; 3859 std::vector<base::TimeTicks> run_times;
3860 3860
3861 timer_task_runner_->PostTask( 3861 timer_task_runner_->PostTask(
3862 FROM_HERE, base::Bind(&RecordingTimeTestTask, &run_times, clock_.get())); 3862 FROM_HERE, base::Bind(&RecordingTimeTestTask, &run_times, clock_.get()));
3863 3863
3864 mock_task_runner_->RunUntilTime(base::TimeTicks() + 3864 mock_task_runner_->RunUntilTime(base::TimeTicks() +
3865 base::TimeDelta::FromMilliseconds(1100)); 3865 base::TimeDelta::FromMilliseconds(1100));
3866 3866
3867 EXPECT_THAT(run_times, testing::ElementsAre(base::TimeTicks() + 3867 EXPECT_THAT(run_times,
3868 base::TimeDelta::FromSeconds(1))); 3868 ::testing::ElementsAre(base::TimeTicks() +
3869 base::TimeDelta::FromSeconds(1)));
3869 run_times.clear(); 3870 run_times.clear();
3870 3871
3871 timer_task_runner_->PostDelayedTask( 3872 timer_task_runner_->PostDelayedTask(
3872 FROM_HERE, base::Bind(&RecordingTimeTestTask, &run_times, clock_.get()), 3873 FROM_HERE, base::Bind(&RecordingTimeTestTask, &run_times, clock_.get()),
3873 base::TimeDelta::FromMilliseconds(200)); 3874 base::TimeDelta::FromMilliseconds(200));
3874 3875
3875 scheduler_->SetRendererBackgrounded(false); 3876 scheduler_->SetRendererBackgrounded(false);
3876 3877
3877 mock_task_runner_->RunUntilTime(base::TimeTicks() + 3878 mock_task_runner_->RunUntilTime(base::TimeTicks() +
3878 base::TimeDelta::FromMilliseconds(1500)); 3879 base::TimeDelta::FromMilliseconds(1500));
3879 3880
3880 EXPECT_THAT(run_times, 3881 EXPECT_THAT(run_times,
3881 testing::ElementsAre(base::TimeTicks() + 3882 ::testing::ElementsAre(base::TimeTicks() +
3882 base::TimeDelta::FromMilliseconds(1300))); 3883 base::TimeDelta::FromMilliseconds(1300)));
3883 } 3884 }
3884 3885
3885 TEST_F(RendererSchedulerImplTest, UnresponsiveMainThread) { 3886 TEST_F(RendererSchedulerImplTest, UnresponsiveMainThread) {
3886 EXPECT_FALSE( 3887 EXPECT_FALSE(
3887 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); 3888 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold()));
3888 3889
3889 // Add one second long task. 3890 // Add one second long task.
3890 AdvanceTimeWithTask(1); 3891 AdvanceTimeWithTask(1);
3891 EXPECT_TRUE( 3892 EXPECT_TRUE(
3892 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold())); 3893 scheduler_->MainThreadSeemsUnresponsive(responsiveness_threshold()));
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
4053 4054
4054 scheduler_->OnFirstMeaningfulPaint(); 4055 scheduler_->OnFirstMeaningfulPaint();
4055 scheduler_->DidCommitProvisionalLoad(true /* is_web_history_inert_commit */, 4056 scheduler_->DidCommitProvisionalLoad(true /* is_web_history_inert_commit */,
4056 true /* is_reload */, 4057 true /* is_reload */,
4057 true /* is_main_frame */); 4058 true /* is_main_frame */);
4058 EXPECT_TRUE(scheduler_->waiting_for_meaningful_paint()); // State cleared. 4059 EXPECT_TRUE(scheduler_->waiting_for_meaningful_paint()); // State cleared.
4059 } 4060 }
4060 4061
4061 } // namespace scheduler 4062 } // namespace scheduler
4062 } // namespace blink 4063 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698