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 b00990bb82945e8026f5cb5ad263462e39277863..b9ad01c8b4349fb2f405b57b40971acf10a64dd0 100644 |
--- a/base/task_scheduler/scheduler_thread_pool.cc |
+++ b/base/task_scheduler/scheduler_thread_pool.cc |
@@ -31,9 +31,13 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
// long as |executor| is alive. |
// TODO(robliao): Find a concrete way to manage |executor|'s memory. |
SchedulerParallelTaskRunner(const TaskTraits& traits, |
+ SchedulerTaskExecutor* executor, |
TaskTracker* task_tracker, |
- SchedulerTaskExecutor* executor) |
- : traits_(traits), task_tracker_(task_tracker), executor_(executor) {} |
+ DelayedTaskManager* delayed_task_manager) |
+ : traits_(traits), |
+ executor_(executor), |
+ task_tracker_(task_tracker), |
+ delayed_task_manager_(delayed_task_manager) {} |
// TaskRunner: |
bool PostDelayedTask(const tracked_objects::Location& from_here, |
@@ -44,7 +48,8 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
WrapUnique( |
new Task(from_here, closure, traits_, |
delay.is_zero() ? TimeTicks() : TimeTicks::Now() + delay)), |
- make_scoped_refptr(new Sequence), executor_, task_tracker_); |
+ make_scoped_refptr(new Sequence), executor_, task_tracker_, |
+ delayed_task_manager_); |
} |
bool RunsTasksOnCurrentThread() const override { |
@@ -55,8 +60,9 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
~SchedulerParallelTaskRunner() override = default; |
const TaskTraits traits_; |
- TaskTracker* const task_tracker_; |
SchedulerTaskExecutor* const executor_; |
+ TaskTracker* const task_tracker_; |
+ DelayedTaskManager* const delayed_task_manager_; |
DISALLOW_COPY_AND_ASSIGN(SchedulerParallelTaskRunner); |
}; |
@@ -68,9 +74,13 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
// long as |executor| is alive. |
// TODO(robliao): Find a concrete way to manage |executor|'s memory. |
SchedulerSequencedTaskRunner(const TaskTraits& traits, |
+ SchedulerTaskExecutor* executor, |
TaskTracker* task_tracker, |
- SchedulerTaskExecutor* executor) |
- : traits_(traits), task_tracker_(task_tracker), executor_(executor) {} |
+ DelayedTaskManager* delayed_task_manager) |
+ : traits_(traits), |
+ executor_(executor), |
+ task_tracker_(task_tracker), |
+ delayed_task_manager_(delayed_task_manager) {} |
// SequencedTaskRunner: |
bool PostDelayedTask(const tracked_objects::Location& from_here, |
@@ -81,7 +91,7 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
WrapUnique( |
new Task(from_here, closure, traits_, |
delay.is_zero() ? TimeTicks() : TimeTicks::Now() + delay)), |
- sequence_, executor_, task_tracker_); |
+ sequence_, executor_, task_tracker_, delayed_task_manager_); |
} |
bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
@@ -102,8 +112,9 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
const scoped_refptr<Sequence> sequence_ = new Sequence; |
const TaskTraits traits_; |
- TaskTracker* const task_tracker_; |
SchedulerTaskExecutor* const executor_; |
+ TaskTracker* const task_tracker_; |
+ DelayedTaskManager* const delayed_task_manager_; |
DISALLOW_COPY_AND_ASSIGN(SchedulerSequencedTaskRunner); |
}; |
@@ -141,9 +152,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; |
@@ -154,12 +166,12 @@ scoped_refptr<TaskRunner> SchedulerThreadPool::CreateTaskRunnerWithTraits( |
ExecutionMode execution_mode) { |
switch (execution_mode) { |
case ExecutionMode::PARALLEL: |
- return make_scoped_refptr( |
- new SchedulerParallelTaskRunner(traits, task_tracker_, this)); |
+ return make_scoped_refptr(new SchedulerParallelTaskRunner( |
+ traits, this, task_tracker_, delayed_task_manager_)); |
case ExecutionMode::SEQUENCED: |
- return make_scoped_refptr( |
- new SchedulerSequencedTaskRunner(traits, task_tracker_, this)); |
+ return make_scoped_refptr(new SchedulerSequencedTaskRunner( |
+ traits, this, task_tracker_, delayed_task_manager_)); |
case ExecutionMode::SINGLE_THREADED: |
// TODO(fdoray): Support SINGLE_THREADED TaskRunners. |
@@ -268,7 +280,8 @@ void SchedulerThreadPool::SchedulerWorkerThreadDelegateImpl::EnqueueSequence( |
SchedulerThreadPool::SchedulerThreadPool( |
const EnqueueSequenceCallback& enqueue_sequence_callback, |
- TaskTracker* task_tracker) |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager) |
: idle_worker_threads_stack_lock_(shared_priority_queue_.container_lock()), |
idle_worker_threads_stack_cv_for_testing_( |
idle_worker_threads_stack_lock_.CreateConditionVariable()), |
@@ -276,8 +289,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, |