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 "content/child/scheduler/task_queue_manager.h" | 5 #include "content/child/scheduler/task_queue_manager.h" |
6 | 6 |
7 #include "base/threading/thread.h" | 7 #include "base/threading/thread.h" |
8 #include "cc/test/ordered_simple_task_runner.h" | 8 #include "cc/test/ordered_simple_task_runner.h" |
9 #include "cc/test/test_now_source.h" | 9 #include "cc/test/test_now_source.h" |
10 #include "content/child/scheduler/nestable_task_runner_for_test.h" | 10 #include "content/child/scheduler/nestable_task_runner_for_test.h" |
11 #include "content/child/scheduler/scheduler_message_loop_delegate.h" | 11 #include "content/child/scheduler/scheduler_message_loop_delegate.h" |
12 #include "content/child/scheduler/task_queue_selector.h" | 12 #include "content/child/scheduler/task_queue_selector.h" |
| 13 #include "content/test/test_time_source.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
14 | 15 |
15 using testing::ElementsAre; | 16 using testing::ElementsAre; |
16 using testing::_; | 17 using testing::_; |
17 | 18 |
18 namespace content { | 19 namespace content { |
19 namespace { | 20 namespace { |
20 | 21 |
21 class SelectorForTest : public TaskQueueSelector { | 22 class SelectorForTest : public TaskQueueSelector { |
22 public: | 23 public: |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 }; | 117 }; |
117 | 118 |
118 void Initialize(size_t num_queues, SelectorType type) { | 119 void Initialize(size_t num_queues, SelectorType type) { |
119 now_src_ = cc::TestNowSource::Create(1000); | 120 now_src_ = cc::TestNowSource::Create(1000); |
120 test_task_runner_ = | 121 test_task_runner_ = |
121 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(now_src_, false)); | 122 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(now_src_, false)); |
122 selector_ = make_scoped_ptr(createSelectorForTest(type)); | 123 selector_ = make_scoped_ptr(createSelectorForTest(type)); |
123 manager_ = make_scoped_ptr(new TaskQueueManager( | 124 manager_ = make_scoped_ptr(new TaskQueueManager( |
124 num_queues, NestableTaskRunnerForTest::Create(test_task_runner_.get()), | 125 num_queues, NestableTaskRunnerForTest::Create(test_task_runner_.get()), |
125 selector_.get(), "test.scheduler")); | 126 selector_.get(), "test.scheduler")); |
126 manager_->SetTimeSourceForTesting(now_src_); | 127 manager_->SetTimeSourceForTesting( |
| 128 make_scoped_ptr(new TestTimeSource(now_src_))); |
127 | 129 |
128 EXPECT_EQ(num_queues, selector_->work_queues().size()); | 130 EXPECT_EQ(num_queues, selector_->work_queues().size()); |
129 } | 131 } |
130 | 132 |
131 void InitializeWithRealMessageLoop(size_t num_queues, SelectorType type) { | 133 void InitializeWithRealMessageLoop(size_t num_queues, SelectorType type) { |
132 message_loop_.reset(new base::MessageLoop()); | 134 message_loop_.reset(new base::MessageLoop()); |
133 selector_ = make_scoped_ptr(createSelectorForTest(type)); | 135 selector_ = make_scoped_ptr(createSelectorForTest(type)); |
134 manager_ = make_scoped_ptr(new TaskQueueManager( | 136 manager_ = make_scoped_ptr(new TaskQueueManager( |
135 num_queues, SchedulerMessageLoopDelegate::Create(message_loop_.get()), | 137 num_queues, SchedulerMessageLoopDelegate::Create(message_loop_.get()), |
136 selector_.get(), "test.scheduler")); | 138 selector_.get(), "test.scheduler")); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 EXPECT_THAT(run_order, ElementsAre(1, 3, 5, 2, 4, 6)); | 218 EXPECT_THAT(run_order, ElementsAre(1, 3, 5, 2, 4, 6)); |
217 } | 219 } |
218 | 220 |
219 void NopTask() { | 221 void NopTask() { |
220 } | 222 } |
221 | 223 |
222 TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) { | 224 TEST_F(TaskQueueManagerTest, NowNotCalledWhenThereAreNoDelayedTasks) { |
223 Initialize(3u, SelectorType::Explicit); | 225 Initialize(3u, SelectorType::Explicit); |
224 | 226 |
225 scoped_refptr<cc::TestNowSource> now_src = cc::TestNowSource::Create(1000); | 227 scoped_refptr<cc::TestNowSource> now_src = cc::TestNowSource::Create(1000); |
226 manager_->SetTimeSourceForTesting(now_src); | 228 manager_->SetTimeSourceForTesting( |
| 229 make_scoped_ptr(new TestTimeSource(now_src))); |
227 | 230 |
228 scoped_refptr<base::SingleThreadTaskRunner> runners[3] = { | 231 scoped_refptr<base::SingleThreadTaskRunner> runners[3] = { |
229 manager_->TaskRunnerForQueue(0), | 232 manager_->TaskRunnerForQueue(0), |
230 manager_->TaskRunnerForQueue(1), | 233 manager_->TaskRunnerForQueue(1), |
231 manager_->TaskRunnerForQueue(2)}; | 234 manager_->TaskRunnerForQueue(2)}; |
232 | 235 |
233 selector_->AppendQueueToService(0); | 236 selector_->AppendQueueToService(0); |
234 selector_->AppendQueueToService(1); | 237 selector_->AppendQueueToService(1); |
235 selector_->AppendQueueToService(2); | 238 selector_->AppendQueueToService(2); |
236 selector_->AppendQueueToService(0); | 239 selector_->AppendQueueToService(0); |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
980 scoped_refptr<base::SingleThreadTaskRunner> runner = | 983 scoped_refptr<base::SingleThreadTaskRunner> runner = |
981 manager_->TaskRunnerForQueue(0); | 984 manager_->TaskRunnerForQueue(0); |
982 EXPECT_TRUE(runner->RunsTasksOnCurrentThread()); | 985 EXPECT_TRUE(runner->RunsTasksOnCurrentThread()); |
983 manager_.reset(); | 986 manager_.reset(); |
984 EXPECT_TRUE(runner->RunsTasksOnCurrentThread()); | 987 EXPECT_TRUE(runner->RunsTasksOnCurrentThread()); |
985 } | 988 } |
986 | 989 |
987 TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) { | 990 TEST_F(TaskQueueManagerTest, NextPendingDelayedTaskRunTime) { |
988 scoped_refptr<cc::TestNowSource> clock(cc::TestNowSource::Create()); | 991 scoped_refptr<cc::TestNowSource> clock(cc::TestNowSource::Create()); |
989 Initialize(2u, SelectorType::Explicit); | 992 Initialize(2u, SelectorType::Explicit); |
990 manager_->SetTimeSourceForTesting(clock); | 993 manager_->SetTimeSourceForTesting(make_scoped_ptr(new TestTimeSource(clock))); |
991 | 994 |
992 scoped_refptr<base::SingleThreadTaskRunner> runners[2] = { | 995 scoped_refptr<base::SingleThreadTaskRunner> runners[2] = { |
993 manager_->TaskRunnerForQueue(0), manager_->TaskRunnerForQueue(1)}; | 996 manager_->TaskRunnerForQueue(0), manager_->TaskRunnerForQueue(1)}; |
994 | 997 |
995 // With no delayed tasks. | 998 // With no delayed tasks. |
996 EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); | 999 EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); |
997 | 1000 |
998 // With a non-delayed task. | 1001 // With a non-delayed task. |
999 runners[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); | 1002 runners[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
1000 EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); | 1003 EXPECT_TRUE(manager_->NextPendingDelayedTaskRunTime().is_null()); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1094 TEST_F(TaskQueueManagerTest, GetAndClearTaskWasRunBitmap_ManyQueues) { | 1097 TEST_F(TaskQueueManagerTest, GetAndClearTaskWasRunBitmap_ManyQueues) { |
1095 Initialize(64u, SelectorType::Automatic); | 1098 Initialize(64u, SelectorType::Automatic); |
1096 | 1099 |
1097 manager_->TaskRunnerForQueue(63)->PostTask(FROM_HERE, base::Bind(&NopTask)); | 1100 manager_->TaskRunnerForQueue(63)->PostTask(FROM_HERE, base::Bind(&NopTask)); |
1098 test_task_runner_->RunUntilIdle(); | 1101 test_task_runner_->RunUntilIdle(); |
1099 EXPECT_EQ(1ull << 63, manager_->GetAndClearTaskWasRunOnQueueBitmap()); | 1102 EXPECT_EQ(1ull << 63, manager_->GetAndClearTaskWasRunOnQueueBitmap()); |
1100 } | 1103 } |
1101 | 1104 |
1102 } // namespace | 1105 } // namespace |
1103 } // namespace content | 1106 } // namespace content |
OLD | NEW |