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..011d4bed42dc9022bdce245ca7757849b35d6674 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,45 @@ std::vector<TraitsExecutionModePair> GetTraitsExecutionModePairs() { |
return params; |
} |
+size_t GetThreadPoolIndexForTraits(const TaskTraits& traits) { |
+ if (traits.with_file_io()) |
+ return traits.priority() == TaskPriority::BACKGROUND ? 1U : 3U; |
robliao
2016/06/23 22:37:03
Should we encourage that the return values of thes
gab
2016/06/27 18:48:23
I would like for implementations of this to look s
fdoray
2016/06/27 19:45:04
I now use an enum. Not sure that an enum class tha
|
+ return traits.priority() == TaskPriority::BACKGROUND ? 0U : 2U; |
+} |
+ |
+class TaskSchedulerImplTest |
+ : public testing::TestWithParam<TraitsExecutionModePair> { |
+ protected: |
+ TaskSchedulerImplTest() = default; |
+ |
+ void SetUp() override { |
+ using IORestriction = SchedulerWorkerPoolImpl::IORestriction; |
+ |
+ std::vector<TaskSchedulerImpl::WorkerPoolCreationArgs> |
robliao
2016/06/23 22:37:03
Since the vector is set up at the get go, we can m
fdoray
2016/06/27 19:45:05
The vector can no longer be const.
robliao
2016/06/28 00:24:24
An alternative is to do a post examination of the
fdoray
2016/06/28 15:23:58
I prefer not to define operator== just for this.
|
+ worker_pool_creation_args{ |
gab
2016/06/27 18:48:23
Space before '{' or is no space the style for thes
fdoray
2016/06/27 19:45:05
git cl format removes the space when I add it...
|
+ {"TaskSchedulerBackground", ThreadPriority::BACKGROUND, |
+ IORestriction::DISALLOWED, 1U}, |
+ {"TaskSchedulerBackgroundFileIO", ThreadPriority::BACKGROUND, |
+ IORestriction::ALLOWED, 3U}, |
+ {"TaskSchedulerForeground", ThreadPriority::NORMAL, |
+ IORestriction::DISALLOWED, 4U}, |
+ {"TaskSchedulerForegroundFileIO", ThreadPriority::NORMAL, |
+ IORestriction::ALLOWED, 12U}, |
gab
2016/06/27 18:48:23
Reinforcing my comment above: I think impls should
fdoray
2016/06/27 19:45:05
Done.
|
+ }; |
+ |
+ scheduler_ = TaskSchedulerImpl::Create(worker_pool_creation_args, |
+ Bind(&GetThreadPoolIndexForTraits)); |
+ EXPECT_TRUE(scheduler_); |
robliao
2016/06/23 22:37:03
This should probably be an ASSERT since the guaran
gab
2016/06/27 18:48:23
Agreed, plus the rest of the test is meaningless i
fdoray
2016/06/27 19:45:05
Done.
|
+ } |
+ |
+ 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 +216,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 +229,6 @@ TEST(TaskSchedulerImplTest, MultipleTraitsExecutionModePairs) { |
thread->WaitForAllTasksToRun(); |
thread->Join(); |
} |
- |
- scheduler->JoinForTesting(); |
} |
// TODO(fdoray): Add tests with Sequences that move around worker pools once |