| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |