| Index: base/task_scheduler/task_scheduler_impl_unittest.cc
|
| diff --git a/base/task_scheduler/task_scheduler_impl_unittest.cc b/base/task_scheduler/task_scheduler_impl_unittest.cc
|
| index e79a381c350ac0d2ec5d000adabc365b90fc429b..c14056ca670053a6c1f566a6ee19eca240f2feda 100644
|
| --- a/base/task_scheduler/task_scheduler_impl_unittest.cc
|
| +++ b/base/task_scheduler/task_scheduler_impl_unittest.cc
|
| @@ -38,23 +38,6 @@ struct TraitsExecutionModePair {
|
| ExecutionMode execution_mode;
|
| };
|
|
|
| -class TaskSchedulerImplTest
|
| - : public testing::TestWithParam<TraitsExecutionModePair> {
|
| - protected:
|
| - TaskSchedulerImplTest() = default;
|
| -
|
| - void SetUp() override {
|
| - scheduler_ = TaskSchedulerImpl::Create();
|
| - EXPECT_TRUE(scheduler_);
|
| - }
|
| - void TearDown() override { scheduler_->JoinForTesting(); }
|
| -
|
| - std::unique_ptr<TaskSchedulerImpl> scheduler_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TaskSchedulerImplTest);
|
| -};
|
| -
|
| #if ENABLE_THREAD_RESTRICTIONS
|
| // Returns whether I/O calls are allowed on the current thread.
|
| bool GetIOAllowed() {
|
| @@ -152,6 +135,65 @@ std::vector<TraitsExecutionModePair> GetTraitsExecutionModePairs() {
|
| return params;
|
| }
|
|
|
| +enum WorkerPoolType {
|
| + BACKGROUND_WORKER_POOL = 0,
|
| + BACKGROUND_FILE_IO_WORKER_POOL,
|
| + FOREGROUND_WORKER_POOL,
|
| + FOREGROUND_FILE_IO_WORKER_POOL,
|
| +};
|
| +
|
| +size_t GetThreadPoolIndexForTraits(const TaskTraits& traits) {
|
| + if (traits.with_file_io()) {
|
| + return traits.priority() == TaskPriority::BACKGROUND
|
| + ? BACKGROUND_FILE_IO_WORKER_POOL
|
| + : FOREGROUND_FILE_IO_WORKER_POOL;
|
| + }
|
| + return traits.priority() == TaskPriority::BACKGROUND ? BACKGROUND_WORKER_POOL
|
| + : FOREGROUND_WORKER_POOL;
|
| +}
|
| +
|
| +class TaskSchedulerImplTest
|
| + : public testing::TestWithParam<TraitsExecutionModePair> {
|
| + protected:
|
| + TaskSchedulerImplTest() = default;
|
| +
|
| + void SetUp() override {
|
| + using IORestriction = SchedulerWorkerPoolImpl::IORestriction;
|
| +
|
| + std::vector<TaskSchedulerImpl::WorkerPoolCreationArgs> worker_pools;
|
| +
|
| + ASSERT_EQ(BACKGROUND_WORKER_POOL, worker_pools.size());
|
| + worker_pools.push_back({"TaskSchedulerBackground",
|
| + ThreadPriority::BACKGROUND,
|
| + IORestriction::DISALLOWED, 1U});
|
| +
|
| + ASSERT_EQ(BACKGROUND_FILE_IO_WORKER_POOL, worker_pools.size());
|
| + worker_pools.push_back({"TaskSchedulerBackgroundFileIO",
|
| + ThreadPriority::BACKGROUND, IORestriction::ALLOWED,
|
| + 3U});
|
| +
|
| + ASSERT_EQ(FOREGROUND_WORKER_POOL, worker_pools.size());
|
| + worker_pools.push_back({"TaskSchedulerForeground", ThreadPriority::NORMAL,
|
| + IORestriction::DISALLOWED, 4U});
|
| +
|
| + ASSERT_EQ(FOREGROUND_FILE_IO_WORKER_POOL, worker_pools.size());
|
| + worker_pools.push_back({"TaskSchedulerForegroundFileIO",
|
| + ThreadPriority::NORMAL, IORestriction::ALLOWED,
|
| + 12U});
|
| +
|
| + scheduler_ = TaskSchedulerImpl::Create(worker_pools,
|
| + Bind(&GetThreadPoolIndexForTraits));
|
| + ASSERT_TRUE(scheduler_);
|
| + }
|
| +
|
| + void TearDown() override { scheduler_->JoinForTesting(); }
|
| +
|
| + std::unique_ptr<TaskSchedulerImpl> scheduler_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TaskSchedulerImplTest);
|
| +};
|
| +
|
| } // namespace
|
|
|
| // Verifies that a Task posted via PostTaskWithTraits with parameterized
|
| @@ -194,13 +236,11 @@ INSTANTIATE_TEST_CASE_P(OneTraitsExecutionModePair,
|
| // TaskTraits and ExecutionModes. Verifies that each Task runs on a thread with
|
| // the expected priority and I/O restrictions and respects the characteristics
|
| // of its ExecutionMode.
|
| -TEST(TaskSchedulerImplTest, MultipleTraitsExecutionModePairs) {
|
| - std::unique_ptr<TaskSchedulerImpl> scheduler = TaskSchedulerImpl::Create();
|
| -
|
| +TEST_F(TaskSchedulerImplTest, MultipleTraitsExecutionModePairs) {
|
| std::vector<std::unique_ptr<ThreadPostingTasks>> threads_posting_tasks;
|
| for (const auto& traits_execution_mode_pair : GetTraitsExecutionModePairs()) {
|
| threads_posting_tasks.push_back(WrapUnique(new ThreadPostingTasks(
|
| - scheduler.get(), traits_execution_mode_pair.traits,
|
| + scheduler_.get(), traits_execution_mode_pair.traits,
|
| traits_execution_mode_pair.execution_mode)));
|
| threads_posting_tasks.back()->Start();
|
| }
|
| @@ -209,8 +249,6 @@ TEST(TaskSchedulerImplTest, MultipleTraitsExecutionModePairs) {
|
| thread->WaitForAllTasksToRun();
|
| thread->Join();
|
| }
|
| -
|
| - scheduler->JoinForTesting();
|
| }
|
|
|
| // TODO(fdoray): Add tests with Sequences that move around worker pools once
|
|
|