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

Unified Diff: base/task_scheduler/task_traits.h

Issue 1702813002: Task Scheduler [1/8] Task Traits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update 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
« no previous file with comments | « base/task_scheduler/OWNERS ('k') | base/task_scheduler/task_traits.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..156624120bc0bb50678e2a476d3c1fe439a3ba9d
--- /dev/null
+++ b/base/task_scheduler/task_traits.h
@@ -0,0 +1,127 @@
+// 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;
+
+// Valid priorities supported by the task scheduler.
+// A higher value means a higher priority in the scheduler.
+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 progress on a long task.
+ // - 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,
+};
+
+static_assert(TaskPriority::BACKGROUND < TaskPriority::USER_VISIBLE &&
+ TaskPriority::USER_VISIBLE < TaskPriority::USER_BLOCKING,
+ "Higher priorities must correspond to higher underlying values.");
+
+const TaskPriorityUnderlyingType kNumTaskPriorities = 3;
+
+// Valid shutdown behaviors supported by the task scheduler.
+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,
+};
+
+// Describes metadata for a single task or a group of tasks.
+class 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 |priority| to tasks with these traits.
+ TaskTraits& WithPriority(TaskPriority priority);
+
+ // Applies |shutdown_behavior| to tasks with these traits.
+ TaskTraits& WithShutdownBehavior(TaskShutdownBehavior shutdown_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_;
+};
+
+// Describes how tasks are executed by a task runner.
+enum class ExecutionMode {
+ // Can execute multiple tasks at a time in any order.
+ PARALLEL,
+
+ // Executes one task at a time in posting order. The sequence’s priority is
+ // equivalent to the highest priority pending task in the sequence.
+ SEQUENCED,
+
+ // Executes one task at a time on a single thread in posting order.
+ SINGLE_THREADED,
+};
+
+} // namespace base
+
+#endif // BASE_TASK_SCHEDULER_TASK_TRAITS_H_
« no previous file with comments | « base/task_scheduler/OWNERS ('k') | base/task_scheduler/task_traits.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698