Index: base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
diff --git a/base/task_scheduler/scheduler_single_thread_task_runner_manager.h b/base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
index 24d1a9a010b35661ee8235666652b16c5d0312a1..c862f19df0b2a46d6abe9d7fc570a8f494ffb5bc 100644 |
--- a/base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
+++ b/base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
@@ -35,6 +35,12 @@ class SchedulerWorkerDelegate; |
} // namespace |
+// Manages a pool of threads which are each associated with one |
+// SingleThreadTaskRunner. |
+// |
+// No threads are created (and hence no tasks can run) before Start() is called. |
+// |
+// This class is thread-safe. |
class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
public: |
SchedulerSingleThreadTaskRunnerManager( |
@@ -45,6 +51,10 @@ class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
DelayedTaskManager* delayed_task_manager); |
~SchedulerSingleThreadTaskRunnerManager(); |
+ // Starts threads for existing SingleThreadTaskRunners and allows threads to |
+ // be started when SingleThreadTaskRunners are created in the future. |
+ void Start(); |
+ |
scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits( |
const TaskTraits& traits); |
@@ -79,11 +89,14 @@ class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
TaskTracker* const task_tracker_; |
DelayedTaskManager* const delayed_task_manager_; |
- // Synchronizes access to |workers_| and |worker_id_|. |
- SchedulerLock workers_lock_; |
+ // Synchronizes access to |workers_|, |next_worker_id_| and |started_|. |
+ SchedulerLock lock_; |
std::vector<scoped_refptr<SchedulerWorker>> workers_; |
int next_worker_id_ = 0; |
+ // Set to true when Start() is called. |
+ bool started_ = false; |
+ |
#if DCHECK_IS_ON() |
subtle::Atomic32 workers_unregistered_during_join_ = 0; |
#endif |