Commit f929cf04 authored by Gabriel Charette's avatar Gabriel Charette Committed by Commit Bot

Partial Reland [base] Make HasTrait() use types instead of args

Partial reland of https://chromium-review.googlesource.com/c/chromium/src/+/1635827

Extracted HasTraits() modification to make revertable part of the
desired change as small as possible.

TBR=fdoray@chromium.org

Bug: 968047
Change-Id: I9683326cceee53164e4482d71cf6929296a8db7a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1762332
Commit-Queue: Gabriel Charette <gab@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688682}
parent cf6f34a7
...@@ -231,14 +231,15 @@ class BASE_EXPORT TaskTraits { ...@@ -231,14 +231,15 @@ class BASE_EXPORT TaskTraits {
static_cast<uint8_t>( static_cast<uint8_t>(
trait_helpers::GetEnum<TaskPriority, trait_helpers::GetEnum<TaskPriority,
TaskPriority::USER_BLOCKING>(args...)) | TaskPriority::USER_BLOCKING>(args...)) |
(trait_helpers::HasTrait<TaskPriority>(args...) ? kIsExplicitFlag (trait_helpers::HasTrait<TaskPriority, ArgTypes...>()
: 0)), ? kIsExplicitFlag
: 0)),
shutdown_behavior_( shutdown_behavior_(
static_cast<uint8_t>( static_cast<uint8_t>(
trait_helpers::GetEnum<TaskShutdownBehavior, trait_helpers::GetEnum<TaskShutdownBehavior,
TaskShutdownBehavior::SKIP_ON_SHUTDOWN>( TaskShutdownBehavior::SKIP_ON_SHUTDOWN>(
args...)) | args...)) |
(trait_helpers::HasTrait<TaskShutdownBehavior>(args...) (trait_helpers::HasTrait<TaskShutdownBehavior, ArgTypes...>()
? kIsExplicitFlag ? kIsExplicitFlag
: 0)), : 0)),
thread_policy_( thread_policy_(
...@@ -246,12 +247,13 @@ class BASE_EXPORT TaskTraits { ...@@ -246,12 +247,13 @@ class BASE_EXPORT TaskTraits {
trait_helpers::GetEnum<ThreadPolicy, trait_helpers::GetEnum<ThreadPolicy,
ThreadPolicy::PREFER_BACKGROUND>( ThreadPolicy::PREFER_BACKGROUND>(
args...)) | args...)) |
(trait_helpers::HasTrait<ThreadPolicy>(args...) ? kIsExplicitFlag (trait_helpers::HasTrait<ThreadPolicy, ArgTypes...>()
: 0)), ? kIsExplicitFlag
may_block_(trait_helpers::HasTrait<MayBlock>(args...)), : 0)),
may_block_(trait_helpers::HasTrait<MayBlock, ArgTypes...>()),
with_base_sync_primitives_( with_base_sync_primitives_(
trait_helpers::HasTrait<WithBaseSyncPrimitives>(args...)), trait_helpers::HasTrait<WithBaseSyncPrimitives, ArgTypes...>()),
use_thread_pool_(trait_helpers::HasTrait<ThreadPool>(args...)) {} use_thread_pool_(trait_helpers::HasTrait<ThreadPool, ArgTypes...>()) {}
constexpr TaskTraits(const TaskTraits& other) = default; constexpr TaskTraits(const TaskTraits& other) = default;
TaskTraits& operator=(const TaskTraits& other) = default; TaskTraits& operator=(const TaskTraits& other) = default;
......
...@@ -34,7 +34,8 @@ class TestTaskTraitsExtension { ...@@ -34,7 +34,8 @@ class TestTaskTraitsExtension {
: enum_trait_( : enum_trait_(
trait_helpers::GetEnum<TestExtensionEnumTrait, trait_helpers::GetEnum<TestExtensionEnumTrait,
TestExtensionEnumTrait::kA>(args...)), TestExtensionEnumTrait::kA>(args...)),
bool_trait_(trait_helpers::HasTrait<TestExtensionBoolTrait>(args...)) {} bool_trait_(
trait_helpers::HasTrait<TestExtensionBoolTrait, ArgTypes...>()) {}
constexpr TaskTraitsExtensionStorage Serialize() const { constexpr TaskTraitsExtensionStorage Serialize() const {
return {kExtensionId, {{static_cast<uint8_t>(enum_trait_), bool_trait_}}}; return {kExtensionId, {{static_cast<uint8_t>(enum_trait_), bool_trait_}}};
......
...@@ -174,7 +174,8 @@ class TaskEnvironment { ...@@ -174,7 +174,8 @@ class TaskEnvironment {
ThreadPoolExecutionMode::DEFAULT>(args...), ThreadPoolExecutionMode::DEFAULT>(args...),
trait_helpers::GetEnum<ThreadingMode, ThreadingMode::DEFAULT>( trait_helpers::GetEnum<ThreadingMode, ThreadingMode::DEFAULT>(
args...), args...),
trait_helpers::HasTrait<SubclassCreatesDefaultTaskRunner>(args...), trait_helpers::HasTrait<SubclassCreatesDefaultTaskRunner,
ArgTypes...>(),
trait_helpers::NotATraitTag()) {} trait_helpers::NotATraitTag()) {}
// Waits until no undelayed ThreadPool tasks remain. Then, unregisters the // Waits until no undelayed ThreadPool tasks remain. Then, unregisters the
......
...@@ -47,7 +47,8 @@ ...@@ -47,7 +47,8 @@
// trait_helpers::AreValidTraits<ValidTraits, // trait_helpers::AreValidTraits<ValidTraits,
// ArgTypes...>::value>> // ArgTypes...>::value>>
// constexpr void DoSomethingAwesome(ArgTypes... args) // constexpr void DoSomethingAwesome(ArgTypes... args)
// : enable_feature_x(trait_helpers::HasTrait<EnableFeatureX>(args...)), // : enable_feature_x(
// trait_helpers::HasTrait<EnableFeatureX, ArgTypes...>()),
// color(trait_helpers::GetEnum<Color, EnumTraitA::BLUE>(args...)) {} // color(trait_helpers::GetEnum<Color, EnumTraitA::BLUE>(args...)) {}
namespace base { namespace base {
...@@ -246,7 +247,7 @@ static constexpr Optional<Enum> GetOptionalEnum(Args... args) { ...@@ -246,7 +247,7 @@ static constexpr Optional<Enum> GetOptionalEnum(Args... args) {
// Helper to make checking for the presence of a trait more readable. // Helper to make checking for the presence of a trait more readable.
template <typename Trait, typename... Args> template <typename Trait, typename... Args>
static constexpr bool HasTrait(Args... args) { static constexpr bool HasTrait() {
static_assert( static_assert(
count({std::is_constructible<Trait, Args>::value...}, true) <= 1, count({std::is_constructible<Trait, Args>::value...}, true) <= 1,
"The traits bag contains multiple traits of the same type."); "The traits bag contains multiple traits of the same type.");
......
...@@ -30,7 +30,7 @@ struct TestTraits { ...@@ -30,7 +30,7 @@ struct TestTraits {
class CheckArgumentsAreValid = std::enable_if_t< class CheckArgumentsAreValid = std::enable_if_t<
trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr TestTraits(ArgTypes... args) constexpr TestTraits(ArgTypes... args)
: has_example_trait(trait_helpers::HasTrait<ExampleTrait>(args...)), : has_example_trait(trait_helpers::HasTrait<ExampleTrait, ArgTypes...>()),
enum_trait_a( enum_trait_a(
trait_helpers::GetEnum<EnumTraitA, EnumTraitA::A>(args...)), trait_helpers::GetEnum<EnumTraitA, EnumTraitA::A>(args...)),
enum_trait_b( enum_trait_b(
......
...@@ -31,7 +31,7 @@ struct TestTraits { ...@@ -31,7 +31,7 @@ struct TestTraits {
trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr TestTraits(ArgTypes... args) constexpr TestTraits(ArgTypes... args)
: required_trait(trait_helpers::GetEnum<RequiredTrait>(args...)), : required_trait(trait_helpers::GetEnum<RequiredTrait>(args...)),
boolean_trait(trait_helpers::HasTrait<BooleanTrait>(args...)) {} boolean_trait(trait_helpers::HasTrait<BooleanTrait, ArgTypes...>()) {}
const RequiredTrait required_trait; const RequiredTrait required_trait;
const bool boolean_trait; const bool boolean_trait;
......
...@@ -98,7 +98,7 @@ class BrowserWithTestWindowTest : public testing::Test { ...@@ -98,7 +98,7 @@ class BrowserWithTestWindowTest : public testing::Test {
args)...), args)...),
base::trait_helpers::GetEnum<Browser::Type, Browser::TYPE_NORMAL>( base::trait_helpers::GetEnum<Browser::Type, Browser::TYPE_NORMAL>(
args...), args...),
base::trait_helpers::HasTrait<HostedApp>(args...)) {} base::trait_helpers::HasTrait<HostedApp, ArgTypes...>()) {}
~BrowserWithTestWindowTest() override; ~BrowserWithTestWindowTest() override;
......
...@@ -84,7 +84,7 @@ class CONTENT_EXPORT BrowserTaskTraitsExtension { ...@@ -84,7 +84,7 @@ class CONTENT_EXPORT BrowserTaskTraitsExtension {
task_type_( task_type_(
base::trait_helpers::GetEnum<BrowserTaskType, base::trait_helpers::GetEnum<BrowserTaskType,
BrowserTaskType::kDefault>(args...)), BrowserTaskType::kDefault>(args...)),
nestable_(!base::trait_helpers::HasTrait<NonNestable>(args...)) {} nestable_(!base::trait_helpers::HasTrait<NonNestable, ArgTypes...>()) {}
// Keep in sync with UiThreadTaskTraits.java // Keep in sync with UiThreadTaskTraits.java
constexpr base::TaskTraitsExtensionStorage Serialize() const { constexpr base::TaskTraitsExtensionStorage Serialize() const {
......
...@@ -57,7 +57,7 @@ class WebTaskTraitsExtension { ...@@ -57,7 +57,7 @@ class WebTaskTraitsExtension {
base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr WebTaskTraitsExtension(ArgTypes... args) constexpr WebTaskTraitsExtension(ArgTypes... args)
: web_thread_(base::trait_helpers::GetEnum<WebThread::ID>(args...)), : web_thread_(base::trait_helpers::GetEnum<WebThread::ID>(args...)),
nestable_(!base::trait_helpers::HasTrait<NonNestable>(args...)) {} nestable_(!base::trait_helpers::HasTrait<NonNestable, ArgTypes...>()) {}
constexpr base::TaskTraitsExtensionStorage Serialize() const { constexpr base::TaskTraitsExtensionStorage Serialize() const {
static_assert(8 == sizeof(WebTaskTraitsExtension), static_assert(8 == sizeof(WebTaskTraitsExtension),
......
...@@ -36,11 +36,11 @@ struct PLATFORM_EXPORT SchedulingPolicy { ...@@ -36,11 +36,11 @@ struct PLATFORM_EXPORT SchedulingPolicy {
ArgTypes...>::value>> ArgTypes...>::value>>
constexpr SchedulingPolicy(ArgTypes... args) constexpr SchedulingPolicy(ArgTypes... args)
: disable_aggressive_throttling( : disable_aggressive_throttling(
base::trait_helpers::HasTrait<DisableAggressiveThrottling>( base::trait_helpers::HasTrait<DisableAggressiveThrottling,
args...)), ArgTypes...>()),
disable_back_forward_cache( disable_back_forward_cache(
base::trait_helpers::HasTrait<RecordMetricsForBackForwardCache>( base::trait_helpers::HasTrait<RecordMetricsForBackForwardCache,
args...)) {} ArgTypes...>()) {}
SchedulingPolicy() {} SchedulingPolicy() {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment