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

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

Issue 2810873008: Separate the create and start phases in DelayedTaskManager. (Closed)
Patch Set: self-review 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 } 71 }
72 72
73 void TearDown() override { 73 void TearDown() override {
74 service_thread_.Stop(); 74 service_thread_.Stop();
75 worker_pool_->WaitForAllWorkersIdleForTesting(); 75 worker_pool_->WaitForAllWorkersIdleForTesting();
76 worker_pool_->JoinForTesting(); 76 worker_pool_->JoinForTesting();
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_);
82 service_thread_.Start(); 81 service_thread_.Start();
83 delayed_task_manager_ = 82 delayed_task_manager_.Start(service_thread_.task_runner());
84 base::MakeUnique<DelayedTaskManager>(service_thread_.task_runner());
85 worker_pool_ = MakeUnique<SchedulerWorkerPoolImpl>( 83 worker_pool_ = MakeUnique<SchedulerWorkerPoolImpl>(
86 "TestWorkerPool", ThreadPriority::NORMAL, 84 "TestWorkerPool", ThreadPriority::NORMAL,
87 Bind(&TaskSchedulerWorkerPoolImplTest::ReEnqueueSequenceCallback, 85 Bind(&TaskSchedulerWorkerPoolImplTest::ReEnqueueSequenceCallback,
88 Unretained(this)), 86 Unretained(this)),
89 &task_tracker_, delayed_task_manager_.get()); 87 &task_tracker_, &delayed_task_manager_);
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_;
111 108
112 private: 109 private:
113 void ReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) { 110 void ReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) {
114 // In production code, this callback would be implemented by the 111 // In production code, this callback would be implemented by the
115 // TaskScheduler which would first determine which PriorityQueue the 112 // TaskScheduler which would first determine which PriorityQueue the
116 // sequence must be re-enqueued. 113 // sequence must be re-enqueued.
117 const SequenceSortKey sort_key(sequence->GetSortKey()); 114 const SequenceSortKey sort_key(sequence->GetSortKey());
118 worker_pool_->ReEnqueueSequence(std::move(sequence), sort_key); 115 worker_pool_->ReEnqueueSequence(std::move(sequence), sort_key);
119 } 116 }
120 117
118 DelayedTaskManager delayed_task_manager_;
119
121 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplTest); 120 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplTest);
122 }; 121 };
123 122
124 scoped_refptr<TaskRunner> CreateTaskRunnerWithExecutionMode( 123 scoped_refptr<TaskRunner> CreateTaskRunnerWithExecutionMode(
125 SchedulerWorkerPoolImpl* worker_pool, 124 SchedulerWorkerPoolImpl* worker_pool,
126 test::ExecutionMode execution_mode) { 125 test::ExecutionMode execution_mode) {
127 // Allow tasks posted to the returned TaskRunner to wait on a WaitableEvent. 126 // Allow tasks posted to the returned TaskRunner to wait on a WaitableEvent.
128 const TaskTraits traits = TaskTraits().WithBaseSyncPrimitives(); 127 const TaskTraits traits = TaskTraits().WithBaseSyncPrimitives();
129 switch (execution_mode) { 128 switch (execution_mode) {
130 case test::ExecutionMode::PARALLEL: 129 case test::ExecutionMode::PARALLEL:
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 785
787 void NotReachedReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) { 786 void NotReachedReEnqueueSequenceCallback(scoped_refptr<Sequence> sequence) {
788 ADD_FAILURE() 787 ADD_FAILURE()
789 << "Unexpected invocation of NotReachedReEnqueueSequenceCallback."; 788 << "Unexpected invocation of NotReachedReEnqueueSequenceCallback.";
790 } 789 }
791 790
792 } // namespace 791 } // namespace
793 792
794 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitLazy) { 793 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitLazy) {
795 TaskTracker task_tracker; 794 TaskTracker task_tracker;
796 DelayedTaskManager delayed_task_manager( 795 DelayedTaskManager delayed_task_manager;
797 make_scoped_refptr(new TestSimpleTaskRunner)); 796 delayed_task_manager.Start(make_scoped_refptr(new TestSimpleTaskRunner));
798 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>( 797 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>(
799 "LazyPolicyWorkerPool", ThreadPriority::NORMAL, 798 "LazyPolicyWorkerPool", ThreadPriority::NORMAL,
800 Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker, 799 Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker,
801 &delayed_task_manager); 800 &delayed_task_manager);
802 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::LAZY, 8U, 801 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::LAZY, 8U,
803 TimeDelta::Max())); 802 TimeDelta::Max()));
804 ASSERT_TRUE(worker_pool); 803 ASSERT_TRUE(worker_pool);
805 EXPECT_EQ(0U, worker_pool->NumberOfAliveWorkersForTesting()); 804 EXPECT_EQ(0U, worker_pool->NumberOfAliveWorkersForTesting());
806 worker_pool->JoinForTesting(); 805 worker_pool->JoinForTesting();
807 } 806 }
808 807
809 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitOne) { 808 TEST(TaskSchedulerWorkerPoolStandbyPolicyTest, InitOne) {
810 TaskTracker task_tracker; 809 TaskTracker task_tracker;
811 DelayedTaskManager delayed_task_manager( 810 DelayedTaskManager delayed_task_manager;
812 make_scoped_refptr(new TestSimpleTaskRunner)); 811 delayed_task_manager.Start(make_scoped_refptr(new TestSimpleTaskRunner));
813 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>( 812 auto worker_pool = MakeUnique<SchedulerWorkerPoolImpl>(
814 "OnePolicyWorkerPool", ThreadPriority::NORMAL, 813 "OnePolicyWorkerPool", ThreadPriority::NORMAL,
815 Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker, 814 Bind(&NotReachedReEnqueueSequenceCallback), &task_tracker,
816 &delayed_task_manager); 815 &delayed_task_manager);
817 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::ONE, 8U, 816 worker_pool->Start(SchedulerWorkerPoolParams(StandbyThreadPolicy::ONE, 8U,
818 TimeDelta::Max())); 817 TimeDelta::Max()));
819 ASSERT_TRUE(worker_pool); 818 ASSERT_TRUE(worker_pool);
820 EXPECT_EQ(1U, worker_pool->NumberOfAliveWorkersForTesting()); 819 EXPECT_EQ(1U, worker_pool->NumberOfAliveWorkersForTesting());
821 worker_pool->JoinForTesting(); 820 worker_pool->JoinForTesting();
822 } 821 }
823 822
824 } // namespace internal 823 } // namespace internal
825 } // namespace base 824 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc ('k') | base/task_scheduler/task_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698