Index: base/task_scheduler/post_task.h |
diff --git a/base/task_scheduler/post_task.h b/base/task_scheduler/post_task.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..26c447f3ceef12804a3c77c994a140917c38de73 |
--- /dev/null |
+++ b/base/task_scheduler/post_task.h |
@@ -0,0 +1,102 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef BASE_TASK_SCHEDULER_POST_TASK_H_ |
+#define BASE_TASK_SCHEDULER_POST_TASK_H_ |
+ |
+#include "base/base_export.h" |
+#include "base/callback_forward.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/task_runner.h" |
+#include "base/task_scheduler/task_traits.h" |
+ |
+namespace tracked_objects { |
+class Location; |
+} |
+ |
+namespace base { |
+// The functions below forward posted tasks to the task scheduler. |
+// A TaskScheduler must have been initialized via |
+// TaskScheduler::Initialize() before these are valid. |
+// |
+// To post a simple one-off task: |
+// PostTask(FROM_HERE, Bind(...)); |
+// |
+// To post a high priority one-off task to respond to a user interaction: |
+// PostTaskWithTraits( |
+// FROM_HERE, |
+// TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), |
+// Bind(...)); |
+// |
+// To post tasks that must run in sequence: |
+// scoped_refptr<TaskRunner> task_runner = CreateTaskRunnerWithTraits( |
+// TaskTraits(), ExecutionMode::SEQUENCED); |
+// task_runner.PostTask(FROM_HERE, Bind(...)); |
+// task_runner.PostTask(FROM_HERE, Bind(...)); |
+// |
+// To post file I/O tasks that must run in sequence and can be skipped on |
+// shutdown: |
+// scoped_refptr<TaskRunner> task_runner = |
+// CreateTaskRunnerWithTraits( |
+// TaskTraits().WithFileIO().WithShutdownBehavior( |
+// TaskShutdownBehavior::SKIP_ON_SHUTDOWN), |
+// ExecutionMode::SEQUENCED); |
+// task_runner.PostTask(FROM_HERE, Bind(...)); |
+// task_runner.PostTask(FROM_HERE, Bind(...)); |
+// |
+// |
+// The default TaskTraits apply to tasks that: |
+// (1) don't need to do I/O, |
+// (2) don't affect user interaction and/or visible elements, and |
+// (3) can either block shutdown or be skipped on shutdown |
+// (barring current TaskScheduler default). |
+// If those loose requirements are sufficient for your task, use |
+// PostTask[AndReply], otherwise override these with explicit traits via |
+// PostTaskWithTraits[AndReply]. |
+ |
+// Posts |task| to the TaskScheduler. Calling this is equivalent to |
+// calling PostTaskWithTraits with plain TaskTraits. |
+BASE_EXPORT void PostTask(const tracked_objects::Location& from_here, |
+ const Closure& task); |
+ |
+// Posts |task| to the TaskScheduler and posts |reply| on the |
+// caller's execution context (i.e. same Sequence or MessageLoop) |
+// when |task| completes. Calling this is equivalent to calling |
+// PostTaskWithTraitsAndReply with plain TaskTraits. |
+BASE_EXPORT void PostTaskAndReply(const tracked_objects::Location& from_here, |
+ const Closure& task, |
+ const Closure& reply); |
+ |
+// Posts |task| with specific |traits| to the TaskScheduler. |
+BASE_EXPORT void PostTaskWithTraits(const tracked_objects::Location& from_here, |
+ TaskTraits traits, |
+ const Closure& task); |
+ |
+// Posts |task| with specific |traits| to the TaskScheduler and posts |
+// |reply| on the caller's execution context (i.e. same Sequence or |
+// MessageLoop). |
+BASE_EXPORT void PostTaskWithTraitsAndReply( |
+ const tracked_objects::Location& from_here, |
+ TaskTraits traits, |
+ const Closure& task, |
+ const Closure& reply); |
+ |
+// Returns a TaskRunner whose PostTask invocations will result in scheduling |
+// tasks using |traits| which will be executed according to |execution_mode|. |
+BASE_EXPORT scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits( |
+ TaskTraits traits, |
+ ExecutionMode execution_mode); |
+ |
+// Returns a TaskRunner akin to one created through CreateTaskRunnerWithTraits() |
+// except that it will inherit |parent_task_runner|'s sequence instead of |
+// creating its own. Useful for posting tasks with different traits to the same |
+// sequence. |parent_task_runner| must be a SEQUENCED TaskRunner returned from |
+// CreateTaskRunnerWithTraits are supported. |
fdoray
2016/02/11 17:30:33
remove "are supported"
fdoray
2016/02/12 04:16:19
Done.
|
+BASE_EXPORT scoped_refptr<TaskRunner> CreateChildTaskRunnerWithTraits( |
+ TaskRunner* parent_task_runner, |
+ TaskTraits traits); |
fdoray
2016/02/11 17:30:33
How will we know that |parent_task_runner| is SEQU
robliao
2016/02/11 22:49:30
That's a good question. We currently don't have a
fdoray
2016/02/12 04:16:19
Solution 1 seems good but... ref-counted classes c
|
+ |
+} // namespace base |
+ |
+#endif // BASE_TASK_SCHEDULER_POST_TASK_H_ |