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

Side by Side Diff: base/task_scheduler/scheduler_worker_pool_impl_unittest.cc

Issue 2430633003: TaskScheduler: Record TaskScheduler.NumTasksBeforeDetach.* from OnDetach(). (Closed)
Patch Set: CR gab #3 rebase Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/task_scheduler/scheduler_worker_pool_impl.h" 5 #include "base/task_scheduler/scheduler_worker_pool_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <unordered_set> 10 #include <unordered_set>
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 } 576 }
577 577
578 namespace { 578 namespace {
579 579
580 class TaskSchedulerWorkerPoolHistogramTest 580 class TaskSchedulerWorkerPoolHistogramTest
581 : public TaskSchedulerWorkerPoolImplTest { 581 : public TaskSchedulerWorkerPoolImplTest {
582 public: 582 public:
583 TaskSchedulerWorkerPoolHistogramTest() = default; 583 TaskSchedulerWorkerPoolHistogramTest() = default;
584 584
585 protected: 585 protected:
586 // Override SetUp() to allow every test case to initialize a worker pool with
587 // its own arguments.
586 void SetUp() override {} 588 void SetUp() override {}
587 589
588 void TearDown() override {
589 // |worker_pool_| initialization is done in test body.
590 if (worker_pool_)
591 worker_pool_->JoinForTesting();
592 }
593
594 private: 590 private:
595 std::unique_ptr<StatisticsRecorder> statistics_recorder_ = 591 std::unique_ptr<StatisticsRecorder> statistics_recorder_ =
596 StatisticsRecorder::CreateTemporaryForTesting(); 592 StatisticsRecorder::CreateTemporaryForTesting();
597 593
598 private:
599 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolHistogramTest); 594 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolHistogramTest);
600 }; 595 };
601 596
602 } // namespace 597 } // namespace
603 598
604 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaits) { 599 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBetweenWaits) {
605 WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL, 600 WaitableEvent event(WaitableEvent::ResetPolicy::MANUAL,
606 WaitableEvent::InitialState::NOT_SIGNALED); 601 WaitableEvent::InitialState::NOT_SIGNALED);
607 InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool); 602 InitializeWorkerPool(TimeDelta::Max(), kNumWorkersInWorkerPool);
608 auto task_runner = worker_pool_->CreateTaskRunnerWithTraits( 603 auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 // beginning of the test. 697 // beginning of the test.
703 EXPECT_EQ(static_cast<int>(kNumWorkersInWorkerPool), 698 EXPECT_EQ(static_cast<int>(kNumWorkersInWorkerPool),
704 histogram->SnapshotSamples()->GetCount(1)); 699 histogram->SnapshotSamples()->GetCount(1));
705 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10)); 700 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10));
706 701
707 tasks_can_exit_event.Signal(); 702 tasks_can_exit_event.Signal();
708 worker_pool_->WaitForAllWorkersIdleForTesting(); 703 worker_pool_->WaitForAllWorkersIdleForTesting();
709 worker_pool_->DisallowWorkerDetachmentForTesting(); 704 worker_pool_->DisallowWorkerDetachmentForTesting();
710 } 705 }
711 706
707 namespace {
708
709 void CaptureThreadId(PlatformThreadId* thread_id) {
710 ASSERT_TRUE(thread_id);
711 *thread_id = PlatformThread::CurrentId();
712 }
713
714 void VerifyThreadIdIsNot(PlatformThreadId thread_id) {
715 EXPECT_NE(thread_id, PlatformThread::CurrentId());
716 }
717
718 } // namespace
719
712 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) { 720 TEST_F(TaskSchedulerWorkerPoolHistogramTest, NumTasksBeforeDetach) {
713 InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool); 721 InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool);
722
723 // This test assumes that the TaskRunners aren't assigned to the same worker.
714 auto task_runner = worker_pool_->CreateTaskRunnerWithTraits( 724 auto task_runner = worker_pool_->CreateTaskRunnerWithTraits(
715 TaskTraits(), ExecutionMode::SINGLE_THREADED); 725 TaskTraits(), ExecutionMode::SINGLE_THREADED);
716 auto other_task_runner = worker_pool_->CreateTaskRunnerWithTraits( 726 auto other_task_runner = worker_pool_->CreateTaskRunnerWithTraits(
717 TaskTraits(), ExecutionMode::SINGLE_THREADED); 727 TaskTraits(), ExecutionMode::SINGLE_THREADED);
718 728
719 // Post 3 tasks and wait until they run. 729 // Post 3 tasks and wait until they run.
720 task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); 730 PlatformThreadId thread_id;
731 task_runner->PostTask(FROM_HERE,
732 Bind(&CaptureThreadId, Unretained(&thread_id)));
721 task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); 733 task_runner->PostTask(FROM_HERE, Bind(&DoNothing));
722 task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); 734 task_runner->PostTask(FROM_HERE, Bind(&DoNothing));
723 worker_pool_->WaitForAllWorkersIdleForTesting(); 735 worker_pool_->WaitForAllWorkersIdleForTesting();
724 736
725 // To allow the SchedulerWorker associated with |task_runner| to detach: 737 // To allow the SchedulerWorker associated with |task_runner| to detach:
726 // - Make sure it isn't on top of the idle stack by waking up another 738 // - Make sure it isn't on top of the idle stack by waking up another
727 // SchedulerWorker. 739 // SchedulerWorker and waiting until it goes back to sleep.
728 // - Release |task_runner|. 740 // - Release |task_runner|.
729 other_task_runner->PostTask(FROM_HERE, Bind(&DoNothing)); 741 other_task_runner->PostTask(FROM_HERE, Bind(&VerifyThreadIdIsNot, thread_id));
742 worker_pool_->WaitForAllWorkersIdleForTesting();
730 task_runner = nullptr; 743 task_runner = nullptr;
731 744
732 // Allow the SchedulerWorker to detach. 745 // Allow the SchedulerWorker that was associated with |task_runner| to detach.
733 PlatformThread::Sleep(kReclaimTimeForDetachTests + kExtraTimeToWaitForDetach); 746 PlatformThread::Sleep(kReclaimTimeForDetachTests + kExtraTimeToWaitForDetach);
734
735 // Join the SchedulerWorkerPool. This forces SchedulerWorkers that detached
736 // during the test to record to the histogram.
737 worker_pool_->WaitForAllWorkersIdleForTesting();
738 worker_pool_->DisallowWorkerDetachmentForTesting(); 747 worker_pool_->DisallowWorkerDetachmentForTesting();
739 worker_pool_->JoinForTesting();
740 const auto* histogram = worker_pool_->num_tasks_before_detach_histogram();
741 other_task_runner = nullptr;
742 worker_pool_.reset();
743 748
744 // Verify that counts were recorded to the histogram as expected. 749 // Verify that counts were recorded to the histogram as expected.
750 const auto* histogram = worker_pool_->num_tasks_before_detach_histogram();
745 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0)); 751 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0));
746 EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3)); 752 EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3));
747 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10)); 753 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10));
748 } 754 }
749 755
750 } // namespace internal 756 } // namespace internal
751 } // namespace base 757 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/scheduler_worker_pool_impl.cc ('k') | base/task_scheduler/scheduler_worker_stack_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698