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..bd31989b077914d20f690229c527c7abe713b5d1 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) |
| +#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() { |
| @@ -84,10 +93,10 @@ void TaskSchedulerImpl::Initialize( |
| const std::vector<SchedulerWorkerPoolParams>& worker_pool_params_vector) { |
| DCHECK(!worker_pool_params_vector.empty()); |
| - // Start the service thread. On POSIX, the service thread runs a |
| - // MessageLoopForIO to support FileDescriptorWatcher. |
| + // Start the service thread. On POSIX (except NaCL SFI), the service thread |
|
gab
2016/10/21 16:10:48
Explain why not NaCL SFI?
fdoray
2016/10/27 13:06:50
Because NaCL SFI doesn't support Libevent or CFRun
|
| + // runs a MessageLoopForIO to support FileDescriptorWatcher. |
| constexpr MessageLoop::Type kServiceThreadMessageLoopType = |
| -#if defined(OS_POSIX) |
| +#if defined(OS_POSIX) && !defined(OS_NACL_SFI) |
| MessageLoop::TYPE_IO; |
| #else |
| MessageLoop::TYPE_DEFAULT; |
| @@ -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 |
|
gab
2016/10/21 16:10:48
s/thread/thread's/
also, why mention "TaskRunner"
fdoray
2016/10/27 13:06:50
Done. task_runner() is used to instantiate Delayed
|
| + // 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()); |
| } |