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

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

Issue 2807063007: Remove SchedulerWorkerPoolImpl::ReEnqueueSequenceCallback. (Closed)
Patch Set: Created 3 years, 8 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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 } 77 }
78 78
79 void CreateWorkerPool() { 79 void CreateWorkerPool() {
80 ASSERT_FALSE(worker_pool_); 80 ASSERT_FALSE(worker_pool_);
81 ASSERT_FALSE(delayed_task_manager_); 81 ASSERT_FALSE(delayed_task_manager_);
82 service_thread_.Start(); 82 service_thread_.Start();
83 delayed_task_manager_ = 83 delayed_task_manager_ =
84 base::MakeUnique<DelayedTaskManager>(service_thread_.task_runner()); 84 base::MakeUnique<DelayedTaskManager>(service_thread_.task_runner());
85 worker_pool_ = MakeUnique<SchedulerWorkerPoolImpl>( 85 worker_pool_ = MakeUnique<SchedulerWorkerPoolImpl>(
86 "TestWorkerPool", ThreadPriority::NORMAL, 86 "TestWorkerPool", ThreadPriority::NORMAL,
87 Bind(&TaskSchedulerWorkerPoolImplTest::ReEnqueueSequenceCallback,
88 Unretained(this)),
89 &task_tracker_, delayed_task_manager_.get()); 87 &task_tracker_, delayed_task_manager_.get());
90 ASSERT_TRUE(worker_pool_); 88 ASSERT_TRUE(worker_pool_);
91 } 89 }
92 90
93 void StartWorkerPool(TimeDelta suggested_reclaim_time, size_t num_workers) { 91 void StartWorkerPool(TimeDelta suggested_reclaim_time, size_t num_workers) {
94 ASSERT_TRUE(worker_pool_); 92 ASSERT_TRUE(worker_pool_);
95 worker_pool_->Start(SchedulerWorkerPoolParams( 93 worker_pool_->Start(SchedulerWorkerPoolParams(
96 "TestWorkerPool", ThreadPriority::NORMAL, StandbyThreadPolicy::LAZY, 94 "TestWorkerPool", ThreadPriority::NORMAL, StandbyThreadPolicy::LAZY,
97 num_workers, suggested_reclaim_time)); 95 num_workers, suggested_reclaim_time));
98 } 96 }
99 97
100 void CreateAndStartWorkerPool(TimeDelta suggested_reclaim_time, 98 void CreateAndStartWorkerPool(TimeDelta suggested_reclaim_time,
101 size_t num_workers) { 99 size_t num_workers) {
102 CreateWorkerPool(); 100 CreateWorkerPool();
103 StartWorkerPool(suggested_reclaim_time, num_workers); 101 StartWorkerPool(suggested_reclaim_time, num_workers);
104 } 102 }
105 103
106 std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool_; 104 std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool_;
107 105
108 TaskTracker task_tracker_; 106 TaskTracker task_tracker_;
109 Thread service_thread_; 107 Thread service_thread_;
110 std::unique_ptr<DelayedTaskManager> delayed_task_manager_; 108 std::unique_ptr<DelayedTaskManager> delayed_task_manager_;
111 109
112 private: 110 private:
113 void ReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) {
114 // In production code, this callback would be implemented by the
115 // TaskScheduler which would first determine which PriorityQueue the
116 // sequence must be re-enqueued.
117 const SequenceSortKey sort_key(sequence->GetSortKey());
118 worker_pool_->ReEnqueueSequence(std::move(sequence), sort_key);
119 }
120
121 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplTest); 111 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplTest);
122 }; 112 };
123 113
124 scoped_refptr<TaskRunner> CreateTaskRunnerWithExecutionMode( 114 scoped_refptr<TaskRunner> CreateTaskRunnerWithExecutionMode(
125 SchedulerWorkerPoolImpl* worker_pool, 115 SchedulerWorkerPoolImpl* worker_pool,
126 test::ExecutionMode execution_mode) { 116 test::ExecutionMode execution_mode) {
127 // Allow tasks posted to the returned TaskRunner to wait on a WaitableEvent. 117 // Allow tasks posted to the returned TaskRunner to wait on a WaitableEvent.
128 const TaskTraits traits = TaskTraits().WithBaseSyncPrimitives(); 118 const TaskTraits traits = TaskTraits().WithBaseSyncPrimitives();
129 switch (execution_mode) { 119 switch (execution_mode) {
130 case test::ExecutionMode::PARALLEL: 120 case test::ExecutionMode::PARALLEL:
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0)); 764 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(0));
775 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(1)); 765 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(1));
776 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(2)); 766 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(2));
777 EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3)); 767 EXPECT_EQ(1, histogram->SnapshotSamples()->GetCount(3));
778 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(4)); 768 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(4));
779 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(5)); 769 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(5));
780 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(6)); 770 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(6));
781 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10)); 771 EXPECT_EQ(0, histogram->SnapshotSamples()->GetCount(10));
782 } 772 }
783 773
784 namespace {
785
786 void NotReachedReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) {
787 ADD_FAILURE()
788 << "Unexpected invocation of NotReachedReEnqueueSequenceCallback.";
789 }
790
791 } // namespace
792
793 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitLazy) { 774 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitLazy) {
794 TaskTracker task_tracker; 775 TaskTracker task_tracker;
795 DelayedTaskManager delayed_task_manager( 776 DelayedTaskManager delayed_task_manager(
796 make_scoped_refptr(new TestSimpleTaskRunner)); 777 make_scoped_refptr(new TestSimpleTaskRunner));
797 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>( 778 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>(
798 "LazyPolicyWorkerPool", ThreadPriority::NORMAL, 779 "LazyPolicyWorkerPool", ThreadPriority::NORMAL, &task_tracker,
799 Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker,
800 &delayed_task_manager); 780 &delayed_task_manager);
801 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::LAZY, 8U, 781 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::LAZY, 8U,
802 TimeDelta::Max())); 782 TimeDelta::Max()));
803 ASSERT_TRUE(worker_pool); 783 ASSERT_TRUE(worker_pool);
804 EXPECT_EQ(0U, worker_pool->NumberOfAliveWorkersForTesting()); 784 EXPECT_EQ(0U, worker_pool->NumberOfAliveWorkersForTesting());
805 worker_pool->JoinForTesting(); 785 worker_pool->JoinForTesting();
806 } 786 }
807 787
808 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitOne) { 788 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitOne) {
809 TaskTracker task_tracker; 789 TaskTracker task_tracker;
810 DelayedTaskManager delayed_task_manager( 790 DelayedTaskManager delayed_task_manager(
811 make_scoped_refptr(new TestSimpleTaskRunner)); 791 make_scoped_refptr(new TestSimpleTaskRunner));
812 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>( 792 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>(
813 "OnePolicyWorkerPool", ThreadPriority::NORMAL, 793 "OnePolicyWorkerPool", ThreadPriority::NORMAL, &task_tracker,
814 Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker,
815 &delayed_task_manager); 794 &delayed_task_manager);
816 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::ONE, 8U, 795 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::ONE, 8U,
817 TimeDelta::Max())); 796 TimeDelta::Max()));
818 ASSERT_TRUE(worker_pool); 797 ASSERT_TRUE(worker_pool);
819 EXPECT_EQ(1U, worker_pool->NumberOfAliveWorkersForTesting()); 798 EXPECT_EQ(1U, worker_pool->NumberOfAliveWorkersForTesting());
820 worker_pool->JoinForTesting(); 799 worker_pool->JoinForTesting();
821 } 800 }
822 801
823 } // namespace internal 802 } // namespace internal
824 } // namespace base 803 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/scheduler_worker_pool_impl.cc ('k') | base/task_scheduler/task_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698