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

Side by Side Diff: base/threading/sequenced_worker_pool.h

Issue 2122543002: Replace Closure in TaskRunner::PostTask with OneShotCallback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@07_oneshot
Patch Set: fix Created 4 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 5 #ifndef BASE_THREADING_SEQUENCED_WORKER_POOL_H_
6 #define BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 6 #define BASE_THREADING_SEQUENCED_WORKER_POOL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <cstddef> 10 #include <cstddef>
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 // cause nondeterministic crashes because the task could be keeping some 245 // cause nondeterministic crashes because the task could be keeping some
246 // objects alive which do work in their destructor, which could voilate the 246 // objects alive which do work in their destructor, which could voilate the
247 // assumptions of the running task. 247 // assumptions of the running task.
248 // 248 //
249 // The task will be guaranteed to run to completion before shutdown 249 // The task will be guaranteed to run to completion before shutdown
250 // (BLOCK_SHUTDOWN semantics). 250 // (BLOCK_SHUTDOWN semantics).
251 // 251 //
252 // Returns true if the task was posted successfully. This may fail during 252 // Returns true if the task was posted successfully. This may fail during
253 // shutdown regardless of the specified ShutdownBehavior. 253 // shutdown regardless of the specified ShutdownBehavior.
254 bool PostWorkerTask(const tracked_objects::Location& from_here, 254 bool PostWorkerTask(const tracked_objects::Location& from_here,
255 const Closure& task); 255 OnceClosure task);
256 256
257 // Same as PostWorkerTask but allows a delay to be specified (although doing 257 // Same as PostWorkerTask but allows a delay to be specified (although doing
258 // so changes the shutdown behavior). The task will be run after the given 258 // so changes the shutdown behavior). The task will be run after the given
259 // delay has elapsed. 259 // delay has elapsed.
260 // 260 //
261 // If the delay is nonzero, the task won't be guaranteed to run to completion 261 // If the delay is nonzero, the task won't be guaranteed to run to completion
262 // before shutdown (SKIP_ON_SHUTDOWN semantics) to avoid shutdown hangs. 262 // before shutdown (SKIP_ON_SHUTDOWN semantics) to avoid shutdown hangs.
263 // If the delay is zero, this behaves exactly like PostWorkerTask, i.e. the 263 // If the delay is zero, this behaves exactly like PostWorkerTask, i.e. the
264 // task will be guaranteed to run to completion before shutdown 264 // task will be guaranteed to run to completion before shutdown
265 // (BLOCK_SHUTDOWN semantics). 265 // (BLOCK_SHUTDOWN semantics).
266 bool PostDelayedWorkerTask(const tracked_objects::Location& from_here, 266 bool PostDelayedWorkerTask(const tracked_objects::Location& from_here,
267 const Closure& task, 267 OnceClosure task,
268 TimeDelta delay); 268 TimeDelta delay);
269 269
270 // Same as PostWorkerTask but allows specification of the shutdown behavior. 270 // Same as PostWorkerTask but allows specification of the shutdown behavior.
271 bool PostWorkerTaskWithShutdownBehavior( 271 bool PostWorkerTaskWithShutdownBehavior(
272 const tracked_objects::Location& from_here, 272 const tracked_objects::Location& from_here,
273 const Closure& task, 273 OnceClosure task,
274 WorkerShutdown shutdown_behavior); 274 WorkerShutdown shutdown_behavior);
275 275
276 // Like PostWorkerTask above, but provides sequencing semantics. This means 276 // Like PostWorkerTask above, but provides sequencing semantics. This means
277 // that tasks posted with the same sequence token (see GetSequenceToken()) 277 // that tasks posted with the same sequence token (see GetSequenceToken())
278 // are guaranteed to execute in order. This is useful in cases where you're 278 // are guaranteed to execute in order. This is useful in cases where you're
279 // doing operations that may depend on previous ones, like appending to a 279 // doing operations that may depend on previous ones, like appending to a
280 // file. 280 // file.
281 // 281 //
282 // The task will be guaranteed to run to completion before shutdown 282 // The task will be guaranteed to run to completion before shutdown
283 // (BLOCK_SHUTDOWN semantics). 283 // (BLOCK_SHUTDOWN semantics).
284 // 284 //
285 // Returns true if the task was posted successfully. This may fail during 285 // Returns true if the task was posted successfully. This may fail during
286 // shutdown regardless of the specified ShutdownBehavior. 286 // shutdown regardless of the specified ShutdownBehavior.
287 bool PostSequencedWorkerTask(SequenceToken sequence_token, 287 bool PostSequencedWorkerTask(SequenceToken sequence_token,
288 const tracked_objects::Location& from_here, 288 const tracked_objects::Location& from_here,
289 const Closure& task); 289 OnceClosure task);
290 290
291 // Like PostSequencedWorkerTask above, but allows you to specify a named 291 // Like PostSequencedWorkerTask above, but allows you to specify a named
292 // token, which saves an extra call to GetNamedSequenceToken. 292 // token, which saves an extra call to GetNamedSequenceToken.
293 bool PostNamedSequencedWorkerTask(const std::string& token_name, 293 bool PostNamedSequencedWorkerTask(const std::string& token_name,
294 const tracked_objects::Location& from_here, 294 const tracked_objects::Location& from_here,
295 const Closure& task); 295 OnceClosure task);
296 296
297 // Same as PostSequencedWorkerTask but allows a delay to be specified 297 // Same as PostSequencedWorkerTask but allows a delay to be specified
298 // (although doing so changes the shutdown behavior). The task will be run 298 // (although doing so changes the shutdown behavior). The task will be run
299 // after the given delay has elapsed. 299 // after the given delay has elapsed.
300 // 300 //
301 // If the delay is nonzero, the task won't be guaranteed to run to completion 301 // If the delay is nonzero, the task won't be guaranteed to run to completion
302 // before shutdown (SKIP_ON_SHUTDOWN semantics) to avoid shutdown hangs. 302 // before shutdown (SKIP_ON_SHUTDOWN semantics) to avoid shutdown hangs.
303 // If the delay is zero, this behaves exactly like PostSequencedWorkerTask, 303 // If the delay is zero, this behaves exactly like PostSequencedWorkerTask,
304 // i.e. the task will be guaranteed to run to completion before shutdown 304 // i.e. the task will be guaranteed to run to completion before shutdown
305 // (BLOCK_SHUTDOWN semantics). 305 // (BLOCK_SHUTDOWN semantics).
306 bool PostDelayedSequencedWorkerTask( 306 bool PostDelayedSequencedWorkerTask(
307 SequenceToken sequence_token, 307 SequenceToken sequence_token,
308 const tracked_objects::Location& from_here, 308 const tracked_objects::Location& from_here,
309 const Closure& task, 309 OnceClosure task,
310 TimeDelta delay); 310 TimeDelta delay);
311 311
312 // Same as PostSequencedWorkerTask but allows specification of the shutdown 312 // Same as PostSequencedWorkerTask but allows specification of the shutdown
313 // behavior. 313 // behavior.
314 bool PostSequencedWorkerTaskWithShutdownBehavior( 314 bool PostSequencedWorkerTaskWithShutdownBehavior(
315 SequenceToken sequence_token, 315 SequenceToken sequence_token,
316 const tracked_objects::Location& from_here, 316 const tracked_objects::Location& from_here,
317 const Closure& task, 317 OnceClosure task,
318 WorkerShutdown shutdown_behavior); 318 WorkerShutdown shutdown_behavior);
319 319
320 // TaskRunner implementation. Forwards to PostDelayedWorkerTask(). 320 // TaskRunner implementation. Forwards to PostDelayedWorkerTask().
321 bool PostDelayedTask(const tracked_objects::Location& from_here, 321 bool PostDelayedTask(const tracked_objects::Location& from_here,
322 const Closure& task, 322 OnceClosure task,
323 TimeDelta delay) override; 323 TimeDelta delay) override;
324 bool RunsTasksOnCurrentThread() const override; 324 bool RunsTasksOnCurrentThread() const override;
325 325
326 // Returns true if the current thread is processing a task with the given 326 // Returns true if the current thread is processing a task with the given
327 // sequence_token. 327 // sequence_token.
328 bool IsRunningSequenceOnCurrentThread(SequenceToken sequence_token) const; 328 bool IsRunningSequenceOnCurrentThread(SequenceToken sequence_token) const;
329 329
330 // Blocks until all pending tasks are complete. This should only be called in 330 // Blocks until all pending tasks are complete. This should only be called in
331 // unit tests when you want to validate something that should have happened. 331 // unit tests when you want to validate something that should have happened.
332 // This will not flush delayed tasks; delayed tasks get deleted. 332 // This will not flush delayed tasks; delayed tasks get deleted.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 // Avoid pulling in too many headers by putting (almost) everything 378 // Avoid pulling in too many headers by putting (almost) everything
379 // into |inner_|. 379 // into |inner_|.
380 const std::unique_ptr<Inner> inner_; 380 const std::unique_ptr<Inner> inner_;
381 381
382 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPool); 382 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPool);
383 }; 383 };
384 384
385 } // namespace base 385 } // namespace base
386 386
387 #endif // BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 387 #endif // BASE_THREADING_SEQUENCED_WORKER_POOL_H_
OLDNEW
« no previous file with comments | « base/threading/post_task_and_reply_impl_unittest.cc ('k') | base/threading/sequenced_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698