Chromium Code Reviews| Index: base/task_scheduler/task_scheduler.cc |
| diff --git a/base/task_scheduler/task_scheduler.cc b/base/task_scheduler/task_scheduler.cc |
| index 592d6f4a15ecb97f79f890cbd66ee9001c82f596..3a2680ab71ac19a23b87d5318f41a9123c3585db 100644 |
| --- a/base/task_scheduler/task_scheduler.cc |
| +++ b/base/task_scheduler/task_scheduler.cc |
| @@ -21,8 +21,29 @@ namespace { |
| // |g_task_scheduler| is intentionally leaked on shutdown. |
| TaskScheduler* g_task_scheduler = nullptr; |
| +SchedulerWorkerPoolParams GetWorkerPoolParamsWithPredefinedNameAndPriority( |
|
gab
2017/03/20 20:31:56
It's not really "predefined" as it's being defined
fdoray
2017/03/20 20:43:54
Done.
|
| + const std::string& name, |
| + ThreadPriority priority_hint, |
|
robliao
2017/03/20 20:47:32
The end state version won't be using SchedulerWork
fdoray
2017/03/20 20:55:35
Yes it will https://codereview.chromium.org/274930
robliao
2017/03/20 21:00:56
So once we remove those params, what will this fil
robliao
2017/03/20 21:55:00
Inlining here so we don't lose track of the thread
robliao
2017/03/20 22:06:27
I guess this is where I'm a little confused.
From
fdoray
2017/03/21 14:41:26
In this CL, TaskSchedulerImpl is still initialized
robliao
2017/03/21 20:02:29
Summary from offline discussion:
An alternative so
fdoray
2017/03/22 13:07:38
Done.
|
| + const SchedulerWorkerPoolParams params) { |
| + return SchedulerWorkerPoolParams( |
| + name, priority_hint, params.standby_thread_policy(), params.max_threads(), |
| + params.suggested_reclaim_time(), params.backward_compatibility()); |
| +} |
| + |
| } // namespace |
| +TaskScheduler::InitParams::InitParams( |
| + const SchedulerWorkerPoolParams& background_worker_pool_params_in, |
| + const SchedulerWorkerPoolParams& background_blocking_worker_pool_params_in, |
| + const SchedulerWorkerPoolParams& foreground_worker_pool_params_in, |
| + const SchedulerWorkerPoolParams& foreground_blocking_worker_pool_params_in) |
| + : background_worker_pool_params(background_worker_pool_params_in), |
| + background_blocking_worker_pool_params( |
| + background_blocking_worker_pool_params_in), |
| + foreground_worker_pool_params(foreground_worker_pool_params_in), |
| + foreground_blocking_worker_pool_params( |
| + foreground_blocking_worker_pool_params_in) {} |
| + |
| #if !defined(OS_NACL) |
| // static |
| void TaskScheduler::CreateAndSetSimpleTaskScheduler(const std::string& name) { |
| @@ -31,7 +52,7 @@ void TaskScheduler::CreateAndSetSimpleTaskScheduler(const std::string& name) { |
| worker_pool_params_vector.emplace_back( |
| name, ThreadPriority::NORMAL, |
| SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY, |
| - std::max(kMinNumThreads, base::SysInfo::NumberOfProcessors()), |
| + std::max(kMinNumThreads, SysInfo::NumberOfProcessors()), |
| TimeDelta::FromSeconds(30)); |
| CreateAndSetDefaultTaskScheduler( |
| worker_pool_params_vector, |
| @@ -48,6 +69,55 @@ void TaskScheduler::CreateAndSetDefaultTaskScheduler( |
| worker_pool_params_vector, worker_pool_index_for_traits_callback)); |
| } |
| +void TaskScheduler::CreateAndSetDefaultTaskScheduler( |
| + const std::string& name, |
| + const InitParams& init_params) { |
| + enum WorkerPoolType : size_t { |
| + BACKGROUND = 0, |
| + BACKGROUND_BLOCKING, |
| + FOREGROUND, |
| + FOREGROUND_BLOCKING, |
| + WORKER_POOL_COUNT // Always last. |
| + }; |
| + |
| + std::vector<SchedulerWorkerPoolParams> worker_pool_params_vector; |
| + |
| + DCHECK_EQ(BACKGROUND, worker_pool_params_vector.size()); |
| + worker_pool_params_vector.emplace_back( |
| + GetWorkerPoolParamsWithPredefinedNameAndPriority( |
| + name + "Background", ThreadPriority::BACKGROUND, |
| + init_params.background_worker_pool_params)); |
| + |
| + DCHECK_EQ(BACKGROUND_BLOCKING, worker_pool_params_vector.size()); |
| + worker_pool_params_vector.emplace_back( |
| + GetWorkerPoolParamsWithPredefinedNameAndPriority( |
| + name + "BackgroundBlocking", ThreadPriority::BACKGROUND, |
| + init_params.background_blocking_worker_pool_params)); |
| + |
| + DCHECK_EQ(FOREGROUND, worker_pool_params_vector.size()); |
| + worker_pool_params_vector.emplace_back( |
| + GetWorkerPoolParamsWithPredefinedNameAndPriority( |
| + name + "Foreground", ThreadPriority::NORMAL, |
| + init_params.foreground_worker_pool_params)); |
| + |
| + DCHECK_EQ(FOREGROUND_BLOCKING, worker_pool_params_vector.size()); |
| + worker_pool_params_vector.emplace_back( |
| + GetWorkerPoolParamsWithPredefinedNameAndPriority( |
| + name + "ForegroundBlocking", ThreadPriority::NORMAL, |
| + init_params.foreground_blocking_worker_pool_params)); |
| + |
| + DCHECK_EQ(WORKER_POOL_COUNT, worker_pool_params_vector.size()); |
| + |
| + CreateAndSetDefaultTaskScheduler( |
| + worker_pool_params_vector, Bind([](const TaskTraits& traits) -> size_t { |
| + const bool is_background = |
| + traits.priority() == TaskPriority::BACKGROUND; |
| + if (traits.may_block() || traits.with_base_sync_primitives()) |
| + return is_background ? BACKGROUND_BLOCKING : FOREGROUND_BLOCKING; |
| + return is_background ? BACKGROUND : FOREGROUND; |
| + })); |
| +} |
| + |
| // static |
| void TaskScheduler::SetInstance(std::unique_ptr<TaskScheduler> task_scheduler) { |
| delete g_task_scheduler; |