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

Unified Diff: base/task_scheduler/scheduler_single_thread_task_runner_manager.h

Issue 2806413002: Separate the create and start phases in SchedulerSingleThreadTaskRunnerManager. (Closed)
Patch Set: CR-robliao-45-initial-state-comment 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | base/task_scheduler/scheduler_single_thread_task_runner_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | base/task_scheduler/scheduler_single_thread_task_runner_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698