 Chromium Code Reviews
 Chromium Code Reviews Issue 2686593003:
  DESIGN DISCUSSION ONLY Task Scheduler Single Thread Task Runner Manager for Dedicated Threads per S…  (Closed)
    
  
    Issue 2686593003:
  DESIGN DISCUSSION ONLY Task Scheduler Single Thread Task Runner Manager for Dedicated Threads per S…  (Closed) 
  | 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_ |