Chromium Code Reviews| Index: base/task_scheduler/task_scheduler_impl.h |
| diff --git a/base/task_scheduler/task_scheduler_impl.h b/base/task_scheduler/task_scheduler_impl.h |
| index 4180d9faf5ef56299c638d13259e1dce20ba7d7c..a63c0938782010eb51a3ac62369ed63033e0d801 100644 |
| --- a/base/task_scheduler/task_scheduler_impl.h |
| +++ b/base/task_scheduler/task_scheduler_impl.h |
| @@ -5,32 +5,63 @@ |
| #ifndef BASE_TASK_SCHEDULER_TASK_SCHEDULER_IMPL_H_ |
| #define BASE_TASK_SCHEDULER_TASK_SCHEDULER_IMPL_H_ |
| +#include <stddef.h> |
| + |
| #include <memory> |
| +#include <string> |
| +#include <vector> |
| #include "base/base_export.h" |
| +#include "base/callback.h" |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/synchronization/waitable_event.h" |
| #include "base/task_runner.h" |
| #include "base/task_scheduler/delayed_task_manager.h" |
| +#include "base/task_scheduler/scheduler_worker_pool_impl.h" |
| #include "base/task_scheduler/sequence.h" |
| #include "base/task_scheduler/task_scheduler.h" |
| #include "base/task_scheduler/task_tracker.h" |
| #include "base/task_scheduler/task_traits.h" |
| +#include "base/threading/thread.h" |
| namespace base { |
| namespace internal { |
| class SchedulerServiceThread; |
| -class SchedulerWorkerPoolImpl; |
| // Default TaskScheduler implementation. This class is thread-safe. |
| class BASE_EXPORT TaskSchedulerImpl : public TaskScheduler { |
| public: |
| + struct WorkerPoolCreationArgs { |
| + // Name of the pool. Used to label the pool's threads. |
| + std::string name; |
| + |
| + // Priority of the pool's threads. |
| + ThreadPriority thread_priority; |
| + |
| + // Whether I/O is allowed in the pool. |
| + SchedulerWorkerPoolImpl::IORestriction io_restriction; |
| + |
| + // Maximum number of threads in the pool. |
| + size_t max_threads; |
| + }; |
| + |
| + // Returns the index of the worker pool in which a task with |traits| should |
| + // run. |
|
robliao
2016/06/23 22:37:03
Also document that this should be coded in a futur
fdoray
2016/06/27 19:45:04
Done.
|
| + using WorkerPoolIndexForTraitsCallback = |
| + Callback<size_t(const TaskTraits& traits)>; |
| + |
| // Creates and returns an initialized TaskSchedulerImpl. CHECKs on failure to |
| - // do so (never returns null). |
| - static std::unique_ptr<TaskSchedulerImpl> Create(); |
| + // do so (never returns null). |worker_pools| is a list of worker pools to |
|
robliao
2016/06/23 22:37:03
Nit: "CHECKs on failure" is sufficient.
fdoray
2016/06/27 19:45:04
Done.
|
| + // create. |worker_pool_index_for_traits_callback| returns the index in |
|
robliao
2016/06/23 22:37:03
|worker_pools| describes the worker pools to creat
fdoray
2016/06/27 19:45:04
Done.
|
| + // |worker_pools| of the worker pool in which a task with given traits should |
| + // run. |
| + static std::unique_ptr<TaskSchedulerImpl> Create( |
| + const std::vector<WorkerPoolCreationArgs>& worker_pools, |
| + const WorkerPoolIndexForTraitsCallback& |
| + worker_pool_index_for_traits_callback); |
| // Destroying a TaskSchedulerImpl is not allowed in production; it is always |
| // leaked. In tests, it can only be destroyed after JoinForTesting() has |
| @@ -51,9 +82,10 @@ class BASE_EXPORT TaskSchedulerImpl : public TaskScheduler { |
| void JoinForTesting(); |
| private: |
| - TaskSchedulerImpl(); |
| + TaskSchedulerImpl(const WorkerPoolIndexForTraitsCallback& |
| + worker_pool_index_for_traits_callback); |
| - void Initialize(); |
| + void Initialize(const std::vector<WorkerPoolCreationArgs>& worker_pools); |
| // Returns the worker pool that runs Tasks with |traits|. |
| SchedulerWorkerPool* GetWorkerPoolForTraits(const TaskTraits& traits); |
| @@ -68,19 +100,8 @@ class BASE_EXPORT TaskSchedulerImpl : public TaskScheduler { |
| TaskTracker task_tracker_; |
| DelayedTaskManager delayed_task_manager_; |
| - |
| - // Worker pool for BACKGROUND Tasks without file I/O. |
| - std::unique_ptr<SchedulerWorkerPoolImpl> background_worker_pool_; |
| - |
| - // Worker pool for BACKGROUND Tasks with file I/O. |
| - std::unique_ptr<SchedulerWorkerPoolImpl> background_file_io_worker_pool_; |
| - |
| - // Worker pool for USER_VISIBLE and USER_BLOCKING Tasks without file I/O. |
| - std::unique_ptr<SchedulerWorkerPoolImpl> normal_worker_pool_; |
| - |
| - // Worker pool for USER_VISIBLE and USER_BLOCKING Tasks with file I/O. |
| - std::unique_ptr<SchedulerWorkerPoolImpl> normal_file_io_worker_pool_; |
| - |
| + const WorkerPoolIndexForTraitsCallback worker_pool_index_for_traits_callback_; |
| + std::vector<std::unique_ptr<SchedulerWorkerPoolImpl>> worker_pools_; |
| std::unique_ptr<SchedulerServiceThread> service_thread_; |
| #if DCHECK_IS_ON() |