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

Side by Side Diff: base/task_scheduler/scheduler_worker_pool_impl.h

Issue 2146223002: Refactor WorkerPoolCreationArgs to a Read-Only WorkerPoolParams (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CR Feedback Created 4 years, 5 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 #ifndef BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_IMPL_H_ 5 #ifndef BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_IMPL_H_
6 #define BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_IMPL_H_ 6 #define BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_IMPL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 16 matching lines...) Expand all
27 #include "base/task_scheduler/sequence.h" 27 #include "base/task_scheduler/sequence.h"
28 #include "base/task_scheduler/task.h" 28 #include "base/task_scheduler/task.h"
29 #include "base/task_scheduler/task_traits.h" 29 #include "base/task_scheduler/task_traits.h"
30 #include "base/threading/platform_thread.h" 30 #include "base/threading/platform_thread.h"
31 31
32 namespace base { 32 namespace base {
33 namespace internal { 33 namespace internal {
34 34
35 class DelayedTaskManager; 35 class DelayedTaskManager;
36 class TaskTracker; 36 class TaskTracker;
37 class WorkerPoolParams;
37 38
38 // A pool of workers that run Tasks. This class is thread-safe. 39 // A pool of workers that run Tasks. This class is thread-safe.
39 class BASE_EXPORT SchedulerWorkerPoolImpl : public SchedulerWorkerPool { 40 class BASE_EXPORT SchedulerWorkerPoolImpl : public SchedulerWorkerPool {
40 public: 41 public:
41 enum class IORestriction { 42 enum class IORestriction {
42 ALLOWED, 43 ALLOWED,
43 DISALLOWED, 44 DISALLOWED,
44 }; 45 };
45 46
46 // Callback invoked when a Sequence isn't empty after a worker pops a Task 47 // Callback invoked when a Sequence isn't empty after a worker pops a Task
47 // from it. 48 // from it.
48 using ReEnqueueSequenceCallback = Callback<void(scoped_refptr<Sequence>)>; 49 using ReEnqueueSequenceCallback = Callback<void(scoped_refptr<Sequence>)>;
49 50
50 // Destroying a SchedulerWorkerPoolImpl returned by Create() is not allowed in 51 // Destroying a SchedulerWorkerPoolImpl returned by Create() is not allowed in
51 // production; it is always leaked. In tests, it can only be destroyed after 52 // production; it is always leaked. In tests, it can only be destroyed after
52 // JoinForTesting() has returned. 53 // JoinForTesting() has returned.
53 ~SchedulerWorkerPoolImpl() override; 54 ~SchedulerWorkerPoolImpl() override;
54 55
55 // Creates a SchedulerWorkerPoolImpl labeled |name| with up to |max_threads| 56 // Creates a SchedulerWorkerPoolImpl following the |worker_pool_params|
56 // threads of priority |thread_priority|. |io_restriction| indicates whether 57 // specification. |re_enqueue_sequence_callback| will be invoked after a
57 // Tasks on the constructed worker pool are allowed to make I/O calls. 58 // worker of this worker pool tries to run a Task. |task_tracker| is used to
58 // |re_enqueue_sequence_callback| will be invoked after a worker of this 59 // handle shutdown behavior of Tasks. |delayed_task_manager| handles Tasks
59 // worker pool tries to run a Task. |task_tracker| is used to handle shutdown 60 // posted with a delay. Returns nullptr on failure to create a worker pool
60 // behavior of Tasks. |delayed_task_manager| handles Tasks posted with a 61 // with at least one thread.
61 // delay. Returns nullptr on failure to create a worker pool with at least one
62 // thread.
63 static std::unique_ptr<SchedulerWorkerPoolImpl> Create( 62 static std::unique_ptr<SchedulerWorkerPoolImpl> Create(
64 StringPiece name, 63 const WorkerPoolParams& params,
65 ThreadPriority thread_priority,
66 size_t max_threads,
67 IORestriction io_restriction,
68 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback, 64 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback,
69 TaskTracker* task_tracker, 65 TaskTracker* task_tracker,
70 DelayedTaskManager* delayed_task_manager); 66 DelayedTaskManager* delayed_task_manager);
71 67
72 // Waits until all workers are idle. 68 // Waits until all workers are idle.
73 void WaitForAllWorkersIdleForTesting(); 69 void WaitForAllWorkersIdleForTesting();
74 70
75 // Joins all workers of this worker pool. Tasks that are already running are 71 // Joins all workers of this worker pool. Tasks that are already running are
76 // allowed to complete their execution. This can only be called once. 72 // allowed to complete their execution. This can only be called once.
77 void JoinForTesting(); 73 void JoinForTesting();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 TaskTracker* const task_tracker_; 151 TaskTracker* const task_tracker_;
156 DelayedTaskManager* const delayed_task_manager_; 152 DelayedTaskManager* const delayed_task_manager_;
157 153
158 DISALLOW_COPY_AND_ASSIGN(SchedulerWorkerPoolImpl); 154 DISALLOW_COPY_AND_ASSIGN(SchedulerWorkerPoolImpl);
159 }; 155 };
160 156
161 } // namespace internal 157 } // namespace internal
162 } // namespace base 158 } // namespace base
163 159
164 #endif // BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_IMPL_H_ 160 #endif // BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698