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 {
static_cast<uint8_t>(
trait_helpers::GetEnum<TaskPriority,
TaskPriority::USER_BLOCKING>(args...)) |
(trait_helpers::HasTrait<TaskPriority>(args...) ? kIsExplicitFlag
: 0)),
(trait_helpers::HasTrait<TaskPriority, ArgTypes...>()
? kIsExplicitFlag
: 0)),
shutdown_behavior_(
static_cast<uint8_t>(
trait_helpers::GetEnum<TaskShutdownBehavior,
TaskShutdownBehavior::SKIP_ON_SHUTDOWN>(
args...)) |
(trait_helpers::HasTrait<TaskShutdownBehavior>(args...)
(trait_helpers::HasTrait<TaskShutdownBehavior, ArgTypes...>()
? kIsExplicitFlag
: 0)),
thread_policy_(
......@@ -246,12 +247,13 @@ class BASE_EXPORT TaskTraits {
trait_helpers::GetEnum<ThreadPolicy,
ThreadPolicy::PREFER_BACKGROUND>(
args...)) |
(trait_helpers::HasTrait<ThreadPolicy>(args...) ? kIsExplicitFlag
: 0)),
may_block_(trait_helpers::HasTrait<MayBlock>(args...)),
(trait_helpers::HasTrait<ThreadPolicy, ArgTypes...>()
? kIsExplicitFlag
: 0)),
may_block_(trait_helpers::HasTrait<MayBlock, ArgTypes...>()),
with_base_sync_primitives_(
trait_helpers::HasTrait<WithBaseSyncPrimitives>(args...)),
use_thread_pool_(trait_helpers::HasTrait<ThreadPool>(args...)) {}
trait_helpers::HasTrait<WithBaseSyncPrimitives, ArgTypes...>()),
use_thread_pool_(trait_helpers::HasTrait<ThreadPool, ArgTypes...>()) {}
constexpr TaskTraits(const TaskTraits& other) = default;
TaskTraits& operator=(const TaskTraits& other) = default;
......
......@@ -34,7 +34,8 @@ class TestTaskTraitsExtension {
: enum_trait_(
trait_helpers::GetEnum<TestExtensionEnumTrait,
TestExtensionEnumTrait::kA>(args...)),
bool_trait_(trait_helpers::HasTrait<TestExtensionBoolTrait>(args...)) {}
bool_trait_(
trait_helpers::HasTrait<TestExtensionBoolTrait, ArgTypes...>()) {}
constexpr TaskTraitsExtensionStorage Serialize() const {
return {kExtensionId, {{static_cast<uint8_t>(enum_trait_), bool_trait_}}};
......
......@@ -174,7 +174,8 @@ class TaskEnvironment {
ThreadPoolExecutionMode::DEFAULT>(args...),
trait_helpers::GetEnum<ThreadingMode, ThreadingMode::DEFAULT>(
args...),
trait_helpers::HasTrait<SubclassCreatesDefaultTaskRunner>(args...),
trait_helpers::HasTrait<SubclassCreatesDefaultTaskRunner,
ArgTypes...>(),
trait_helpers::NotATraitTag()) {}
// Waits until no undelayed ThreadPool tasks remain. Then, unregisters the
......
......@@ -47,7 +47,8 @@
// trait_helpers::AreValidTraits<ValidTraits,
// ArgTypes...>::value>>
// 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...)) {}
namespace base {
......@@ -246,7 +247,7 @@ static constexpr Optional<Enum> GetOptionalEnum(Args... args) {
// Helper to make checking for the presence of a trait more readable.
template <typename Trait, typename... Args>
static constexpr bool HasTrait(Args... args) {
static constexpr bool HasTrait() {
static_assert(
count({std::is_constructible<Trait, Args>::value...}, true) <= 1,
"The traits bag contains multiple traits of the same type.");
......
......@@ -30,7 +30,7 @@ struct TestTraits {
class CheckArgumentsAreValid = std::enable_if_t<
trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr TestTraits(ArgTypes... args)
: has_example_trait(trait_helpers::HasTrait<ExampleTrait>(args...)),
: has_example_trait(trait_helpers::HasTrait<ExampleTrait, ArgTypes...>()),
enum_trait_a(
trait_helpers::GetEnum<EnumTraitA, EnumTraitA::A>(args...)),
enum_trait_b(
......
......@@ -31,7 +31,7 @@ struct TestTraits {
trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr TestTraits(ArgTypes... 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 bool boolean_trait;
......
......@@ -98,7 +98,7 @@ class BrowserWithTestWindowTest : public testing::Test {
args)...),
base::trait_helpers::GetEnum<Browser::Type, Browser::TYPE_NORMAL>(
args...),
base::trait_helpers::HasTrait<HostedApp>(args...)) {}
base::trait_helpers::HasTrait<HostedApp, ArgTypes...>()) {}
~BrowserWithTestWindowTest() override;
......
......@@ -84,7 +84,7 @@ class CONTENT_EXPORT BrowserTaskTraitsExtension {
task_type_(
base::trait_helpers::GetEnum<BrowserTaskType,
BrowserTaskType::kDefault>(args...)),
nestable_(!base::trait_helpers::HasTrait<NonNestable>(args...)) {}
nestable_(!base::trait_helpers::HasTrait<NonNestable, ArgTypes...>()) {}
// Keep in sync with UiThreadTaskTraits.java
constexpr base::TaskTraitsExtensionStorage Serialize() const {
......
......@@ -57,7 +57,7 @@ class WebTaskTraitsExtension {
base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>>
constexpr WebTaskTraitsExtension(ArgTypes... 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 {
static_assert(8 == sizeof(WebTaskTraitsExtension),
......
......@@ -36,11 +36,11 @@ struct PLATFORM_EXPORT SchedulingPolicy {
ArgTypes...>::value>>
constexpr SchedulingPolicy(ArgTypes... args)
: disable_aggressive_throttling(
base::trait_helpers::HasTrait<DisableAggressiveThrottling>(
args...)),
base::trait_helpers::HasTrait<DisableAggressiveThrottling,
ArgTypes...>()),
disable_back_forward_cache(
base::trait_helpers::HasTrait<RecordMetricsForBackForwardCache>(
args...)) {}
base::trait_helpers::HasTrait<RecordMetricsForBackForwardCache,
ArgTypes...>()) {}
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