Index: base/task_scheduler/scheduler_worker_pool_impl.cc |
diff --git a/base/task_scheduler/scheduler_worker_pool_impl.cc b/base/task_scheduler/scheduler_worker_pool_impl.cc |
index dc040301ca31af4868522b3983b112f293e0d28e..893c7de21438dbbf2adab9a3ffeb4985b8c76151 100644 |
--- a/base/task_scheduler/scheduler_worker_pool_impl.cc |
+++ b/base/task_scheduler/scheduler_worker_pool_impl.cc |
@@ -19,7 +19,6 @@ |
#include "base/sequenced_task_runner.h" |
#include "base/single_thread_task_runner.h" |
#include "base/strings/stringprintf.h" |
-#include "base/task_scheduler/delayed_task_manager.h" |
#include "base/task_scheduler/task_tracker.h" |
#include "base/threading/platform_thread.h" |
#include "base/threading/thread_local.h" |
@@ -65,7 +64,7 @@ class SchedulerParallelTaskRunner : public TaskRunner { |
// Post the task as part of a one-off single-task Sequence. |
return worker_pool_->PostTaskWithSequence( |
MakeUnique<Task>(from_here, closure, traits_, delay), |
- make_scoped_refptr(new Sequence), nullptr); |
+ make_scoped_refptr(new Sequence), nullptr, delay); |
} |
bool RunsTasksOnCurrentThread() const override { |
@@ -102,7 +101,7 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner { |
// Post the task as part of |sequence_|. |
return worker_pool_->PostTaskWithSequence(std::move(task), sequence_, |
- nullptr); |
+ nullptr, delay); |
} |
bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
@@ -187,7 +186,7 @@ class SchedulerWorkerPoolImpl::SchedulerSingleThreadTaskRunner : |
// Post the task to be executed by |worker_| as part of |sequence_|. |
return worker_pool_->PostTaskWithSequence(std::move(task), sequence_, |
- worker_); |
+ worker_, delay); |
} |
bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
@@ -298,12 +297,11 @@ std::unique_ptr<SchedulerWorkerPoolImpl> SchedulerWorkerPoolImpl::Create( |
const SchedulerWorkerPoolParams& params, |
const ReEnqueueSequenceCallback& re_enqueue_sequence_callback, |
TaskTracker* task_tracker, |
- DelayedTaskManager* delayed_task_manager) { |
+ scoped_refptr<TaskRunner> service_thread_task_runner) { |
std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool( |
- new SchedulerWorkerPoolImpl(params.name(), |
- params.io_restriction(), |
- params.suggested_reclaim_time(), |
- task_tracker, delayed_task_manager)); |
+ new SchedulerWorkerPoolImpl(params.name(), params.io_restriction(), |
+ params.suggested_reclaim_time(), task_tracker, |
+ std::move(service_thread_task_runner))); |
if (worker_pool->Initialize(params.priority_hint(), params.max_threads(), |
re_enqueue_sequence_callback)) { |
return worker_pool; |
@@ -382,19 +380,24 @@ void SchedulerWorkerPoolImpl::ReEnqueueSequence( |
bool SchedulerWorkerPoolImpl::PostTaskWithSequence( |
std::unique_ptr<Task> task, |
scoped_refptr<Sequence> sequence, |
- SchedulerWorker* worker) { |
+ SchedulerWorker* worker, |
+ TimeDelta delay) { |
robliao
2016/10/12 20:55:45
I would be okay with storing the delay on the task
fdoray
2016/10/13 13:51:29
Done. Stored the delay with Task and added TODO.
|
DCHECK(task); |
DCHECK(sequence); |
DCHECK(!worker || ContainsWorker(workers_, worker)); |
+ DCHECK_EQ(delay.is_zero(), task->delayed_run_time.is_null()); |
if (!task_tracker_->WillPostTask(task.get())) |
return false; |
- if (task->delayed_run_time.is_null()) { |
+ if (delay.is_zero()) { |
PostTaskWithSequenceNow(std::move(task), std::move(sequence), worker); |
} else { |
- delayed_task_manager_->AddDelayedTask(std::move(task), std::move(sequence), |
- worker, this); |
+ service_thread_task_runner_->PostDelayedTask( |
+ FROM_HERE, Bind(&SchedulerWorkerPoolImpl::PostTaskWithSequenceNow, |
+ Unretained(this), Passed(std::move(task)), |
+ std::move(sequence), worker), |
+ delay); |
} |
return true; |
@@ -410,7 +413,7 @@ void SchedulerWorkerPoolImpl::PostTaskWithSequenceNow( |
// Confirm that |task| is ready to run (its delayed run time is either null or |
// in the past). |
- DCHECK_LE(task->delayed_run_time, delayed_task_manager_->Now()); |
+ DCHECK_LE(task->delayed_run_time, TimeTicks::Now()); |
// Because |worker| belongs to this worker pool, we know that the type |
// of its delegate is SchedulerWorkerDelegateImpl. |
@@ -653,7 +656,7 @@ SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl( |
SchedulerWorkerPoolParams::IORestriction io_restriction, |
const TimeDelta& suggested_reclaim_time, |
TaskTracker* task_tracker, |
- DelayedTaskManager* delayed_task_manager) |
+ scoped_refptr<TaskRunner> service_thread_task_runner) |
: name_(name.as_string()), |
io_restriction_(io_restriction), |
suggested_reclaim_time_(suggested_reclaim_time), |
@@ -684,9 +687,9 @@ SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl( |
50, |
HistogramBase::kUmaTargetedHistogramFlag)), |
task_tracker_(task_tracker), |
- delayed_task_manager_(delayed_task_manager) { |
+ service_thread_task_runner_(std::move(service_thread_task_runner)) { |
DCHECK(task_tracker_); |
- DCHECK(delayed_task_manager_); |
+ DCHECK(service_thread_task_runner_); |
} |
bool SchedulerWorkerPoolImpl::Initialize( |