Index: base/task_scheduler/task_traits.h |
diff --git a/base/task_scheduler/task_traits.h b/base/task_scheduler/task_traits.h |
index 156624120bc0bb50678e2a476d3c1fe439a3ba9d..fbd63c5f05b9eec1f026bfa6a12e3a1717a185b7 100644 |
--- a/base/task_scheduler/task_traits.h |
+++ b/base/task_scheduler/task_traits.h |
@@ -5,37 +5,38 @@ |
#ifndef BASE_TASK_SCHEDULER_TASK_TRAITS_H_ |
#define BASE_TASK_SCHEDULER_TASK_TRAITS_H_ |
+#include <stdint.h> |
+ |
+#include <iosfwd> |
+ |
#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, |
+// Valid priorities supported by the task scheduler. Note: internal algorithms |
+// depend on priorities being expressed as a continuous zero-based list from |
+// lowest to highest priority. Users of this API shouldn't otherwise care about |
+// nor use the underlying values. |
+enum class TaskPriority { |
+ // This will always be equal to the lowest priority available. |
+ LOWEST = 0, |
+ // User won't notice if this task takes an arbitrarily long time to complete. |
+ BACKGROUND = LOWEST, |
// 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, |
+ USER_VISIBLE, |
+ // This task affects UI immediately after a user interaction. |
+ // Example: Generating data shown in the UI immediately after a click. |
+ USER_BLOCKING, |
+ // This will always be equal to the highest priority available. |
+ HIGHEST = USER_BLOCKING, |
}; |
-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 |
@@ -76,6 +77,7 @@ enum class TaskShutdownBehavior { |
// Describes metadata for a single task or a group of tasks. |
class BASE_EXPORT TaskTraits { |
+ public: |
// Constructs a default TaskTraits for tasks with |
// (1) no I/O, |
// (2) low priority, and |
@@ -83,6 +85,8 @@ class BASE_EXPORT TaskTraits { |
// Tasks that require stricter guarantees should highlight those by requesting |
// explicit traits below. |
TaskTraits(); |
+ TaskTraits(const TaskTraits& other) = default; |
+ TaskTraits& operator=(const TaskTraits& other) = default; |
~TaskTraits(); |
// Allows tasks with these traits to do file I/O. |
@@ -122,6 +126,9 @@ enum class ExecutionMode { |
SINGLE_THREADED, |
}; |
+// Pretty Printer for Google Test. |
+void BASE_EXPORT PrintTo(const TaskPriority& task_priority, std::ostream* os); |
+ |
} // namespace base |
#endif // BASE_TASK_SCHEDULER_TASK_TRAITS_H_ |