Index: base/task_scheduler/utils.cc |
diff --git a/base/task_scheduler/utils.cc b/base/task_scheduler/utils.cc |
index d43028fe7773dcf82199470d98bb971d58393220..3623b438f83e373aa9fba0f2289208da1600cb6b 100644 |
--- a/base/task_scheduler/utils.cc |
+++ b/base/task_scheduler/utils.cc |
@@ -8,6 +8,7 @@ |
#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/sequence_sort_key.h" |
#include "base/task_scheduler/task_tracker.h" |
@@ -15,17 +16,12 @@ |
namespace base { |
namespace internal { |
-bool PostTaskHelper(std::unique_ptr<Task> task, |
- scoped_refptr<Sequence> sequence, |
- PriorityQueue* priority_queue, |
- TaskTracker* task_tracker) { |
+void BASE_EXPORT PostTaskNowHelper(std::unique_ptr<Task> task, |
+ scoped_refptr<Sequence> sequence, |
+ PriorityQueue* priority_queue) { |
DCHECK(task); |
DCHECK(sequence); |
DCHECK(priority_queue); |
- DCHECK(task_tracker); |
- |
- if (!task_tracker->WillPostTask(task.get())) |
- return false; |
const bool sequence_was_empty = sequence->PushTask(std::move(task)); |
if (sequence_was_empty) { |
@@ -39,6 +35,27 @@ bool PostTaskHelper(std::unique_ptr<Task> task, |
WrapUnique(new PriorityQueue::SequenceAndSortKey(std::move(sequence), |
sequence_sort_key))); |
} |
+} |
+ |
+bool PostTaskHelper(std::unique_ptr<Task> task, |
+ scoped_refptr<Sequence> sequence, |
+ PriorityQueue* priority_queue, |
+ TaskTracker* task_tracker, |
+ DelayedTaskManager* delayed_task_manager) { |
+ DCHECK(task); |
+ DCHECK(sequence); |
+ DCHECK(priority_queue); |
+ DCHECK(task_tracker); |
+ |
+ if (!task_tracker->WillPostTask(task.get())) |
+ return false; |
+ |
+ if (task->delayed_run_time.is_null()) { |
+ PostTaskNowHelper(std::move(task), std::move(sequence), priority_queue); |
+ } else { |
+ delayed_task_manager->AddDelayedTask(std::move(task), std::move(sequence), |
+ priority_queue); |
+ } |
return true; |
} |