Chromium Code Reviews| Index: base/task_scheduler/task_scheduler_impl.cc |
| diff --git a/base/task_scheduler/task_scheduler_impl.cc b/base/task_scheduler/task_scheduler_impl.cc |
| index 4a1feb13ef3103405dc2c8a87b6f1caccb9f4a48..1ed2a6a0f3f856f2e5ffe1563a4aaba319bd6aa5 100644 |
| --- a/base/task_scheduler/task_scheduler_impl.cc |
| +++ b/base/task_scheduler/task_scheduler_impl.cc |
| @@ -9,10 +9,17 @@ |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "base/memory/ptr_util.h" |
| +#include "base/task_scheduler/delayed_task_manager.h" |
| #include "base/task_scheduler/scheduler_worker_pool_params.h" |
| #include "base/task_scheduler/sequence_sort_key.h" |
| #include "base/task_scheduler/task.h" |
| +#include "base/task_scheduler/task_tracker.h" |
| #include "base/time/time.h" |
| +#include "build/build_config.h" |
| + |
| +#if defined(OS_POSIX) && !defined(OS_NACL_SFI) |
|
robliao
2016/10/20 00:59:40
Worth commenting that we don't support NaCl.
Also,
fdoray
2016/10/21 12:29:43
Added comment in task_tracker_posix.h and in TaskS
|
| +#include "base/task_scheduler/task_tracker_posix.h" |
| +#endif |
| namespace base { |
| namespace internal { |
| @@ -53,11 +60,13 @@ scoped_refptr<TaskRunner> TaskSchedulerImpl::CreateTaskRunnerWithTraits( |
| void TaskSchedulerImpl::Shutdown() { |
| // TODO(fdoray): Increase the priority of BACKGROUND tasks blocking shutdown. |
| - task_tracker_.Shutdown(); |
| + DCHECK(task_tracker_); |
| + task_tracker_->Shutdown(); |
| } |
| void TaskSchedulerImpl::FlushForTesting() { |
| - task_tracker_.Flush(); |
| + DCHECK(task_tracker_); |
| + task_tracker_->Flush(); |
| } |
| void TaskSchedulerImpl::JoinForTesting() { |
| @@ -96,8 +105,16 @@ void TaskSchedulerImpl::Initialize( |
| CHECK(service_thread_.StartWithOptions( |
| Thread::Options(kServiceThreadMessageLoopType, kDefaultStackSize))); |
| - // Instantiate the DelayedTaskManager. The service thread must be started |
| - // before its TaskRunner is available. |
| + // Instantiate TaskTracker and DelayedTaskManager after starting the service |
| + // thread. The service thread MessageLoopForIO and TaskRunner aren't available |
| + // before that. |
| + task_tracker_ = |
| +#if defined(OS_POSIX) && !defined(OS_NACL_SFI) |
| + base::MakeUnique<TaskTrackerPosix>( |
| + static_cast<MessageLoopForIO*>(service_thread_.message_loop())); |
| +#else |
| + base::MakeUnique<TaskTracker>(); |
| +#endif |
| delayed_task_manager_ = |
| base::MakeUnique<DelayedTaskManager>(service_thread_.task_runner()); |
| @@ -111,7 +128,7 @@ void TaskSchedulerImpl::Initialize( |
| // SchedulerWorkerPoolImpl::Create() is safe because a TaskSchedulerImpl |
| // can't be deleted before all its worker pools have been joined. |
| worker_pools_.push_back(SchedulerWorkerPoolImpl::Create( |
| - worker_pool_params, re_enqueue_sequence_callback, &task_tracker_, |
| + worker_pool_params, re_enqueue_sequence_callback, task_tracker_.get(), |
| delayed_task_manager_.get())); |
| CHECK(worker_pools_.back()); |
| } |