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