| 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 0d044ecfa7b0ed5fe434892379c6fa278b3b5816..412d75e4544e1193585584fe8e193c93f03fe36c 100644 | 
| --- a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc | 
| +++ b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc | 
| @@ -583,19 +583,14 @@ class TaskSchedulerWorkerPoolHistogramTest | 
| TaskSchedulerWorkerPoolHistogramTest() = default; | 
|  | 
| protected: | 
| +  // Override SetUp() to allow every test case to initialize a worker pool with | 
| +  // its own arguments. | 
| void SetUp() override {} | 
|  | 
| -  void TearDown() override { | 
| -    // |worker_pool_| initialization is done in test body. | 
| -    if (worker_pool_) | 
| -      worker_pool_->JoinForTesting(); | 
| -  } | 
| - | 
| private: | 
| std::unique_ptr<StatisticsRecorder> statistics_recorder_ = | 
| StatisticsRecorder::CreateTemporaryForTesting(); | 
|  | 
| - private: | 
| DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolHistogramTest); | 
| }; | 
|  | 
| @@ -709,39 +704,50 @@ TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaitsWithDetach) { | 
| worker_pool_->DisallowWorkerDetachmentForTesting(); | 
| } | 
|  | 
| +namespace { | 
| + | 
| +void CaptureThreadId(PlatformThreadId* thread_id) { | 
| +  ASSERT_TRUE(thread_id); | 
| +  *thread_id = PlatformThread::CurrentId(); | 
| +} | 
| + | 
| +void VerifyThreadIdIsNot(PlatformThreadId thread_id) { | 
| +  EXPECT_NE(thread_id, PlatformThread::CurrentId()); | 
| +} | 
| + | 
| +}  // namespace | 
| + | 
| 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); | 
|  | 
| // Post 3 tasks and wait until they run. | 
| -  task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); | 
| +  PlatformThreadId thread_id; | 
| +  task_runner->PostTask(FROM_HERE, | 
| +                        Bind(&CaptureThreadId, Unretained(&thread_id))); | 
| task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); | 
| task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); | 
| worker_pool_->WaitForAllWorkersIdleForTesting(); | 
|  | 
| // To allow the SchedulerWorker associated with |task_runner| to detach: | 
| // - Make sure it isn't on top of the idle stack by waking up another | 
| -  //   SchedulerWorker. | 
| +  //   SchedulerWorker and waiting until it goes back to sleep. | 
| // - Release |task_runner|. | 
| -  other_task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); | 
| +  other_task_runner->PostTask(FROM_HERE, Bind(&VerifyThreadIdIsNot, thread_id)); | 
| +  worker_pool_->WaitForAllWorkersIdleForTesting(); | 
| task_runner = nullptr; | 
|  | 
| -  // Allow the SchedulerWorker to detach. | 
| +  // Allow the SchedulerWorker that was associated with |task_runner| to detach. | 
| PlatformThread::Sleep(kReclaimTimeForDetachTests + kExtraTimeToWaitForDetach); | 
| - | 
| -  // Join the SchedulerWorkerPool. This forces SchedulerWorkers that detached | 
| -  // during the test to record to the histogram. | 
| -  worker_pool_->WaitForAllWorkersIdleForTesting(); | 
| worker_pool_->DisallowWorkerDetachmentForTesting(); | 
| -  worker_pool_->JoinForTesting(); | 
| -  const auto* histogram = worker_pool_->num_tasks_before_detach_histogram(); | 
| -  other_task_runner = nullptr; | 
| -  worker_pool_.reset(); | 
|  | 
| // Verify that counts were recorded to the histogram as expected. | 
| +  const auto* histogram = worker_pool_->num_tasks_before_detach_histogram(); | 
| EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0)); | 
| EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3)); | 
| EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10)); | 
|  |