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

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

Issue 1098033002: Remove dependency on cc::TestNowSource from scheduler code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/scheduler/renderer_scheduler_impl.h" 5 #include "content/renderer/scheduler/renderer_scheduler_impl.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "cc/output/begin_frame_args.h" 8 #include "cc/output/begin_frame_args.h"
9 #include "cc/test/ordered_simple_task_runner.h" 9 #include "cc/test/ordered_simple_task_runner.h"
10 #include "cc/test/test_now_source.h"
10 #include "content/child/scheduler/nestable_task_runner_for_test.h" 11 #include "content/child/scheduler/nestable_task_runner_for_test.h"
11 #include "content/child/scheduler/scheduler_message_loop_delegate.h" 12 #include "content/child/scheduler/scheduler_message_loop_delegate.h"
13 #include "content/test/test_time_source.h"
12 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
14 16
15 namespace content { 17 namespace content {
16 18
17 namespace { 19 namespace {
18 class FakeInputEvent : public blink::WebInputEvent { 20 class FakeInputEvent : public blink::WebInputEvent {
19 public: 21 public:
20 explicit FakeInputEvent(blink::WebInputEvent::Type event_type) 22 explicit FakeInputEvent(blink::WebInputEvent::Type event_type)
21 : WebInputEvent(sizeof(FakeInputEvent)) { 23 : WebInputEvent(sizeof(FakeInputEvent)) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 : clock_(cc::TestNowSource::Create(5000)), 131 : clock_(cc::TestNowSource::Create(5000)),
130 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)), 132 mock_task_runner_(new cc::OrderedSimpleTaskRunner(clock_, false)),
131 nestable_task_runner_( 133 nestable_task_runner_(
132 NestableTaskRunnerForTest::Create(mock_task_runner_)), 134 NestableTaskRunnerForTest::Create(mock_task_runner_)),
133 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), 135 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)),
134 default_task_runner_(scheduler_->DefaultTaskRunner()), 136 default_task_runner_(scheduler_->DefaultTaskRunner()),
135 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 137 compositor_task_runner_(scheduler_->CompositorTaskRunner()),
136 loading_task_runner_(scheduler_->LoadingTaskRunner()), 138 loading_task_runner_(scheduler_->LoadingTaskRunner()),
137 idle_task_runner_(scheduler_->IdleTaskRunner()), 139 idle_task_runner_(scheduler_->IdleTaskRunner()),
138 timer_task_runner_(scheduler_->TimerTaskRunner()) { 140 timer_task_runner_(scheduler_->TimerTaskRunner()) {
139 scheduler_->SetTimeSourceForTesting(clock_); 141 scheduler_->SetTimeSourceForTesting(
142 make_scoped_ptr(new TestTimeSource(clock_)));
140 } 143 }
141 144
142 RendererSchedulerImplTest(base::MessageLoop* message_loop) 145 RendererSchedulerImplTest(base::MessageLoop* message_loop)
143 : clock_(cc::TestNowSource::Create(5000)), 146 : clock_(cc::TestNowSource::Create(5000)),
144 message_loop_(message_loop), 147 message_loop_(message_loop),
145 nestable_task_runner_( 148 nestable_task_runner_(
146 SchedulerMessageLoopDelegate::Create(message_loop)), 149 SchedulerMessageLoopDelegate::Create(message_loop)),
147 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)), 150 scheduler_(new RendererSchedulerImpl(nestable_task_runner_)),
148 default_task_runner_(scheduler_->DefaultTaskRunner()), 151 default_task_runner_(scheduler_->DefaultTaskRunner()),
149 compositor_task_runner_(scheduler_->CompositorTaskRunner()), 152 compositor_task_runner_(scheduler_->CompositorTaskRunner()),
150 loading_task_runner_(scheduler_->LoadingTaskRunner()), 153 loading_task_runner_(scheduler_->LoadingTaskRunner()),
151 idle_task_runner_(scheduler_->IdleTaskRunner()), 154 idle_task_runner_(scheduler_->IdleTaskRunner()),
152 timer_task_runner_(scheduler_->TimerTaskRunner()) { 155 timer_task_runner_(scheduler_->TimerTaskRunner()) {
153 scheduler_->SetTimeSourceForTesting(clock_); 156 scheduler_->SetTimeSourceForTesting(
157 make_scoped_ptr(new TestTimeSource(clock_)));
154 } 158 }
155 ~RendererSchedulerImplTest() override {} 159 ~RendererSchedulerImplTest() override {}
156 160
157 void TearDown() override { 161 void TearDown() override {
158 DCHECK(!mock_task_runner_.get() || !message_loop_.get()); 162 DCHECK(!mock_task_runner_.get() || !message_loop_.get());
159 if (mock_task_runner_.get()) { 163 if (mock_task_runner_.get()) {
160 // Check that all tests stop posting tasks. 164 // Check that all tests stop posting tasks.
161 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 165 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
162 while (mock_task_runner_->RunUntilIdle()) { 166 while (mock_task_runner_->RunUntilIdle()) {
163 } 167 }
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 951
948 RunUntilIdle(); 952 RunUntilIdle();
949 953
950 EXPECT_EQ(1, mock_scheduler->update_policy_count_); 954 EXPECT_EQ(1, mock_scheduler->update_policy_count_);
951 } 955 }
952 956
953 TEST_F(RendererSchedulerImplTest, OnePendingDelayedAndOneUrgentUpdatePolicy) { 957 TEST_F(RendererSchedulerImplTest, OnePendingDelayedAndOneUrgentUpdatePolicy) {
954 RendererSchedulerImplForTest* mock_scheduler = 958 RendererSchedulerImplForTest* mock_scheduler =
955 new RendererSchedulerImplForTest(nestable_task_runner_); 959 new RendererSchedulerImplForTest(nestable_task_runner_);
956 scheduler_.reset(mock_scheduler); 960 scheduler_.reset(mock_scheduler);
957 scheduler_->SetTimeSourceForTesting(clock_); 961 scheduler_->SetTimeSourceForTesting(
962 make_scoped_ptr(new TestTimeSource(clock_)));
958 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 963 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
959 964
960 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1)); 965 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1));
961 EnsureUrgentPolicyUpdatePostedOnMainThread(); 966 EnsureUrgentPolicyUpdatePostedOnMainThread();
962 967
963 RunUntilIdle(); 968 RunUntilIdle();
964 969
965 // We expect both the urgent and the delayed updates to run. 970 // We expect both the urgent and the delayed updates to run.
966 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 971 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
967 } 972 }
968 973
969 TEST_F(RendererSchedulerImplTest, OneUrgentAndOnePendingDelayedUpdatePolicy) { 974 TEST_F(RendererSchedulerImplTest, OneUrgentAndOnePendingDelayedUpdatePolicy) {
970 RendererSchedulerImplForTest* mock_scheduler = 975 RendererSchedulerImplForTest* mock_scheduler =
971 new RendererSchedulerImplForTest(nestable_task_runner_); 976 new RendererSchedulerImplForTest(nestable_task_runner_);
972 scheduler_.reset(mock_scheduler); 977 scheduler_.reset(mock_scheduler);
973 scheduler_->SetTimeSourceForTesting(clock_); 978 scheduler_->SetTimeSourceForTesting(
979 make_scoped_ptr(new TestTimeSource(clock_)));
974 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 980 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
975 981
976 EnsureUrgentPolicyUpdatePostedOnMainThread(); 982 EnsureUrgentPolicyUpdatePostedOnMainThread();
977 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1)); 983 ScheduleDelayedPolicyUpdate(base::TimeDelta::FromMilliseconds(1));
978 984
979 RunUntilIdle(); 985 RunUntilIdle();
980 986
981 // We expect both the urgent and the delayed updates to run. 987 // We expect both the urgent and the delayed updates to run.
982 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 988 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
983 } 989 }
984 990
985 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByOneInputEvent) { 991 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByOneInputEvent) {
986 RendererSchedulerImplForTest* mock_scheduler = 992 RendererSchedulerImplForTest* mock_scheduler =
987 new RendererSchedulerImplForTest(nestable_task_runner_); 993 new RendererSchedulerImplForTest(nestable_task_runner_);
988 scheduler_.reset(mock_scheduler); 994 scheduler_.reset(mock_scheduler);
989 scheduler_->SetTimeSourceForTesting(clock_); 995 scheduler_->SetTimeSourceForTesting(
996 make_scoped_ptr(new TestTimeSource(clock_)));
990 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 997 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
991 998
992 scheduler_->DidReceiveInputEventOnCompositorThread( 999 scheduler_->DidReceiveInputEventOnCompositorThread(
993 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1000 FakeInputEvent(blink::WebInputEvent::TouchStart));
994 1001
995 RunUntilIdle(); 1002 RunUntilIdle();
996 1003
997 // We expect an urgent policy update followed by a delayed one 100ms later. 1004 // We expect an urgent policy update followed by a delayed one 100ms later.
998 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 1005 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
999 } 1006 }
1000 1007
1001 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByTwoInputEvents) { 1008 TEST_F(RendererSchedulerImplTest, UpdatePolicyCountTriggeredByTwoInputEvents) {
1002 RendererSchedulerImplForTest* mock_scheduler = 1009 RendererSchedulerImplForTest* mock_scheduler =
1003 new RendererSchedulerImplForTest(nestable_task_runner_); 1010 new RendererSchedulerImplForTest(nestable_task_runner_);
1004 scheduler_.reset(mock_scheduler); 1011 scheduler_.reset(mock_scheduler);
1005 scheduler_->SetTimeSourceForTesting(clock_); 1012 scheduler_->SetTimeSourceForTesting(
1013 make_scoped_ptr(new TestTimeSource(clock_)));
1006 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1014 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1007 1015
1008 scheduler_->DidReceiveInputEventOnCompositorThread( 1016 scheduler_->DidReceiveInputEventOnCompositorThread(
1009 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1017 FakeInputEvent(blink::WebInputEvent::TouchStart));
1010 scheduler_->DidReceiveInputEventOnCompositorThread( 1018 scheduler_->DidReceiveInputEventOnCompositorThread(
1011 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1019 FakeInputEvent(blink::WebInputEvent::TouchMove));
1012 1020
1013 RunUntilIdle(); 1021 RunUntilIdle();
1014 1022
1015 // We expect an urgent policy update followed by a delayed one 100ms later. 1023 // We expect an urgent policy update followed by a delayed one 100ms later.
1016 EXPECT_EQ(2, mock_scheduler->update_policy_count_); 1024 EXPECT_EQ(2, mock_scheduler->update_policy_count_);
1017 } 1025 }
1018 1026
1019 TEST_F(RendererSchedulerImplTest, EnsureUpdatePolicyNotTriggeredTooOften) { 1027 TEST_F(RendererSchedulerImplTest, EnsureUpdatePolicyNotTriggeredTooOften) {
1020 RendererSchedulerImplForTest* mock_scheduler = 1028 RendererSchedulerImplForTest* mock_scheduler =
1021 new RendererSchedulerImplForTest(nestable_task_runner_); 1029 new RendererSchedulerImplForTest(nestable_task_runner_);
1022 scheduler_.reset(mock_scheduler); 1030 scheduler_.reset(mock_scheduler);
1023 scheduler_->SetTimeSourceForTesting(clock_); 1031 scheduler_->SetTimeSourceForTesting(
1032 make_scoped_ptr(new TestTimeSource(clock_)));
1024 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true); 1033 mock_task_runner_->SetAutoAdvanceNowToPendingTasks(true);
1025 1034
1026 scheduler_->DidReceiveInputEventOnCompositorThread( 1035 scheduler_->DidReceiveInputEventOnCompositorThread(
1027 FakeInputEvent(blink::WebInputEvent::TouchStart)); 1036 FakeInputEvent(blink::WebInputEvent::TouchStart));
1028 scheduler_->DidReceiveInputEventOnCompositorThread( 1037 scheduler_->DidReceiveInputEventOnCompositorThread(
1029 FakeInputEvent(blink::WebInputEvent::TouchMove)); 1038 FakeInputEvent(blink::WebInputEvent::TouchMove));
1030 1039
1031 // We expect the first call to IsHighPriorityWorkAnticipated to be called 1040 // We expect the first call to IsHighPriorityWorkAnticipated to be called
1032 // after recieving an input event (but before the UpdateTask was processed) to 1041 // after recieving an input event (but before the UpdateTask was processed) to
1033 // call UpdatePolicy. 1042 // call UpdatePolicy.
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
1388 RunUntilIdle(); 1397 RunUntilIdle();
1389 EXPECT_TRUE(run_order.empty()); 1398 EXPECT_TRUE(run_order.empty());
1390 1399
1391 scheduler_->ResumeTimerQueue(); 1400 scheduler_->ResumeTimerQueue();
1392 RunUntilIdle(); 1401 RunUntilIdle();
1393 EXPECT_THAT(run_order, 1402 EXPECT_THAT(run_order,
1394 testing::ElementsAre(std::string("T1"), std::string("T2"))); 1403 testing::ElementsAre(std::string("T1"), std::string("T2")));
1395 } 1404 }
1396 1405
1397 } // namespace content 1406 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698