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

Unified Diff: base/task_scheduler/task_traits.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/task_traits.h
diff --git a/base/task_scheduler/task_traits.h b/base/task_scheduler/task_traits.h
new file mode 100644
index 0000000000000000000000000000000000000000..8f34268de33be2b5ff068c10e0fa4c7e9125d979
--- /dev/null
+++ b/base/task_scheduler/task_traits.h
@@ -0,0 +1,135 @@
+// 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_TASK_TRAITS_H_
+#define BASE_TASK_SCHEDULER_TASK_TRAITS_H_
+
+#include "base/base_export.h"
+#include "build/build_config.h"
+
+namespace base {
+
+using TaskPriorityUnderlyingType = char;
+
+enum class TaskPriority : TaskPriorityUnderlyingType {
+ // This task affects UI immediately after a user interaction.
+ // Example: Generating data shown in the UI immediately after a click.
+ USER_BLOCKING = 2,
+ // This task affects UI or responsiveness of future user interactions. It is
+ // not an immediate response to a user interaction.
+ // Examples:
+ // - Updating the UI to reflect that a long task was completed.
+ // - Loading data that might be shown in the UI after a future user
+ // interaction.
+ USER_VISIBLE = 1,
+ // Everything else (user won't notice if this takes an arbitrarily long time
+ // to complete).
+ BACKGROUND = 0,
+};
+
+const TaskPriorityUnderlyingType kNumTaskPriorities = 3;
+
+enum class TaskShutdownBehavior {
+ // Tasks posted with this mode which have not started executing before
+ // shutdown is initiated will never run. Tasks with this mode running at
+ // shutdown will be ignored (the worker thread will not be joined).
+ //
+ // This option provides a nice way to post stuff you don't want blocking
+ // shutdown. For example, you might be doing a slow DNS lookup and if it's
+ // blocked on the OS, you may not want to stop shutdown, since the result
+ // doesn't really matter at that point.
+ //
+ // However, you need to be very careful what you do in your callback when you
+ // use this option. Since the thread will continue to run until the OS
+ // terminates the process, the app can be in the process of tearing down when
+ // you're running. This means any singletons or global objects you use may
+ // suddenly become invalid out from under you. For this reason, it's best to
+ // use this only for slow but simple operations like the DNS example.
+ CONTINUE_ON_SHUTDOWN,
+
+ // Tasks posted with this mode that have not started executing at
+ // shutdown will never run. However, any task that has already begun
+ // executing when shutdown is invoked will be allowed to continue and
+ // will block shutdown until completion.
+ //
+ // Note: Because TaskScheduler::Shutdown() may block while these tasks are
+ // executing, care must be taken to ensure that they do not block on the
+ // thread that called TaskScheduler::Shutdown(), as this may lead to deadlock.
+ SKIP_ON_SHUTDOWN,
+
+ // Tasks posted with this mode before shutdown is complete will block shutdown
+ // until they're executed. Generally, this should be used only to save
+ // critical user data.
+ //
+ // Note: Tasks with BACKGROUND priority that block shutdown will be promoted
+ // to USER_VISIBLE priority during shutdown.
+ BLOCK_SHUTDOWN,
+};
+
+// TaskTraits holds metadata about a task and prevents the combinatorial
+// explosion of PostTaskWith*() call sites.
+// Usage example:
+// PostTaskWithTraits(
+// FROM_HERE, TaskTraits().WithFileIO().WithPriority(USER_VISIBLE),
+// Bind(...));
+struct BASE_EXPORT TaskTraits {
+ // Constructs a default TaskTraits for tasks with
+ // (1) no I/O,
+ // (2) low priority, and
+ // (3) may block shutdown or be skipped on shutdown.
+ // Tasks that require stricter guarantees should highlight those by requesting
+ // explicit traits below.
+ TaskTraits();
+ ~TaskTraits();
+
+ // Allows tasks with these traits to do file I/O.
+ TaskTraits& WithFileIO();
+
+ // Applies a priority to tasks with these traits.
+ TaskTraits& WithPriority(TaskPriority priority);
+
+ // Applies a shutdown behavior to tasks with these traits.
+ TaskTraits& WithShutdownBehavior(TaskShutdownBehavior behavior);
+
+ // Returns true if file I/O is allowed by these traits.
+ bool with_file_io() const { return with_file_io_; }
+
+ // Returns the priority of tasks with these traits.
+ TaskPriority priority() const { return priority_; }
+
+ // Returns the shutdown behavior of tasks with these traits.
+ TaskShutdownBehavior shutdown_behavior() const { return shutdown_behavior_; }
+
+ private:
+ bool with_file_io_;
+ TaskPriority priority_;
+ TaskShutdownBehavior shutdown_behavior_;
+};
+
+enum class ExecutionMode {
fdoray 2016/02/11 17:30:33 Add a comment explaining that this is used to crea
fdoray 2016/02/12 04:16:20 Done.
+ // Can execute multiple tasks at a time. High priority tasks will execute
+ // first under contention.
+ PARALLEL,
+
+ // Executes one task at a time. Tasks are guaranteed to run in posting order.
+ // The sequence’s priority will be that of its pending task with the highest
+ // priority.
+ SEQUENCED,
+
+ // Executes one task at a time on a single thread. Tasks are guaranteed to run
+ // in posting order.
+ SINGLE_THREADED,
+
+#if defined(OS_WIN)
+ // Executes one task at a time on a single thread that has initialized the COM
+ // library with the single-threaded apartment (STA) concurrency model. Tasks
+ // are guaranteed to run in posting order and the assigned thread will also
+ // process COM messages so long as the associated TaskRunner is kept alive.
+ SINGLE_THREADED_COM_STA,
+#endif // defined(OS_WIN)
+};
+
+} // namespace base
+
+#endif // BASE_TASK_SCHEDULER_TASK_TRAITS_H_

Powered by Google App Engine
This is Rietveld 408576698