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

Unified Diff: base/task_scheduler/post_task.h

Issue 1685423002: Task Scheduler. (Closed) Base URL: https://luckyluke-private.googlesource.com/src@a_master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698