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 "components/scheduler/child/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 "components/scheduler/child/nestable_task_runner_for_test.h" |
11 #include "content/child/scheduler/scheduler_message_loop_delegate.h" | 11 #include "components/scheduler/child/scheduler_message_loop_delegate.h" |
12 #include "content/child/scheduler/task_queue_selector.h" | 12 #include "components/scheduler/child/task_queue_selector.h" |
13 #include "content/test/test_time_source.h" | 13 #include "components/scheduler/child/test_time_source.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
15 | 15 |
16 using testing::ElementsAre; | 16 using testing::ElementsAre; |
17 using testing::_; | 17 using testing::_; |
18 | 18 |
19 namespace content { | 19 namespace scheduler { |
20 namespace { | 20 namespace { |
21 | 21 |
22 class SelectorForTest : public TaskQueueSelector { | 22 class SelectorForTest : public TaskQueueSelector { |
23 public: | 23 public: |
24 ~SelectorForTest() override {} | 24 ~SelectorForTest() override {} |
25 | 25 |
26 virtual void AppendQueueToService(size_t queue_index) = 0; | 26 virtual void AppendQueueToService(size_t queue_index) = 0; |
27 | 27 |
28 virtual const std::vector<const base::TaskQueue*>& work_queues() = 0; | 28 virtual const std::vector<const base::TaskQueue*>& work_queues() = 0; |
29 | 29 |
(...skipping 22 matching lines...) Expand all Loading... |
52 } | 52 } |
53 | 53 |
54 void AppendQueueToService(size_t queue_index) override { | 54 void AppendQueueToService(size_t queue_index) override { |
55 DCHECK(false) << "Not supported"; | 55 DCHECK(false) << "Not supported"; |
56 } | 56 } |
57 | 57 |
58 const std::vector<const base::TaskQueue*>& work_queues() override { | 58 const std::vector<const base::TaskQueue*>& work_queues() override { |
59 return work_queues_; | 59 return work_queues_; |
60 } | 60 } |
61 | 61 |
62 void SetTaskQueueSelectorObserver(Observer* observer) override { | 62 void SetTaskQueueSelectorObserver(Observer* observer) override {} |
63 } | |
64 | 63 |
65 private: | 64 private: |
66 std::vector<const base::TaskQueue*> work_queues_; | 65 std::vector<const base::TaskQueue*> work_queues_; |
67 | 66 |
68 DISALLOW_COPY_AND_ASSIGN(AutomaticSelectorForTest); | 67 DISALLOW_COPY_AND_ASSIGN(AutomaticSelectorForTest); |
69 }; | 68 }; |
70 | 69 |
71 class ExplicitSelectorForTest : public SelectorForTest { | 70 class ExplicitSelectorForTest : public SelectorForTest { |
72 public: | 71 public: |
73 ExplicitSelectorForTest() {} | 72 ExplicitSelectorForTest() {} |
(...skipping 13 matching lines...) Expand all Loading... |
87 } | 86 } |
88 | 87 |
89 void AppendQueueToService(size_t queue_index) override { | 88 void AppendQueueToService(size_t queue_index) override { |
90 queues_to_service_.push_back(queue_index); | 89 queues_to_service_.push_back(queue_index); |
91 } | 90 } |
92 | 91 |
93 const std::vector<const base::TaskQueue*>& work_queues() override { | 92 const std::vector<const base::TaskQueue*>& work_queues() override { |
94 return work_queues_; | 93 return work_queues_; |
95 } | 94 } |
96 | 95 |
97 void SetTaskQueueSelectorObserver(Observer* observer) override { | 96 void SetTaskQueueSelectorObserver(Observer* observer) override {} |
98 } | |
99 | 97 |
100 private: | 98 private: |
101 std::deque<size_t> queues_to_service_; | 99 std::deque<size_t> queues_to_service_; |
102 std::vector<const base::TaskQueue*> work_queues_; | 100 std::vector<const base::TaskQueue*> work_queues_; |
103 | 101 |
104 DISALLOW_COPY_AND_ASSIGN(ExplicitSelectorForTest); | 102 DISALLOW_COPY_AND_ASSIGN(ExplicitSelectorForTest); |
105 }; | 103 }; |
106 | 104 |
107 class TaskQueueManagerTest : public testing::Test { | 105 class TaskQueueManagerTest : public testing::Test { |
108 public: | 106 public: |
109 void DeleteTaskQueueManager() { | 107 void DeleteTaskQueueManager() { manager_.reset(); } |
110 manager_.reset(); | |
111 } | |
112 | 108 |
113 protected: | 109 protected: |
114 enum class SelectorType { | 110 enum class SelectorType { |
115 Automatic, | 111 Automatic, |
116 Explicit, | 112 Explicit, |
117 }; | 113 }; |
118 | 114 |
119 void Initialize(size_t num_queues, SelectorType type) { | 115 void Initialize(size_t num_queues, SelectorType type) { |
120 now_src_ = cc::TestNowSource::Create(1000); | 116 now_src_ = cc::TestNowSource::Create(1000); |
121 test_task_runner_ = | 117 test_task_runner_ = |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 | 443 |
448 TestObject::destructor_count_ = 0; | 444 TestObject::destructor_count_ = 0; |
449 | 445 |
450 scoped_refptr<base::SingleThreadTaskRunner> runner = | 446 scoped_refptr<base::SingleThreadTaskRunner> runner = |
451 manager_->TaskRunnerForQueue(0); | 447 manager_->TaskRunnerForQueue(0); |
452 | 448 |
453 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); | 449 base::TimeDelta delay(base::TimeDelta::FromMilliseconds(10)); |
454 runner->PostDelayedTask( | 450 runner->PostDelayedTask( |
455 FROM_HERE, base::Bind(&TestObject::Run, base::Owned(new TestObject())), | 451 FROM_HERE, base::Bind(&TestObject::Run, base::Owned(new TestObject())), |
456 delay); | 452 delay); |
457 runner->PostTask( | 453 runner->PostTask(FROM_HERE, |
458 FROM_HERE, base::Bind(&TestObject::Run, base::Owned(new TestObject()))); | 454 base::Bind(&TestObject::Run, base::Owned(new TestObject()))); |
459 | 455 |
460 manager_.reset(); | 456 manager_.reset(); |
461 | 457 |
462 EXPECT_EQ(2, TestObject::destructor_count_); | 458 EXPECT_EQ(2, TestObject::destructor_count_); |
463 } | 459 } |
464 | 460 |
465 TEST_F(TaskQueueManagerTest, ManualPumping) { | 461 TEST_F(TaskQueueManagerTest, ManualPumping) { |
466 Initialize(1u, SelectorType::Automatic); | 462 Initialize(1u, SelectorType::Automatic); |
467 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL); | 463 manager_->SetPumpPolicy(0, TaskQueueManager::PumpPolicy::MANUAL); |
468 | 464 |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 | 1092 |
1097 TEST_F(TaskQueueManagerTest, GetAndClearTaskWasRunBitmap_ManyQueues) { | 1093 TEST_F(TaskQueueManagerTest, GetAndClearTaskWasRunBitmap_ManyQueues) { |
1098 Initialize(64u, SelectorType::Automatic); | 1094 Initialize(64u, SelectorType::Automatic); |
1099 | 1095 |
1100 manager_->TaskRunnerForQueue(63)->PostTask(FROM_HERE, base::Bind(&NopTask)); | 1096 manager_->TaskRunnerForQueue(63)->PostTask(FROM_HERE, base::Bind(&NopTask)); |
1101 test_task_runner_->RunUntilIdle(); | 1097 test_task_runner_->RunUntilIdle(); |
1102 EXPECT_EQ(1ull << 63, manager_->GetAndClearTaskWasRunOnQueueBitmap()); | 1098 EXPECT_EQ(1ull << 63, manager_->GetAndClearTaskWasRunOnQueueBitmap()); |
1103 } | 1099 } |
1104 | 1100 |
1105 } // namespace | 1101 } // namespace |
1106 } // namespace content | 1102 } // namespace scheduler |
OLD | NEW |