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; |
} |