Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: base/task_scheduler/utils.cc

Issue 1806473002: TaskScheduler [9] Delayed Task Manager (Closed) Base URL: https://luckyluke-private.googlesource.com/src@s_5_worker_thread
Patch Set: self review Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/task_scheduler/utils.h" 5 #include "base/task_scheduler/utils.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/task_scheduler/delayed_task_manager.h"
11 #include "base/task_scheduler/priority_queue.h" 12 #include "base/task_scheduler/priority_queue.h"
12 #include "base/task_scheduler/sequence_sort_key.h" 13 #include "base/task_scheduler/sequence_sort_key.h"
13 #include "base/task_scheduler/task_tracker.h" 14 #include "base/task_scheduler/task_tracker.h"
14 15
15 namespace base { 16 namespace base {
16 namespace internal { 17 namespace internal {
17 18
18 bool PostTaskHelper(std::unique_ptr<Task> task, 19 void BASE_EXPORT PostTaskNowHelper(std::unique_ptr<Task> task,
19 scoped_refptr<Sequence> sequence, 20 scoped_refptr<Sequence> sequence,
20 PriorityQueue* priority_queue, 21 PriorityQueue* priority_queue) {
21 TaskTracker* task_tracker) {
22 DCHECK(task); 22 DCHECK(task);
23 DCHECK(sequence); 23 DCHECK(sequence);
24 DCHECK(priority_queue); 24 DCHECK(priority_queue);
25 DCHECK(task_tracker);
26
27 if (!task_tracker->WillPostTask(task.get()))
28 return false;
29 25
30 const bool sequence_was_empty = sequence->PushTask(std::move(task)); 26 const bool sequence_was_empty = sequence->PushTask(std::move(task));
31 if (sequence_was_empty) { 27 if (sequence_was_empty) {
32 // Insert |sequence| in |priority_queue| if it was empty before |task| was 28 // Insert |sequence| in |priority_queue| if it was empty before |task| was
33 // inserted into it. When that's not the case, one of these must be true: 29 // inserted into it. When that's not the case, one of these must be true:
34 // - |sequence| is already in a PriorityQueue, or, 30 // - |sequence| is already in a PriorityQueue, or,
35 // - A worker thread is running a Task from |sequence|. It will insert 31 // - A worker thread is running a Task from |sequence|. It will insert
36 // |sequence| in a PriorityQueue once it's done running the Task. 32 // |sequence| in a PriorityQueue once it's done running the Task.
37 const auto sequence_sort_key = sequence->GetSortKey(); 33 const auto sequence_sort_key = sequence->GetSortKey();
38 priority_queue->BeginTransaction()->Push( 34 priority_queue->BeginTransaction()->Push(
39 WrapUnique(new PriorityQueue::SequenceAndSortKey(std::move(sequence), 35 WrapUnique(new PriorityQueue::SequenceAndSortKey(std::move(sequence),
40 sequence_sort_key))); 36 sequence_sort_key)));
41 } 37 }
38 }
39
40 bool PostTaskHelper(std::unique_ptr<Task> task,
41 scoped_refptr<Sequence> sequence,
42 PriorityQueue* priority_queue,
43 TaskTracker* task_tracker,
44 DelayedTaskManager* delayed_task_manager) {
45 DCHECK(task);
46 DCHECK(sequence);
47 DCHECK(priority_queue);
48 DCHECK(task_tracker);
49
50 if (!task_tracker->WillPostTask(task.get()))
51 return false;
52
53 if (task->delayed_run_time.is_null()) {
54 PostTaskNowHelper(std::move(task), std::move(sequence), priority_queue);
55 } else {
56 delayed_task_manager->AddDelayedTask(std::move(task), std::move(sequence),
57 priority_queue);
58 }
42 59
43 return true; 60 return true;
44 } 61 }
45 62
46 } // namespace internal 63 } // namespace internal
47 } // namespace base 64 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698