1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/task/task_features.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <atomic> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/feature_list.h" 11*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace base { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // Note to implementers: thread pool code using task features must absolutely 16*6777b538SAndroid Build Coastguard Worker // not invoke FeatureList::IsEnabled outside of the main thread. Doing so 17*6777b538SAndroid Build Coastguard Worker // causes data races between worker threads and ~FeatureList when tests end 18*6777b538SAndroid Build Coastguard Worker // (crbug.com/1344573). A reliable moment to query and cache the feature state 19*6777b538SAndroid Build Coastguard Worker // is on ThreadPoolImpl::Start (and thus also on the first WorkerThread::Start, 20*6777b538SAndroid Build Coastguard Worker // not the later ones) as this is invoked from the main thread after 21*6777b538SAndroid Build Coastguard Worker // initializing the FeatureList. If caching the feature state in a static, you 22*6777b538SAndroid Build Coastguard Worker // must be aware that all tests sharing a process will have the same state, 23*6777b538SAndroid Build Coastguard Worker // regardless of future ScopedFeatureList instances. 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kUseUtilityThreadGroup, 26*6777b538SAndroid Build Coastguard Worker "UseUtilityThreadGroup", 27*6777b538SAndroid Build Coastguard Worker base::FEATURE_DISABLED_BY_DEFAULT); 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kNoWorkerThreadReclaim, 30*6777b538SAndroid Build Coastguard Worker "NoWorkerThreadReclaim", 31*6777b538SAndroid Build Coastguard Worker base::FEATURE_ENABLED_BY_DEFAULT); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kDelayFirstWorkerWake, 34*6777b538SAndroid Build Coastguard Worker "DelayFirstWorkerWake", 35*6777b538SAndroid Build Coastguard Worker base::FEATURE_ENABLED_BY_DEFAULT); 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kAddTaskLeewayFeature, 38*6777b538SAndroid Build Coastguard Worker "AddTaskLeeway", 39*6777b538SAndroid Build Coastguard Worker base::FEATURE_ENABLED_BY_DEFAULT); 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<TimeDelta> kTaskLeewayParam{&kAddTaskLeewayFeature, 42*6777b538SAndroid Build Coastguard Worker "leeway", kDefaultLeeway}; 43*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<TimeDelta> kMaxPreciseDelay{ 44*6777b538SAndroid Build Coastguard Worker &kAddTaskLeewayFeature, "max_precise_delay", kDefaultMaxPreciseDelay}; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kAlignWakeUps, "AlignWakeUps", base::FEATURE_DISABLED_BY_DEFAULT); 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kTimerSlackMac, 49*6777b538SAndroid Build Coastguard Worker "TimerSlackMac", 50*6777b538SAndroid Build Coastguard Worker base::FEATURE_DISABLED_BY_DEFAULT); 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kExplicitHighResolutionTimerWin, 53*6777b538SAndroid Build Coastguard Worker "ExplicitHighResolutionTimerWin", 54*6777b538SAndroid Build Coastguard Worker base::FEATURE_ENABLED_BY_DEFAULT); 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kUIPumpImprovementsWin, 57*6777b538SAndroid Build Coastguard Worker "UIPumpImprovementsWin", 58*6777b538SAndroid Build Coastguard Worker base::FEATURE_DISABLED_BY_DEFAULT); 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kRunTasksByBatches, 61*6777b538SAndroid Build Coastguard Worker "RunTasksByBatches", 62*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS) 63*6777b538SAndroid Build Coastguard Worker base::FEATURE_ENABLED_BY_DEFAULT); 64*6777b538SAndroid Build Coastguard Worker #else 65*6777b538SAndroid Build Coastguard Worker base::FEATURE_DISABLED_BY_DEFAULT); 66*6777b538SAndroid Build Coastguard Worker #endif 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kThreadPoolCap2, 69*6777b538SAndroid Build Coastguard Worker "ThreadPoolCap2", 70*6777b538SAndroid Build Coastguard Worker base::FEATURE_DISABLED_BY_DEFAULT); 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<int> kThreadPoolCapRestrictedCount{ 73*6777b538SAndroid Build Coastguard Worker &kThreadPoolCap2, "restricted_count", 3}; 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kMaxDelayedStarvationTasks, 76*6777b538SAndroid Build Coastguard Worker "MaxDelayedStarvationTasks", 77*6777b538SAndroid Build Coastguard Worker base::FEATURE_ENABLED_BY_DEFAULT); 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<int> kMaxDelayedStarvationTasksParam{ 80*6777b538SAndroid Build Coastguard Worker &kMaxDelayedStarvationTasks, "count", 3}; 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kThreadGroupSemaphore, 83*6777b538SAndroid Build Coastguard Worker "ThreadGroupSemaphore", 84*6777b538SAndroid Build Coastguard Worker base::FEATURE_DISABLED_BY_DEFAULT); 85*6777b538SAndroid Build Coastguard Worker const base::FeatureParam<int> kMaxNumWorkersCreated{ 86*6777b538SAndroid Build Coastguard Worker &kThreadGroupSemaphore, "max_num_workers_created", 2}; 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker } // namespace base 89