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

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 without dcheck_in_ref_count 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 any_thread().immediate_incoming_queue.clear(); 186 any_thread().immediate_incoming_queue.clear();
187 main_thread_only().immediate_work_queue.reset(); 187 main_thread_only().immediate_work_queue.reset();
188 main_thread_only().delayed_work_queue.reset(); 188 main_thread_only().delayed_work_queue.reset();
189 } 189 }
190 190
191 bool TaskQueueImpl::RunsTasksOnCurrentThread() const { 191 bool TaskQueueImpl::RunsTasksOnCurrentThread() const {
192 return base::PlatformThread::CurrentId() == thread_id_; 192 return base::PlatformThread::CurrentId() == thread_id_;
193 } 193 }
194 194
195 bool TaskQueueImpl::PostDelayedTask(const tracked_objects::Location& from_here, 195 bool TaskQueueImpl::PostDelayedTask(const tracked_objects::Location& from_here,
196 base::Closure task, 196 base::OnceClosure task,
197 base::TimeDelta delay) { 197 base::TimeDelta delay) {
198 if (delay.is_zero()) 198 if (delay.is_zero())
199 return PostImmediateTaskImpl(from_here, std::move(task), TaskType::NORMAL); 199 return PostImmediateTaskImpl(from_here, std::move(task), TaskType::NORMAL);
200 200
201 return PostDelayedTaskImpl(from_here, std::move(task), delay, 201 return PostDelayedTaskImpl(from_here, std::move(task), delay,
202 TaskType::NORMAL); 202 TaskType::NORMAL);
203 } 203 }
204 204
205 bool TaskQueueImpl::PostNonNestableDelayedTask( 205 bool TaskQueueImpl::PostNonNestableDelayedTask(
206 const tracked_objects::Location& from_here, 206 const tracked_objects::Location& from_here,
207 base::Closure task, 207 base::OnceClosure task,
208 base::TimeDelta delay) { 208 base::TimeDelta delay) {
209 if (delay.is_zero()) 209 if (delay.is_zero())
210 return PostImmediateTaskImpl(from_here, std::move(task), 210 return PostImmediateTaskImpl(from_here, std::move(task),
211 TaskType::NON_NESTABLE); 211 TaskType::NON_NESTABLE);
212 212
213 return PostDelayedTaskImpl(from_here, std::move(task), delay, 213 return PostDelayedTaskImpl(from_here, std::move(task), delay,
214 TaskType::NON_NESTABLE); 214 TaskType::NON_NESTABLE);
215 } 215 }
216 216
217 bool TaskQueueImpl::PostImmediateTaskImpl( 217 bool TaskQueueImpl::PostImmediateTaskImpl(
218 const tracked_objects::Location& from_here, 218 const tracked_objects::Location& from_here,
219 base::Closure task, 219 base::OnceClosure task,
220 TaskType task_type) { 220 TaskType task_type) {
221 base::AutoLock lock(any_thread_lock_); 221 base::AutoLock lock(any_thread_lock_);
222 if (!any_thread().task_queue_manager) 222 if (!any_thread().task_queue_manager)
223 return false; 223 return false;
224 224
225 EnqueueOrder sequence_number = 225 EnqueueOrder sequence_number =
226 any_thread().task_queue_manager->GetNextSequenceNumber(); 226 any_thread().task_queue_manager->GetNextSequenceNumber();
227 227
228 PushOntoImmediateIncomingQueueLocked(from_here, std::move(task), 228 PushOntoImmediateIncomingQueueLocked(from_here, std::move(task),
229 base::TimeTicks(), sequence_number, 229 base::TimeTicks(), sequence_number,
230 task_type != TaskType::NON_NESTABLE); 230 task_type != TaskType::NON_NESTABLE);
231 return true; 231 return true;
232 } 232 }
233 233
234 bool TaskQueueImpl::PostDelayedTaskImpl( 234 bool TaskQueueImpl::PostDelayedTaskImpl(
235 const tracked_objects::Location& from_here, 235 const tracked_objects::Location& from_here,
236 base::Closure task, 236 base::OnceClosure task,
237 base::TimeDelta delay, 237 base::TimeDelta delay,
238 TaskType task_type) { 238 TaskType task_type) {
239 DCHECK_GT(delay, base::TimeDelta()); 239 DCHECK_GT(delay, base::TimeDelta());
240 if (base::PlatformThread::CurrentId() == thread_id_) { 240 if (base::PlatformThread::CurrentId() == thread_id_) {
241 // Lock-free fast path for delayed tasks posted from the main thread. 241 // Lock-free fast path for delayed tasks posted from the main thread.
242 if (!main_thread_only().task_queue_manager) 242 if (!main_thread_only().task_queue_manager)
243 return false; 243 return false;
244 244
245 EnqueueOrder sequence_number = 245 EnqueueOrder sequence_number =
246 main_thread_only().task_queue_manager->GetNextSequenceNumber(); 246 main_thread_only().task_queue_manager->GetNextSequenceNumber();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } else { 322 } else {
323 // If |delayed_run_time| is in the future we can queue it as normal. 323 // If |delayed_run_time| is in the future we can queue it as normal.
324 PushOntoDelayedIncomingQueueFromMainThread(std::move(pending_task), 324 PushOntoDelayedIncomingQueueFromMainThread(std::move(pending_task),
325 time_domain_now); 325 time_domain_now);
326 } 326 }
327 TraceQueueSize(false); 327 TraceQueueSize(false);
328 } 328 }
329 329
330 void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked( 330 void TaskQueueImpl::PushOntoImmediateIncomingQueueLocked(
331 const tracked_objects::Location& posted_from, 331 const tracked_objects::Location& posted_from,
332 base::Closure task, 332 base::OnceClosure task,
333 base::TimeTicks desired_run_time, 333 base::TimeTicks desired_run_time,
334 EnqueueOrder sequence_number, 334 EnqueueOrder sequence_number,
335 bool nestable) { 335 bool nestable) {
336 // If the |immediate_incoming_queue| is empty we need a DoWork posted to make 336 // If the |immediate_incoming_queue| is empty we need a DoWork posted to make
337 // it run. 337 // it run.
338 if (any_thread().immediate_incoming_queue.empty()) { 338 if (any_thread().immediate_incoming_queue.empty()) {
339 // However there's no point posting a DoWork for a blocked queue. NB we can 339 // However there's no point posting a DoWork for a blocked queue. NB we can
340 // only tell if it's disabled from the main thread. 340 // only tell if it's disabled from the main thread.
341 bool queue_is_blocked = 341 bool queue_is_blocked =
342 RunsTasksOnCurrentThread() && 342 RunsTasksOnCurrentThread() &&
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 882
883 void TaskQueueImpl::PushImmediateIncomingTaskForTest( 883 void TaskQueueImpl::PushImmediateIncomingTaskForTest(
884 TaskQueueImpl::Task&& task) { 884 TaskQueueImpl::Task&& task) {
885 base::AutoLock lock(any_thread_lock_); 885 base::AutoLock lock(any_thread_lock_);
886 any_thread().immediate_incoming_queue.push_back(std::move(task)); 886 any_thread().immediate_incoming_queue.push_back(std::move(task));
887 } 887 }
888 888
889 } // namespace internal 889 } // namespace internal
890 } // namespace scheduler 890 } // namespace scheduler
891 } // namespace blink 891 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698