OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef BASE_TASK_SCHEDULER_POST_TASK_H_ | |
6 #define BASE_TASK_SCHEDULER_POST_TASK_H_ | |
7 | |
8 #include "base/base_export.h" | |
9 #include "base/callback_forward.h" | |
10 #include "base/memory/ref_counted.h" | |
11 #include "base/task_runner.h" | |
12 #include "base/task_scheduler/task_traits.h" | |
13 | |
14 namespace tracked_objects { | |
15 class Location; | |
16 } | |
17 | |
18 namespace base { | |
19 // The functions below forward posted tasks to the task scheduler. | |
20 // A TaskScheduler must have been initialized via | |
21 // TaskScheduler::Initialize() before these are valid. | |
22 // | |
23 // To post a simple one-off task: | |
24 // PostTask(FROM_HERE, Bind(...)); | |
25 // | |
26 // To post a high priority one-off task to respond to a user interaction: | |
27 // PostTaskWithTraits( | |
28 // FROM_HERE, | |
29 // TaskTraits().WithPriority(TaskPriority::USER_BLOCKING), | |
30 // Bind(...)); | |
31 // | |
32 // To post tasks that must run in sequence: | |
33 // scoped_refptr<TaskRunner> task_runner = CreateTaskRunnerWithTraits( | |
34 // TaskTraits(), ExecutionMode::SEQUENCED); | |
35 // task_runner.PostTask(FROM_HERE, Bind(...)); | |
36 // task_runner.PostTask(FROM_HERE, Bind(...)); | |
37 // | |
38 // To post file I/O tasks that must run in sequence and can be skipped on | |
39 // shutdown: | |
40 // scoped_refptr<TaskRunner> task_runner = | |
41 // CreateTaskRunnerWithTraits( | |
42 // TaskTraits().WithFileIO().WithShutdownBehavior( | |
43 // TaskShutdownBehavior::SKIP_ON_SHUTDOWN), | |
44 // ExecutionMode::SEQUENCED); | |
45 // task_runner.PostTask(FROM_HERE, Bind(...)); | |
46 // task_runner.PostTask(FROM_HERE, Bind(...)); | |
47 // | |
48 // | |
49 // The default TaskTraits apply to tasks that: | |
50 // (1) don't need to do I/O, | |
51 // (2) don't affect user interaction and/or visible elements, and | |
52 // (3) can either block shutdown or be skipped on shutdown | |
53 // (barring current TaskScheduler default). | |
54 // If those loose requirements are sufficient for your task, use | |
55 // PostTask[AndReply], otherwise override these with explicit traits via | |
56 // PostTaskWithTraits[AndReply]. | |
57 | |
58 // Posts |task| to the TaskScheduler. Calling this is equivalent to | |
59 // calling PostTaskWithTraits with plain TaskTraits. | |
60 BASE_EXPORT void PostTask(const tracked_objects::Location& from_here, | |
61 const Closure& task); | |
62 | |
63 // Posts |task| to the TaskScheduler and posts |reply| on the | |
64 // caller's execution context (i.e. same Sequence or MessageLoop) | |
65 // when |task| completes. Calling this is equivalent to calling | |
66 // PostTaskWithTraitsAndReply with plain TaskTraits. | |
67 BASE_EXPORT void PostTaskAndReply(const tracked_objects::Location& from_here, | |
68 const Closure& task, | |
69 const Closure& reply); | |
70 | |
71 // Posts |task| with specific |traits| to the TaskScheduler. | |
72 BASE_EXPORT void PostTaskWithTraits(const tracked_objects::Location& from_here, | |
73 TaskTraits traits, | |
74 const Closure& task); | |
75 | |
76 // Posts |task| with specific |traits| to the TaskScheduler and posts | |
77 // |reply| on the caller's execution context (i.e. same Sequence or | |
78 // MessageLoop). | |
79 BASE_EXPORT void PostTaskWithTraitsAndReply( | |
80 const tracked_objects::Location& from_here, | |
81 TaskTraits traits, | |
82 const Closure& task, | |
83 const Closure& reply); | |
84 | |
85 // Returns a TaskRunner whose PostTask invocations will result in scheduling | |
86 // tasks using |traits| which will be executed according to |execution_mode|. | |
87 BASE_EXPORT scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits( | |
88 TaskTraits traits, | |
89 ExecutionMode execution_mode); | |
90 | |
91 // Returns a TaskRunner akin to one created through CreateTaskRunnerWithTraits() | |
92 // except that it will inherit |parent_task_runner|'s sequence instead of | |
93 // creating its own. Useful for posting tasks with different traits to the same | |
94 // sequence. |parent_task_runner| must be a SEQUENCED TaskRunner returned from | |
95 // CreateTaskRunnerWithTraits are supported. | |
fdoray
2016/02/11 17:30:33
remove "are supported"
fdoray
2016/02/12 04:16:19
Done.
| |
96 BASE_EXPORT scoped_refptr<TaskRunner> CreateChildTaskRunnerWithTraits( | |
97 TaskRunner* parent_task_runner, | |
98 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
| |
99 | |
100 } // namespace base | |
101 | |
102 #endif // BASE_TASK_SCHEDULER_POST_TASK_H_ | |
OLD | NEW |