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

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: 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..b961203864c936e580922d543ac0ed4e4ad6e4e4 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,32 @@ 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_ = CreateSingleThreadWorkerPool(
+ suggested_reclaim_time,
+ Bind(&TaskSchedulerWorkerPoolImplTest::
+ UnregisterSingleThreadWorkerPoolCallback,
+ Unretained(this)));
+ ASSERT_TRUE(worker_pool_);
+ }
+
+ std::unique_ptr<SchedulerWorkerPoolImpl> CreateSingleThreadWorkerPool(
+ TimeDelta suggested_reclaim_time,
+ SchedulerWorkerPoolImpl::UnregisterSingleThreadWorkerPoolCallback
+ unregister_single_thread_worker_pool_callback) {
+ return SchedulerWorkerPoolImpl::CreateSingleThreadWorkerPool(
+ SchedulerWorkerPoolParams("TestWorkerPool", ThreadPriority::NORMAL,
+ StandbyThreadPolicy::LAZY, 1,
+ suggested_reclaim_time),
+ unregister_single_thread_worker_pool_callback, &task_tracker_,
+ delayed_task_manager_.get());
+ }
+
std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool_;
TaskTracker task_tracker_;
@@ -108,6 +137,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 +291,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 +329,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 +430,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 +492,7 @@ class TaskSchedulerWorkerPoolSingleThreadedTest
protected:
void SetUp() override {
- InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+ InitializeSingleThreadWorkerPool(kReclaimTimeForDetachTests);
}
TaskSchedulerWorkerPoolSingleThreadedTest() = default;
@@ -738,13 +778,19 @@ void VerifyThreadIdIsNot(PlatformThreadId thread_id) {
} // namespace
TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
- InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
+ InitializeSingleThreadWorkerPool(kReclaimTimeForDetachTests);
+ std::unique_ptr<SchedulerWorkerPoolImpl> other_worker_pool =
+ CreateSingleThreadWorkerPool(
+ kReclaimTimeForDetachTests,
+ base::Bind(
+ [](const SchedulerWorkerPoolImpl* scheduler_worker_pool) {}));
// This test assumes that the TaskRunners aren't assigned to the same worker.
auto task_runner =
worker_pool_->CreateSingleThreadTaskRunnerWithTraits(TaskTraits());
auto other_task_runner =
fdoray 2017/01/27 16:47:35 |other_task_runner| was used to change the order o
robliao 2017/01/27 21:25:41 Removed!
- worker_pool_->CreateSingleThreadTaskRunnerWithTraits(TaskTraits());
+ other_worker_pool->CreateSingleThreadTaskRunnerWithTraits(TaskTraits());
+ other_worker_pool->DisallowWorkerDetachmentForTesting();
// Post 3 tasks and wait until they run.
PlatformThreadId thread_id;
@@ -760,6 +806,7 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
// - Release |task_runner|.
other_task_runner->PostTask(FROM_HERE, Bind(&VerifyThreadIdIsNot, thread_id));
worker_pool_->WaitForAllWorkersIdleForTesting();
+ other_worker_pool->WaitForAllWorkersIdleForTesting();
task_runner = nullptr;
// Allow the SchedulerWorker that was associated with |task_runner| to detach.
@@ -771,6 +818,7 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0));
EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3));
EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10));
+ other_worker_pool->JoinForTesting();
}
TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitLazy) {

Powered by Google App Engine
This is Rietveld 408576698