Index: base/task_scheduler/scheduler_thread_pool.cc |
diff --git a/base/task_scheduler/scheduler_thread_pool.cc b/base/task_scheduler/scheduler_thread_pool.cc |
index d42e915b8d40ee64cd376b100fad00710ce20b9f..cd6a97538cca665ca215a7b77969bd05e3258ba5 100644 |
--- a/base/task_scheduler/scheduler_thread_pool.cc |
+++ b/base/task_scheduler/scheduler_thread_pool.cc |
@@ -30,10 +30,12 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
public: |
SchedulerParallelTaskRunner(const TaskTraits& traits, |
PriorityQueue* priority_queue, |
- TaskTracker* task_tracker) |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager) |
: traits_(traits), |
priority_queue_(priority_queue), |
- task_tracker_(task_tracker) {} |
+ task_tracker_(task_tracker), |
+ delayed_task_manager_(delayed_task_manager) {} |
// TaskRunner: |
bool PostDelayedTask(const tracked_objects::Location& from_here, |
@@ -45,7 +47,7 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
// Post the task as part of a one-off single-task Sequence. |
return PostTaskHelper(WrapUnique(new Task(from_here, closure, traits_)), |
make_scoped_refptr(new Sequence), priority_queue_, |
- task_tracker_); |
+ task_tracker_, delayed_task_manager_); |
} |
bool RunsTasksOnCurrentThread() const override { |
@@ -58,6 +60,7 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
const TaskTraits traits_; |
PriorityQueue* const priority_queue_; |
TaskTracker* const task_tracker_; |
+ DelayedTaskManager* const delayed_task_manager_; |
DISALLOW_COPY_AND_ASSIGN(SchedulerParallelTaskRunner); |
}; |
@@ -67,10 +70,12 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
public: |
SchedulerSequencedTaskRunner(const TaskTraits& traits, |
PriorityQueue* priority_queue, |
- TaskTracker* task_tracker) |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager) |
: traits_(traits), |
priority_queue_(priority_queue), |
- task_tracker_(task_tracker) {} |
+ task_tracker_(task_tracker), |
+ delayed_task_manager_(delayed_task_manager) {} |
// SequencedTaskRunner: |
bool PostDelayedTask(const tracked_objects::Location& from_here, |
@@ -81,7 +86,8 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
// Post the task as part of |sequence_|. |
return PostTaskHelper(WrapUnique(new Task(from_here, closure, traits_)), |
- sequence_, priority_queue_, task_tracker_); |
+ sequence_, priority_queue_, task_tracker_, |
+ delayed_task_manager_); |
} |
bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
@@ -104,6 +110,7 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
const TaskTraits traits_; |
PriorityQueue* const priority_queue_; |
TaskTracker* const task_tracker_; |
+ DelayedTaskManager* const delayed_task_manager_; |
DISALLOW_COPY_AND_ASSIGN(SchedulerSequencedTaskRunner); |
}; |
@@ -135,9 +142,10 @@ std::unique_ptr<SchedulerThreadPool> SchedulerThreadPool::CreateThreadPool( |
ThreadPriority thread_priority, |
size_t max_threads, |
const EnqueueSequenceCallback& enqueue_sequence_callback, |
- TaskTracker* task_tracker) { |
- std::unique_ptr<SchedulerThreadPool> thread_pool( |
- new SchedulerThreadPool(enqueue_sequence_callback, task_tracker)); |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager) { |
+ std::unique_ptr<SchedulerThreadPool> thread_pool(new SchedulerThreadPool( |
+ enqueue_sequence_callback, task_tracker, delayed_task_manager)); |
if (thread_pool->Initialize(thread_priority, max_threads)) |
return thread_pool; |
return nullptr; |
@@ -158,11 +166,13 @@ scoped_refptr<TaskRunner> SchedulerThreadPool::CreateTaskRunnerWithTraits( |
switch (execution_mode) { |
case ExecutionMode::PARALLEL: |
return make_scoped_refptr(new SchedulerParallelTaskRunner( |
- traits, &shared_priority_queue_, task_tracker_)); |
+ traits, &shared_priority_queue_, task_tracker_, |
+ delayed_task_manager_)); |
case ExecutionMode::SEQUENCED: |
return make_scoped_refptr(new SchedulerSequencedTaskRunner( |
- traits, &shared_priority_queue_, task_tracker_)); |
+ traits, &shared_priority_queue_, task_tracker_, |
+ delayed_task_manager_)); |
case ExecutionMode::SINGLE_THREADED: |
// TODO(fdoray): Support SINGLE_THREADED TaskRunners. |
@@ -258,7 +268,8 @@ void SchedulerThreadPool::SchedulerWorkerThreadDelegateImpl::EnqueueSequence( |
SchedulerThreadPool::SchedulerThreadPool( |
const EnqueueSequenceCallback& enqueue_sequence_callback, |
- TaskTracker* task_tracker) |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager) |
: shared_priority_queue_( |
Bind(&SchedulerThreadPool::WakeUpOneThread, Unretained(this))), |
worker_threads_lock_(shared_priority_queue_.container_lock()), |
@@ -268,8 +279,10 @@ SchedulerThreadPool::SchedulerThreadPool( |
worker_thread_delegate_( |
new SchedulerWorkerThreadDelegateImpl(this, |
enqueue_sequence_callback)), |
- task_tracker_(task_tracker) { |
+ task_tracker_(task_tracker), |
+ delayed_task_manager_(delayed_task_manager) { |
DCHECK(task_tracker_); |
+ DCHECK(delayed_task_manager_); |
} |
bool SchedulerThreadPool::Initialize(ThreadPriority thread_priority, |