Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2270)

Unified Diff: base/task_scheduler/scheduler_worker_pool_impl_unittest.cc

Issue 2650383007: Move Task Scheduler Single Thread Task Runners to Dedicated Threads (Closed)
Patch Set: CR Feedback Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 dfaa9c7ff3d3a8071aceda80584d98eb447622d9..d3281cc8bc4d33475054d0f0c5b6135f2796d454 100644
--- a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
+++ b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
@@ -67,7 +67,10 @@ class TaskSchedulerWorkerPoolImplTest
: service_thread_("TaskSchedulerServiceThread") {}
void SetUp() override {
- InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
+ if (GetParam() == test::ExecutionMode::SINGLE_THREADED)
+ InitializeSingleThreadWorkerPool(TimeDelta::Max());
+ else
+ InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
}
void TearDown() override {
@@ -93,6 +96,23 @@ class TaskSchedulerWorkerPoolImplTest
ASSERT_TRUE(worker_pool_);
}
+ void InitializeSingleThreadWorkerPool(TimeDelta suggested_reclaim_time) {
+ ASSERT_FALSE(worker_pool_);
+ ASSERT_FALSE(delayed_task_manager_);
+ service_thread_.Start();
+ delayed_task_manager_ =
+ base::MakeUnique<DelayedTaskManager>(service_thread_.task_runner());
+ worker_pool_ = SchedulerWorkerPoolImpl::CreateSingleThreadWorkerPool(
+ SchedulerWorkerPoolParams("TestWorkerPool", ThreadPriority::NORMAL,
+ StandbyThreadPolicy::LAZY, 1,
+ suggested_reclaim_time),
+ Bind(&TaskSchedulerWorkerPoolImplTest::
+ UnregisterSingleThreadWorkerPoolCallback,
+ Unretained(this)),
+ &task_tracker_, delayed_task_manager_.get());
+ ASSERT_TRUE(worker_pool_);
+ }
+
std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool_;
TaskTracker task_tracker_;
@@ -108,6 +128,11 @@ class TaskSchedulerWorkerPoolImplTest
worker_pool_->ReEnqueueSequence(std::move(sequence), sort_key);
}
+ void UnregisterSingleThreadWorkerPoolCallback(
+ const SchedulerWorkerPoolImpl* scheduler_worker_pool) {
+ EXPECT_EQ(worker_pool_.get(), scheduler_worker_pool);
+ }
+
DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplTest);
};
@@ -257,10 +282,14 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, PostTasksWithOneAvailableWorker) {
// Post blocking tasks to keep all workers busy except one until |event| is
// signaled. Use different factories so that tasks are added to different
// sequences and can run simultaneously when the execution mode is SEQUENCED.
+ const size_t num_workers_in_pool =
+ (GetParam() == test::ExecutionMode::SINGLE_THREADED)
+ ? 1
+ : kNumWorkersInWorkerPool;
WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
WaitableEvent::InitialState::NOT_SIGNALED);
std::vector<std::unique_ptr<test::TestTaskFactory>> blocked_task_factories;
- for (size_t i = 0; i < (kNumWorkersInWorkerPool - 1); ++i) {
+ for (size_t i = 0; i < (num_workers_in_pool - 1); ++i) {
blocked_task_factories.push_back(MakeUnique<test::TestTaskFactory>(
CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
GetParam()));
@@ -291,10 +320,14 @@ TEST_P(TaskSchedulerWorkerPoolImplTest, Saturate) {
// tasks/sequences running simultaneously. Use different factories so that the
// blocking tasks are added to different sequences and can run simultaneously
// when the execution mode is SEQUENCED.
+ const size_t num_workers_in_pool =
+ (GetParam() == test::ExecutionMode::SINGLE_THREADED)
+ ? 1
+ : kNumWorkersInWorkerPool;
WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
WaitableEvent::InitialState::NOT_SIGNALED);
std::vector<std::unique_ptr<test::TestTaskFactory>> factories;
- for (size_t i = 0; i < kNumWorkersInWorkerPool; ++i) {
+ for (size_t i = 0; i < num_workers_in_pool; ++i) {
factories.push_back(MakeUnique<test::TestTaskFactory>(
CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam()),
GetParam()));
@@ -388,9 +421,7 @@ class TaskSchedulerWorkerPoolImplSingleWorkerTest
TaskSchedulerWorkerPoolImplSingleWorkerTest() = default;
protected:
- void SetUp() override {
- InitializeWorkerPool(TimeDelta::Max(), 1);
- }
+ void SetUp() override { InitializeSingleThreadWorkerPool(TimeDelta::Max()); }
private:
DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplSingleWorkerTest);
@@ -452,7 +483,7 @@ class TaskSchedulerWorkerPoolSingleThreadedTest
protected:
void SetUp() override {
- InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+ InitializeSingleThreadWorkerPool(kReclaimTimeForDetachTests);
}
TaskSchedulerWorkerPoolSingleThreadedTest() = default;
@@ -738,13 +769,11 @@ void VerifyThreadIdIsNot(PlatformThreadId thread_id) {
} // namespace
TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
- InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+ InitializeSingleThreadWorkerPool(kReclaimTimeForDetachTests);
// This test assumes that the TaskRunners aren't assigned to the same worker.
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;
@@ -758,7 +787,6 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
// - Make sure it isn't on top of the idle stack by waking up another
// SchedulerWorker and waiting until it goes back to sleep.
// - Release |task_runner|.
- other_task_runner->PostTask(FROM_HERE, Bind(&VerifyThreadIdIsNot, thread_id));
worker_pool_->WaitForAllWorkersIdleForTesting();
task_runner = nullptr;
« no previous file with comments | « base/task_scheduler/scheduler_worker_pool_impl.cc ('k') | base/task_scheduler/scheduler_worker_pool_params.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698