| 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 |