| Index: base/task_scheduler/utils.cc
|
| diff --git a/base/task_scheduler/utils.cc b/base/task_scheduler/utils.cc
|
| index 88bdcf957d0a5f83522102cfca82f86a153c018d..f8f0685132987bf9cf8a75acb5d86d7321fe42f3 100644
|
| --- a/base/task_scheduler/utils.cc
|
| +++ b/base/task_scheduler/utils.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/callback.h"
|
| #include "base/logging.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/task_scheduler/delayed_task_manager.h"
|
| #include "base/task_scheduler/priority_queue.h"
|
| #include "base/task_scheduler/scheduler_task_executor.h"
|
| #include "base/task_scheduler/sequence_sort_key.h"
|
| @@ -24,22 +25,29 @@ bool PostTaskToExecutor(const tracked_objects::Location& posted_from,
|
| const TimeDelta& delay,
|
| scoped_refptr<Sequence> sequence,
|
| SchedulerTaskExecutor* executor,
|
| - TaskTracker* task_tracker) {
|
| + TaskTracker* task_tracker,
|
| + DelayedTaskManager* delayed_task_manager) {
|
| DCHECK(!closure.is_null());
|
| DCHECK(sequence);
|
| DCHECK(executor);
|
| DCHECK(task_tracker);
|
| + DCHECK(delayed_task_manager);
|
|
|
| - // TODO(fdoray): Support delayed tasks.
|
| - DCHECK(delay.is_zero());
|
| -
|
| + const TimeTicks delayed_run_time =
|
| + delay.is_zero() ? TimeTicks() : TimeTicks::Now() + delay;
|
| std::unique_ptr<Task> task(
|
| - new Task(posted_from, closure, traits, TimeTicks()));
|
| + new Task(posted_from, closure, traits, delayed_run_time));
|
|
|
| if (!task_tracker->WillPostTask(task.get()))
|
| return false;
|
|
|
| - executor->PostTaskWithSequence(std::move(task), std::move(sequence));
|
| + if (delay.is_zero()) {
|
| + executor->PostTaskWithSequence(std::move(task), std::move(sequence));
|
| + } else {
|
| + delayed_task_manager->AddDelayedTask(std::move(task), std::move(sequence),
|
| + executor);
|
| + }
|
| +
|
| return true;
|
| }
|
|
|
|
|