| Index: base/task_scheduler/task_traits.h
|
| diff --git a/base/task_scheduler/task_traits.h b/base/task_scheduler/task_traits.h
|
| index cd1d7ccf3c674a56ff6fc80a94b1d621f2b94ad5..a403a961d47c7d91c268c4774f669281776d72af 100644
|
| --- a/base/task_scheduler/task_traits.h
|
| +++ b/base/task_scheduler/task_traits.h
|
| @@ -157,6 +157,9 @@ class BASE_EXPORT TaskTraits {
|
| internal::EnumArgGetter<base::TaskPriority,
|
| base::TaskPriority::USER_VISIBLE>(),
|
| args...)),
|
| + shutdown_behavior_set_explicitly_(
|
| + internal::HasArgOfType<base::TaskShutdownBehavior,
|
| + ArgTypes...>::value),
|
| shutdown_behavior_(internal::GetValueFromArgList(
|
| internal::EnumArgGetter<
|
| base::TaskShutdownBehavior,
|
| @@ -172,6 +175,14 @@ class BASE_EXPORT TaskTraits {
|
| constexpr TaskTraits(const TaskTraits& other) = default;
|
| TaskTraits& operator=(const TaskTraits& other) = default;
|
|
|
| + // Returns TaskTraits constructed by combining |left| and |right|. If a trait
|
| + // is specified in both |left| and |right|, the returned TaskTraits will have
|
| + // the value from |right|.
|
| + static constexpr TaskTraits Override(const TaskTraits& left,
|
| + const TaskTraits& right) {
|
| + return TaskTraits(left, right);
|
| + }
|
| +
|
| // Deprecated. Prefer constexpr construction to builder paradigm as
|
| // documented above.
|
| // TODO(fdoray): Remove these methods. https://crbug.com/713683
|
| @@ -188,6 +199,11 @@ class BASE_EXPORT TaskTraits {
|
| // Returns the priority of tasks with these traits.
|
| constexpr TaskPriority priority() const { return priority_; }
|
|
|
| + // Returns true if the shutdown behavior was set explicitly.
|
| + constexpr bool shutdown_behavior_set_explicitly() const {
|
| + return shutdown_behavior_set_explicitly_;
|
| + }
|
| +
|
| // Returns the shutdown behavior of tasks with these traits.
|
| constexpr TaskShutdownBehavior shutdown_behavior() const {
|
| return shutdown_behavior_;
|
| @@ -202,10 +218,26 @@ class BASE_EXPORT TaskTraits {
|
| }
|
|
|
| private:
|
| + constexpr TaskTraits(const TaskTraits& left, const TaskTraits& right)
|
| + : priority_set_explicitly_(left.priority_set_explicitly_ ||
|
| + right.priority_set_explicitly_),
|
| + priority_(right.priority_set_explicitly_ ? right.priority_
|
| + : left.priority_),
|
| + shutdown_behavior_set_explicitly_(
|
| + left.shutdown_behavior_set_explicitly_ ||
|
| + right.shutdown_behavior_set_explicitly_),
|
| + shutdown_behavior_(right.shutdown_behavior_set_explicitly_
|
| + ? right.shutdown_behavior_
|
| + : left.shutdown_behavior_),
|
| + may_block_(left.may_block_ || right.may_block_),
|
| + with_base_sync_primitives_(left.with_base_sync_primitives_ ||
|
| + right.with_base_sync_primitives_) {}
|
| +
|
| // TODO(fdoray): Make these const after refactoring away deprecated builder
|
| // pattern.
|
| bool priority_set_explicitly_;
|
| TaskPriority priority_;
|
| + bool shutdown_behavior_set_explicitly_;
|
| TaskShutdownBehavior shutdown_behavior_;
|
| bool may_block_;
|
| bool with_base_sync_primitives_;
|
|
|