Chromium Code Reviews| 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 c6d9d692b22e6e2b521cfc3890ddd8b3ea135b10..c6cd8ed3f4ab96e19fc8ca26c43d7d0825509c4b 100644 |
| --- a/base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
| +++ b/base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
| @@ -14,7 +14,9 @@ |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| +#include "base/task_scheduler/environment_config.h" |
| #include "base/task_scheduler/scheduler_lock.h" |
| +#include "base/task_scheduler/single_thread_task_runner_thread_mode.h" |
| #include "base/threading/platform_thread.h" |
| #include "build/build_config.h" |
| @@ -35,8 +37,12 @@ class SchedulerWorkerDelegate; |
| } // namespace |
| -// Manages a pool of threads which are each associated with one |
| -// SingleThreadTaskRunner. |
| +// Manages a pool of threads which are each associated with one or more |
| +// SingleThreadTaskRunners. |
| +// |
| +// SingleThreadTaskRunners using SingleThreadTaskRunnerThreadMode::SHARED, are |
|
fdoray
2017/05/25 17:02:59
no comma
robliao
2017/05/30 20:01:06
Removed.
|
| +// backed by shared SchedulerWorkers for each COM+task environment combination. |
| +// These workers are only reclaimed during JoinForTesting(). |
|
gab
2017/05/25 18:47:00
"These workers are lazily instantiated and then on
robliao
2017/05/30 20:01:06
Done.
|
| // |
| // No threads are created (and hence no tasks can run) before Start() is called. |
| // |
| @@ -52,24 +58,28 @@ class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
| // be started when SingleThreadTaskRunners are created in the future. |
| void Start(); |
| - // Creates a SingleThreadTaskRunner which runs tasks with |traits| on a |
| - // dedicated thread named "TaskSchedulerSingleThread" + |name| + index. |
| - // |priority_hint| is the preferred thread priority; the actual thread |
| - // priority depends on shutdown state and platform capabilities. |
| + // Creates a SingleThreadTaskRunner which runs tasks with |traits| on a thread |
| + // named "TaskSchedulerSingleThread[Shared]" + |name| + |
|
gab
2017/05/25 18:47:00
I'd say TaskScheduler[Shared]SingleThread so that
robliao
2017/05/30 20:01:07
This is an artifact of preserving TaskSchedulerSin
|
| + // kEnvironmentParams[GetEnvironmentIndexForTraits(traits)].name_suffix + |
| + // index. "Shared" will be in the thread name when |thread_mode| is SHARED. If |
| + // |thread_mode| is DEDICATED, a thread will be dedicated to the returned task |
| + // runner, otherwise it could be shared with other SingleThreadTaskRunners. |
|
gab
2017/05/25 18:47:00
I think the rest of this comment is redundant star
robliao
2017/05/30 20:01:06
I certainly agree with this sentiment. I would pre
|
| scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits( |
| const std::string& name, |
| - ThreadPriority priority_hint, |
| - const TaskTraits& traits); |
| + const TaskTraits& traits, |
| + SingleThreadTaskRunnerThreadMode thread_mode); |
| #if defined(OS_WIN) |
| - // Creates a SingleThreadTaskRunner which runs tasks with |traits| on a |
| - // dedicated COM STA thread named "TaskSchedulerSingleThreadCOMSTA" + |name| + |
| - // index. |priority_hint| is the preferred thread priority; the actual thread |
| - // priority depends on shutdown state and platform capabilities. |
| + // Creates a SingleThreadTaskRunner which runs tasks with |traits| on a COM |
| + // STA thread named "TaskSchedulerSingleThreadCOMSTA[Shared]" + |name| + |
| + // kEnvironmentParams[GetEnvironmentIndexForTraits(traits)].name_suffix + |
| + // index. "Shared" will be in the thread name when |thread_mode| is SHARED. If |
| + // |thread_mode| is DEDICATED, a thread will be dedicated to the returned task |
| + // runner, otherwise it could be shared with other SingleThreadTaskRunners. |
|
gab
2017/05/25 18:47:00
ditto from \"Shared\"
robliao
2017/05/30 20:01:06
Agreed. See above.
|
| scoped_refptr<SingleThreadTaskRunner> CreateCOMSTATaskRunnerWithTraits( |
| const std::string& name, |
| - ThreadPriority priority_hint, |
| - const TaskTraits& traits); |
| + const TaskTraits& traits, |
| + SingleThreadTaskRunnerThreadMode thread_mode); |
| #endif // defined(OS_WIN) |
| void JoinForTesting(); |
| @@ -78,10 +88,10 @@ class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
| class SchedulerSingleThreadTaskRunner; |
| template <typename DelegateType> |
| - scoped_refptr<SingleThreadTaskRunner> |
| - CreateSingleThreadTaskRunnerWithDelegate(const std::string& name, |
| - ThreadPriority priority_hint, |
| - const TaskTraits& traits); |
| + scoped_refptr<SchedulerSingleThreadTaskRunner> CreateTaskRunnerWithTraitsImpl( |
| + const std::string& name, |
| + const TaskTraits& traits, |
| + SingleThreadTaskRunnerThreadMode thread_mode); |
| template <typename DelegateType> |
| std::unique_ptr<SchedulerWorkerDelegate> CreateSchedulerWorkerDelegate( |
| @@ -93,23 +103,34 @@ class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
| const std::string& name, |
| ThreadPriority priority_hint); |
| + template <typename DelegateType> |
| + SchedulerWorker*& GetSharedSchedulerWorkerForTraits(const TaskTraits& traits); |
|
gab
2017/05/25 18:47:00
** is more common and less surprising than *& IMO,
robliao
2017/05/30 20:01:06
I wanted to enforce the non-nullable property for
|
| + |
| void UnregisterSchedulerWorker(SchedulerWorker* worker); |
| + void ReleaseSharedSchedulerWorkers(); |
| + |
| TaskTracker* const task_tracker_; |
| DelayedTaskManager* const delayed_task_manager_; |
| - // Synchronizes access to |workers_|, |next_worker_id_| and |started_|. |
| +#if DCHECK_IS_ON() |
| + subtle::Atomic32 workers_unregistered_during_join_ = 0; |
| +#endif |
| + |
| + // Synchronizes access to all members below. |
| SchedulerLock lock_; |
| std::vector<scoped_refptr<SchedulerWorker>> workers_; |
| int next_worker_id_ = 0; |
| + SchedulerWorker* shared_scheduler_workers_[4]; |
|
fdoray
2017/05/25 17:02:59
s/4/ENVIRONMENT_COUNT/
gab
2017/05/25 18:47:00
= {};
to zero-initialize inline
robliao
2017/05/30 20:01:06
Done.
|
| + |
| +#if defined(OS_WIN) |
| + SchedulerWorker* shared_com_scheduler_workers_[4]; |
|
fdoray
2017/05/25 17:02:59
s/4/ENVIRONMENT_COUNT/
gab
2017/05/25 18:47:00
ditto
robliao
2017/05/30 20:01:06
Done.
|
| +#endif // defined(OS_WIN) |
| + |
| // Set to true when Start() is called. |
| bool started_ = false; |
| -#if DCHECK_IS_ON() |
| - subtle::Atomic32 workers_unregistered_during_join_ = 0; |
| -#endif |
| - |
| DISALLOW_COPY_AND_ASSIGN(SchedulerSingleThreadTaskRunnerManager); |
| }; |