OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ | 5 #ifndef BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ |
6 #define BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ | 6 #define BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ |
7 | 7 |
| 8 #include <string> |
8 #include <vector> | 9 #include <vector> |
9 | 10 |
10 #include "base/atomicops.h" | 11 #include "base/atomicops.h" |
11 #include "base/base_export.h" | 12 #include "base/base_export.h" |
12 #include "base/logging.h" | 13 #include "base/logging.h" |
13 #include "base/macros.h" | 14 #include "base/macros.h" |
14 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
15 #include "base/task_scheduler/scheduler_lock.h" | 16 #include "base/task_scheduler/scheduler_lock.h" |
16 #include "base/task_scheduler/scheduler_worker_pool_params.h" | 17 #include "base/threading/platform_thread.h" |
17 #include "base/task_scheduler/task_scheduler.h" | |
18 | 18 |
19 namespace base { | 19 namespace base { |
20 | 20 |
21 class TaskTraits; | 21 class TaskTraits; |
22 class SingleThreadTaskRunner; | 22 class SingleThreadTaskRunner; |
23 | 23 |
24 namespace internal { | 24 namespace internal { |
25 | 25 |
26 class DelayedTaskManager; | 26 class DelayedTaskManager; |
27 class SchedulerWorker; | 27 class SchedulerWorker; |
28 class TaskTracker; | 28 class TaskTracker; |
29 | 29 |
30 class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { | 30 class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
31 public: | 31 public: |
32 SchedulerSingleThreadTaskRunnerManager( | 32 SchedulerSingleThreadTaskRunnerManager( |
33 const std::vector<SchedulerWorkerPoolParams>& worker_pool_params_vector, | |
34 const TaskScheduler::WorkerPoolIndexForTraitsCallback& | |
35 worker_pool_index_for_traits_callback, | |
36 TaskTracker* task_tracker, | 33 TaskTracker* task_tracker, |
37 DelayedTaskManager* delayed_task_manager); | 34 DelayedTaskManager* delayed_task_manager); |
38 ~SchedulerSingleThreadTaskRunnerManager(); | 35 ~SchedulerSingleThreadTaskRunnerManager(); |
39 | 36 |
| 37 // Create a SingleThreadTaskRunner which runs tasks with |traits| on a |
| 38 // dedicated thread named "TaskScheduler" + |name| + "SingleThread" + index. |
| 39 // |priority_hint| is the preferred thread priority; the actual thread |
| 40 // priority depends on shutdown state and platform capabilities. |
40 scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits( | 41 scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits( |
| 42 const std::string& name, |
| 43 ThreadPriority priority_hint, |
41 const TaskTraits& traits); | 44 const TaskTraits& traits); |
42 | 45 |
43 void JoinForTesting(); | 46 void JoinForTesting(); |
44 | 47 |
45 private: | 48 private: |
46 class SchedulerSingleThreadTaskRunner; | 49 class SchedulerSingleThreadTaskRunner; |
47 | 50 |
48 SchedulerWorker* CreateAndRegisterSchedulerWorker( | 51 SchedulerWorker* CreateAndRegisterSchedulerWorker( |
49 const SchedulerWorkerPoolParams& params); | 52 const std::string& name, |
| 53 ThreadPriority priority_hint); |
50 | 54 |
51 void UnregisterSchedulerWorker(SchedulerWorker* worker); | 55 void UnregisterSchedulerWorker(SchedulerWorker* worker); |
52 | 56 |
53 const std::vector<SchedulerWorkerPoolParams> worker_pool_params_vector_; | |
54 const TaskScheduler::WorkerPoolIndexForTraitsCallback | |
55 worker_pool_index_for_traits_callback_; | |
56 TaskTracker* const task_tracker_; | 57 TaskTracker* const task_tracker_; |
57 DelayedTaskManager* const delayed_task_manager_; | 58 DelayedTaskManager* const delayed_task_manager_; |
58 | 59 |
59 // Synchronizes access to |workers_| and |worker_id_|. | 60 // Synchronizes access to |workers_| and |worker_id_|. |
60 SchedulerLock workers_lock_; | 61 SchedulerLock workers_lock_; |
61 std::vector<scoped_refptr<SchedulerWorker>> workers_; | 62 std::vector<scoped_refptr<SchedulerWorker>> workers_; |
62 int next_worker_id_ = 0; | 63 int next_worker_id_ = 0; |
63 | 64 |
64 #if DCHECK_IS_ON() | 65 #if DCHECK_IS_ON() |
65 subtle::Atomic32 workers_unregistered_during_join_ = 0; | 66 subtle::Atomic32 workers_unregistered_during_join_ = 0; |
66 #endif | 67 #endif |
67 | 68 |
68 DISALLOW_COPY_AND_ASSIGN(SchedulerSingleThreadTaskRunnerManager); | 69 DISALLOW_COPY_AND_ASSIGN(SchedulerSingleThreadTaskRunnerManager); |
69 }; | 70 }; |
70 | 71 |
71 } // namespace internal | 72 } // namespace internal |
72 } // namespace base | 73 } // namespace base |
73 | 74 |
74 #endif // BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ | 75 #endif // BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ |
OLD | NEW |