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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2582a5d58f91ab3cd33232cee4ddff55edc9c4a7 |
--- /dev/null |
+++ b/base/task_scheduler/scheduler_single_thread_task_runner_manager.h |
@@ -0,0 +1,80 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ |
+#define BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ |
+ |
+#include <memory> |
+#include <vector> |
+ |
+#include "base/atomicops.h" |
+#include "base/base_export.h" |
+#include "base/callback.h" |
+#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/synchronization/condition_variable.h" |
+#include "base/task_scheduler/scheduler_lock.h" |
+#include "base/task_scheduler/scheduler_worker_pool_params.h" |
+#include "base/task_scheduler/task_scheduler.h" |
+ |
+namespace base { |
+ |
+class TaskTraits; |
+class SingleThreadTaskRunner; |
+ |
+namespace internal { |
+ |
+class DelayedTaskManager; |
+class SchedulerLock; |
fdoray
2017/02/08 17:59:01
No forward declaration of SchedulerLock. base/task
robliao
2017/02/10 00:04:04
Indeed. I didn't go too carefully through this so
|
+class SchedulerWorker; |
+class TaskTracker; |
+ |
+class BASE_EXPORT SchedulerSingleThreadTaskRunnerManager final { |
+ public: |
+ SchedulerSingleThreadTaskRunnerManager( |
+ const std::vector<SchedulerWorkerPoolParams>& worker_pool_params_vector, |
+ const TaskScheduler::WorkerPoolIndexForTraitsCallback& |
+ worker_pool_index_for_traits_callback, |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager); |
+ ~SchedulerSingleThreadTaskRunnerManager(); |
+ |
+ scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits( |
+ const TaskTraits& traits); |
+ |
+ void JoinForTesting(); |
+ void WaitForAllWorkersIdleForTesting(); |
+ |
+ private: |
+ class SchedulerSingleThreadTaskRunner; |
+ class SchedulerWorkerDelegate; |
+ |
+ SchedulerWorker* CreateAndRegisterSchedulerWorker( |
+ const SchedulerWorkerPoolParams& params); |
+ |
+ void IncrementIdleWorkerCount(); |
+ void DecrementIdleWorkerCount(); |
+ |
+ void UnregisterSchedulerWorker(SchedulerWorker* worker); |
+ |
+ const std::vector<SchedulerWorkerPoolParams> worker_pool_params_vector_; |
+ const TaskScheduler::WorkerPoolIndexForTraitsCallback |
+ worker_pool_index_for_traits_callback_; |
+ TaskTracker* const task_tracker_; |
+ DelayedTaskManager* const delayed_task_manager_; |
+ |
+ SchedulerLock lock_; |
+ std::vector<std::unique_ptr<SchedulerWorker>> workers_; |
+ |
+ std::unique_ptr<ConditionVariable> idle_workers_cv_for_testing_; |
+ subtle::Atomic32 idle_workers_ = 0; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SchedulerSingleThreadTaskRunnerManager); |
+}; |
+ |
+} // namespace internal |
+ |
+} // namespace base |
+ |
+#endif // BASE_TASK_SCHEDULER_SCHEDULER_SINGLE_THREAD_TASK_RUNNER_MANAGER_H_ |