| Index: base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
|
| diff --git a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
|
| index 412d75e4544e1193585584fe8e193c93f03fe36c..1858ac5cdbd972cd80e88adb6bf1de8631c4c3e4 100644
|
| --- a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
|
| +++ b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
|
| @@ -30,6 +30,7 @@
|
| #include "base/task_scheduler/sequence_sort_key.h"
|
| #include "base/task_scheduler/task_tracker.h"
|
| #include "base/task_scheduler/test_task_factory.h"
|
| +#include "base/task_scheduler/test_utils.h"
|
| #include "base/test/gtest_util.h"
|
| #include "base/test/test_simple_task_runner.h"
|
| #include "base/test/test_timeouts.h"
|
| @@ -60,7 +61,7 @@ constexpr TimeDelta kExtraTimeToWaitForDetach =
|
| using IORestriction = SchedulerWorkerPoolParams::IORestriction;
|
|
|
| class TaskSchedulerWorkerPoolImplTest
|
| - : public testing::TestWithParam<ExecutionMode> {
|
| + : public testing::TestWithParam<test::ExecutionMode> {
|
| protected:
|
| TaskSchedulerWorkerPoolImplTest()
|
| : service_thread_("TaskSchedulerServiceThread") {}
|
| @@ -110,6 +111,21 @@ class TaskSchedulerWorkerPoolImplTest
|
| DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplTest);
|
| };
|
|
|
| +scoped_refptr<TaskRunner> CreateTaskRunnerWithExecutionMode(
|
| + SchedulerWorkerPoolImpl* worker_pool,
|
| + test::ExecutionMode execution_mode) {
|
| + switch (execution_mode) {
|
| + case test::ExecutionMode::PARALLEL:
|
| + return worker_pool->CreateTaskRunnerWithTraits(TaskTraits());
|
| + case test::ExecutionMode::SEQUENCED:
|
| + return worker_pool->CreateSequencedTaskRunnerWithTraits(TaskTraits());
|
| + case test::ExecutionMode::SINGLE_THREADED:
|
| + return worker_pool->CreateSingleThreadTaskRunnerWithTraits(TaskTraits());
|
| + }
|
| + ADD_FAILURE() << "Unknown ExecutionMode";
|
| + return nullptr;
|
| +}
|
| +
|
| using PostNestedTask = test::TestTaskFactory::PostNestedTask;
|
|
|
| class ThreadPostingTasks : public SimpleThread {
|
| @@ -125,15 +141,14 @@ class ThreadPostingTasks : public SimpleThread {
|
| // |worker_pool| are idle before posting a new task. If |post_nested_task| is
|
| // YES, each task posted by this thread posts another task when it runs.
|
| ThreadPostingTasks(SchedulerWorkerPoolImpl* worker_pool,
|
| - ExecutionMode execution_mode,
|
| + test::ExecutionMode execution_mode,
|
| WaitBeforePostTask wait_before_post_task,
|
| PostNestedTask post_nested_task)
|
| : SimpleThread("ThreadPostingTasks"),
|
| worker_pool_(worker_pool),
|
| wait_before_post_task_(wait_before_post_task),
|
| post_nested_task_(post_nested_task),
|
| - factory_(worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(),
|
| - execution_mode),
|
| + factory_(CreateTaskRunnerWithExecutionMode(worker_pool, execution_mode),
|
| execution_mode) {
|
| DCHECK(worker_pool_);
|
| }
|
| @@ -245,7 +260,7 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, PostTasksWithOneAvailableWorker) {
|
| std::vector<std::unique_ptr<test::TestTaskFactory>> blocked_task_factories;
|
| for (size_t i = 0; i < (kNumWorkersInWorkerPool - 1); ++i) {
|
| blocked_task_factories.push_back(MakeUnique<test::TestTaskFactory>(
|
| - worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(), GetParam()),
|
| + CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
|
| GetParam()));
|
| EXPECT_TRUE(blocked_task_factories.back()->PostTask(
|
| PostNestedTask::NO, Bind(&WaitableEvent::Wait, Unretained(&event))));
|
| @@ -255,7 +270,7 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, PostTasksWithOneAvailableWorker) {
|
| // Post |kNumTasksPostedPerThread| tasks that should all run despite the fact
|
| // that only one worker in |worker_pool_| isn't busy.
|
| test::TestTaskFactory short_task_factory(
|
| - worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(), GetParam()),
|
| + CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
|
| GetParam());
|
| for (size_t i = 0; i < kNumTasksPostedPerThread; ++i)
|
| EXPECT_TRUE(short_task_factory.PostTask(PostNestedTask::NO, Closure()));
|
| @@ -279,7 +294,7 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, Saturate) {
|
| std::vector<std::unique_ptr<test::TestTaskFactory>> factories;
|
| for (size_t i = 0; i < kNumWorkersInWorkerPool; ++i) {
|
| factories.push_back(MakeUnique<test::TestTaskFactory>(
|
| - worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(), GetParam()),
|
| + CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
|
| GetParam()));
|
| EXPECT_TRUE(factories.back()->PostTask(
|
| PostNestedTask::NO, Bind(&WaitableEvent::Wait, Unretained(&event))));
|
| @@ -297,7 +312,7 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, Saturate) {
|
| // Verify that a Task can't be posted after shutdown.
|
| TEST_P(TaskSchedulerWorkerPoolImplTest, PostTaskAfterShutdown) {
|
| auto task_runner =
|
| - worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(), GetParam());
|
| + CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam());
|
| task_tracker_.Shutdown();
|
| EXPECT_FALSE(task_runner->PostTask(FROM_HERE, Bind(&ShouldNotRunCallback)));
|
| }
|
| @@ -309,7 +324,7 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, PostDelayedTask) {
|
| // Post a task with a short delay.
|
| WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| - EXPECT_TRUE(worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(), GetParam())
|
| + EXPECT_TRUE(CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam())
|
| ->PostDelayedTask(FROM_HERE, Bind(&WaitableEvent::Signal,
|
| Unretained(&task_ran)),
|
| TestTimeouts::tiny_timeout()));
|
| @@ -329,10 +344,9 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, PostDelayedTask) {
|
| // returns false when called from a task that isn't part of the sequence.
|
| TEST_P(TaskSchedulerWorkerPoolImplTest, SequencedRunsTasksOnCurrentThread) {
|
| scoped_refptr<TaskRunner> task_runner(
|
| - worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(), GetParam()));
|
| - scoped_refptr<TaskRunner> sequenced_task_runner(
|
| - worker_pool_->CreateTaskRunnerWithTraits(TaskTraits(),
|
| - ExecutionMode::SEQUENCED));
|
| + CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()));
|
| + scoped_refptr<SequencedTaskRunner> sequenced_task_runner(
|
| + worker_pool_->CreateSequencedTaskRunnerWithTraits(TaskTraits()));
|
|
|
| WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| @@ -352,13 +366,14 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, SequencedRunsTasksOnCurrentThread) {
|
|
|
| INSTANTIATE_TEST_CASE_P(Parallel,
|
| TaskSchedulerWorkerPoolImplTest,
|
| - ::testing::Values(ExecutionMode::PARALLEL));
|
| + ::testing::Values(test::ExecutionMode::PARALLEL));
|
| INSTANTIATE_TEST_CASE_P(Sequenced,
|
| TaskSchedulerWorkerPoolImplTest,
|
| - ::testing::Values(ExecutionMode::SEQUENCED));
|
| -INSTANTIATE_TEST_CASE_P(SingleThreaded,
|
| - TaskSchedulerWorkerPoolImplTest,
|
| - ::testing::Values(ExecutionMode::SINGLE_THREADED));
|
| + ::testing::Values(test::ExecutionMode::SEQUENCED));
|
| +INSTANTIATE_TEST_CASE_P(
|
| + SingleThreaded,
|
| + TaskSchedulerWorkerPoolImplTest,
|
| + ::testing::Values(test::ExecutionMode::SINGLE_THREADED));
|
|
|
| namespace {
|
|
|
| @@ -407,7 +422,7 @@ TEST_P(TaskSchedulerWorkerPoolImplIORestrictionTest, IORestriction) {
|
|
|
| WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| - worker_pool->CreateTaskRunnerWithTraits(TaskTraits(), ExecutionMode::PARALLEL)
|
| + worker_pool->CreateTaskRunnerWithTraits(TaskTraits())
|
| ->PostTask(FROM_HERE, Bind(&ExpectIORestriction, GetParam(), &task_ran));
|
| task_ran.Wait();
|
|
|
| @@ -452,10 +467,9 @@ class TaskSchedulerWorkerPoolSingleThreadedTest
|
| // Verify that thread resources for a single thread remain.
|
| TEST_F(TaskSchedulerWorkerPoolSingleThreadedTest, SingleThreadTask) {
|
| auto single_thread_task_runner =
|
| - worker_pool_->CreateTaskRunnerWithTraits(
|
| - TaskTraits().
|
| - WithShutdownBehavior(TaskShutdownBehavior::BLOCK_SHUTDOWN),
|
| - ExecutionMode::SINGLE_THREADED);
|
| + worker_pool_->CreateSingleThreadTaskRunnerWithTraits(
|
| + TaskTraits().WithShutdownBehavior(
|
| + TaskShutdownBehavior::BLOCK_SHUTDOWN));
|
| single_thread_task_runner->PostTask(
|
| FROM_HERE,
|
| Bind(&TaskSchedulerWorkerPoolSingleThreadedTest::InitializeThreadChecker,
|
| @@ -527,10 +541,9 @@ TEST_F(TaskSchedulerWorkerPoolCheckTlsReuse, CheckDetachedThreads) {
|
| // Saturate the threads and mark each thread with a magic TLS value.
|
| std::vector<std::unique_ptr<test::TestTaskFactory>> factories;
|
| for (size_t i = 0; i < kNumWorkersInWorkerPool; ++i) {
|
| - factories.push_back(WrapUnique(new test::TestTaskFactory(
|
| - worker_pool_->CreateTaskRunnerWithTraits(
|
| - TaskTraits(), ExecutionMode::PARALLEL),
|
| - ExecutionMode::PARALLEL)));
|
| + factories.push_back(MakeUnique<test::TestTaskFactory>(
|
| + worker_pool_->CreateTaskRunnerWithTraits(TaskTraits()),
|
| + test::ExecutionMode::PARALLEL));
|
| ASSERT_TRUE(factories.back()->PostTask(
|
| PostNestedTask::NO,
|
| Bind(&TaskSchedulerWorkerPoolCheckTlsReuse::SetTlsValueAndWait,
|
| @@ -600,8 +613,8 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaits) {
|
| WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
|
| - auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(
|
| - TaskTraits(), ExecutionMode::SEQUENCED);
|
| + auto task_runner =
|
| + worker_pool_->CreateSequencedTaskRunnerWithTraits(TaskTraits());
|
|
|
| // Post a task.
|
| task_runner->PostTask(FROM_HERE,
|
| @@ -644,8 +657,7 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaitsWithDetach) {
|
| WaitableEvent tasks_can_exit_event(WaitableEvent::ResetPolicy::MANUAL,
|
| WaitableEvent::InitialState::NOT_SIGNALED);
|
| InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
|
| - auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(
|
| - TaskTraits(), ExecutionMode::PARALLEL);
|
| + auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(TaskTraits());
|
|
|
| // Post tasks to saturate the pool.
|
| std::vector<std::unique_ptr<WaitableEvent>> task_started_events;
|
| @@ -721,10 +733,10 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
|
| InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
|
|
|
| // This test assumes that the TaskRunners aren't assigned to the same worker.
|
| - auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(
|
| - TaskTraits(), ExecutionMode::SINGLE_THREADED);
|
| - auto other_task_runner = worker_pool_->CreateTaskRunnerWithTraits(
|
| - TaskTraits(), ExecutionMode::SINGLE_THREADED);
|
| + auto task_runner =
|
| + worker_pool_->CreateSingleThreadTaskRunnerWithTraits(TaskTraits());
|
| + auto other_task_runner =
|
| + worker_pool_->CreateSingleThreadTaskRunnerWithTraits(TaskTraits());
|
|
|
| // Post 3 tasks and wait until they run.
|
| PlatformThreadId thread_id;
|
|
|