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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc

Issue 2637843002: Migrate base::TaskRunner from Closure to OnceClosure (Closed)
Patch Set: rebase Created 3 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/scheduler/base/task_queue_impl.h" 5 #include "platform/scheduler/base/task_queue_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 base::TimeTicks(), 112 base::TimeTicks(),
113 true), 113 true),
114 #ifndef NDEBUG 114 #ifndef NDEBUG
115 enqueue_order_set_(false), 115 enqueue_order_set_(false),
116 #endif 116 #endif
117 enqueue_order_(0) { 117 enqueue_order_(0) {
118 sequence_num = 0; 118 sequence_num = 0;
119 } 119 }
120 120
121 TaskQueueImpl::Task::Task(const tracked_objects::Location& posted_from, 121 TaskQueueImpl::Task::Task(const tracked_objects::Location& posted_from,
122 base::Closure task, 122 base::OnceClosure task,
123 base::TimeTicks desired_run_time, 123 base::TimeTicks desired_run_time,
124 EnqueueOrder sequence_number, 124 EnqueueOrder sequence_number,
125 bool nestable) 125 bool nestable)
126 : PendingTask(posted_from, std::move(task), desired_run_time, nestable), 126 : PendingTask(posted_from, std::move(task), desired_run_time, nestable),
127 #ifndef NDEBUG 127 #ifndef NDEBUG
128 enqueue_order_set_(false), 128 enqueue_order_set_(false),
129 #endif 129 #endif
130 enqueue_order_(0) { 130 enqueue_order_(0) {
131 sequence_num = sequence_number; 131 sequence_num = sequence_number;
132 } 132 }
133 133
134 TaskQueueImpl::Task::Task(const tracked_objects::Location& posted_from, 134 TaskQueueImpl::Task::Task(const tracked_objects::Location& posted_from,
135 base::Closure task, 135 base::OnceClosure task,
136 base::TimeTicks desired_run_time, 136 base::TimeTicks desired_run_time,
137 EnqueueOrder sequence_number, 137 EnqueueOrder sequence_number,
138 bool nestable, 138 bool nestable,
139 EnqueueOrder enqueue_order) 139 EnqueueOrder enqueue_order)
140 : PendingTask(posted_from, std::move(task), desired_run_time, nestable), 140 : PendingTask(posted_from, std::move(task), desired_run_time, nestable),
141 #ifndef NDEBUG 141 #ifndef NDEBUG
142 enqueue_order_set_(true), 142 enqueue_order_set_(true),
143 #endif 143 #endif
144 enqueue_order_(enqueue_order) { 144 enqueue_order_(enqueue_order) {
145 sequence_num = sequence_number; 145 sequence_num = sequence_number;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 immediate_incoming_queue().clear(); 187 immediate_incoming_queue().clear();
188 main_thread_only().immediate_work_queue.reset(); 188 main_thread_only().immediate_work_queue.reset();
189 main_thread_only().delayed_work_queue.reset(); 189 main_thread_only().delayed_work_queue.reset();
190 } 190 }
191 191
192 bool TaskQueueImpl::RunsTasksOnCurrentThread() const { 192 bool TaskQueueImpl::RunsTasksOnCurrentThread() const {
193 return base::PlatformThread::CurrentId() == thread_id_; 193 return base::PlatformThread::CurrentId() == thread_id_;
194 } 194 }
195 195
196 bool TaskQueueImpl::PostDelayedTask(const tracked_objects::Location& from_here, 196 bool TaskQueueImpl::PostDelayedTask(const tracked_objects::Location& from_here,
197 base::Closure task, 197 base::OnceClosure task,
198 base::TimeDelta delay) { 198 base::TimeDelta delay) {
199 if (delay.is_zero()) 199 if (delay.is_zero())
200 return PostImmediateTaskImpl(from_here, std::move(task), TaskType::NORMAL); 200 return PostImmediateTaskImpl(from_here, std::move(task), TaskType::NORMAL);
201 201
202 return PostDelayedTaskImpl(from_here, std::move(task), delay, 202 return PostDelayedTaskImpl(from_here, std::move(task), delay,
203 TaskType::NORMAL); 203 TaskType::NORMAL);
204 } 204 }
205 205
206 bool TaskQueueImpl::PostNonNestableDelayedTask( 206 bool TaskQueueImpl::PostNonNestableDelayedTask(
207 const tracked_objects::Location& from_here, 207 const tracked_objects::Location& from_here,
208 base::Closure task, 208 base::OnceClosure task,
209 base::TimeDelta delay) { 209 base::TimeDelta delay) {
210 if (delay.is_zero()) 210 if (delay.is_zero())
211 return PostImmediateTaskImpl(from_here, std::move(task), 211 return PostImmediateTaskImpl(from_here, std::move(task),
212 TaskType::NON_NESTABLE); 212 TaskType::NON_NESTABLE);
213 213
214 return PostDelayedTaskImpl(from_here, std::move(task), delay, 214 return PostDelayedTaskImpl(from_here, std::move(task), delay,
215 TaskType::NON_NESTABLE); 215 TaskType::NON_NESTABLE);
216 } 216 }
217 217
218 bool TaskQueueImpl::PostImmediateTaskImpl( 218 bool TaskQueueImpl::PostImmediateTaskImpl(
219 const tracked_objects::Location& from_here, 219 const tracked_objects::Location& from_here,
220 base::Closure task, 220 base::OnceClosure task,
221 TaskType task_type) { 221 TaskType task_type) {
222 DCHECK(task); 222 DCHECK(task);
223 base::AutoLock lock(any_thread_lock_); 223 base::AutoLock lock(any_thread_lock_);
224 if (!any_thread().task_queue_manager) 224 if (!any_thread().task_queue_manager)
225 return false; 225 return false;
226 226
227 EnqueueOrder sequence_number = 227 EnqueueOrder sequence_number =
228 any_thread().task_queue_manager->GetNextSequenceNumber(); 228 any_thread().task_queue_manager->GetNextSequenceNumber();
229 229
230 PushOntoImmediateIncomingQueueLocked(from_here, std::move(task), 230 PushOntoImmediateIncomingQueueLocked(from_here, std::move(task),
231 base::TimeTicks(), sequence_number, 231 base::TimeTicks(), sequence_number,
232 task_type != TaskType::NON_NESTABLE); 232 task_type != TaskType::NON_NESTABLE);
233 return true; 233 return true;
234 } 234 }
235 235
236 bool TaskQueueImpl::PostDelayedTaskImpl( 236 bool TaskQueueImpl::PostDelayedTaskImpl(
237 const tracked_objects::Location& from_here, 237 const tracked_objects::Location& from_here,
238 base::Closure task, 238 base::OnceClosure task,
239 base::TimeDelta delay, 239 base::TimeDelta delay,
240 TaskType task_type) { 240 TaskType task_type) {
241 DCHECK(task); 241 DCHECK(task);
242 DCHECK_GT(delay, base::TimeDelta()); 242 DCHECK_GT(delay, base::TimeDelta());
243 if (base::PlatformThread::CurrentId() == thread_id_) { 243 if (base::PlatformThread::CurrentId() == thread_id_) {
244 // Lock-free fast path for delayed tasks posted from the main thread. 244 // Lock-free fast path for delayed tasks posted from the main thread.
245 if (!main_thread_only().task_queue_manager) 245 if (!main_thread_only().task_queue_manager)
246 return false; 246 return false;
247 247
248 EnqueueOrder sequence_number = 248 EnqueueOrder sequence_number =
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 } else { 325 } else {
326 // If |delayed_run_time| is in the future we can queue it as normal. 326 // If |delayed_run_time| is in the future we can queue it as normal.
327 PushOntoDelayedIncomingQueueFromMainThread(std::move(pending_task), 327 PushOntoDelayedIncomingQueueFromMainThread(std::move(pending_task),
328 time_domain_now); 328 time_domain_now);
329 } 329 }
330 TraceQueueSize(); 330 TraceQueueSize();
331 } 331 }
332 332
333 void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked( 333 void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked(
334 const tracked_objects::Location& posted_from, 334 const tracked_objects::Location& posted_from,
335 base::Closure task, 335 base::OnceClosure task,
336 base::TimeTicks desired_run_time, 336 base::TimeTicks desired_run_time,
337 EnqueueOrder sequence_number, 337 EnqueueOrder sequence_number,
338 bool nestable) { 338 bool nestable) {
339 // If the |immediate_incoming_queue| is empty we need a DoWork posted to make 339 // If the |immediate_incoming_queue| is empty we need a DoWork posted to make
340 // it run. 340 // it run.
341 bool was_immediate_incoming_queue_empty; 341 bool was_immediate_incoming_queue_empty;
342 342
343 { 343 {
344 base::AutoLock lock(immediate_incoming_queue_lock_); 344 base::AutoLock lock(immediate_incoming_queue_lock_);
345 was_immediate_incoming_queue_empty = immediate_incoming_queue().empty(); 345 was_immediate_incoming_queue_empty = immediate_incoming_queue().empty();
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 887
888 void TaskQueueImpl::PushImmediateIncomingTaskForTest( 888 void TaskQueueImpl::PushImmediateIncomingTaskForTest(
889 TaskQueueImpl::Task&& task) { 889 TaskQueueImpl::Task&& task) {
890 base::AutoLock lock(immediate_incoming_queue_lock_); 890 base::AutoLock lock(immediate_incoming_queue_lock_);
891 immediate_incoming_queue().push_back(std::move(task)); 891 immediate_incoming_queue().push_back(std::move(task));
892 } 892 }
893 893
894 } // namespace internal 894 } // namespace internal
895 } // namespace scheduler 895 } // namespace scheduler
896 } // namespace blink 896 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698