xref: /aosp_15_r20/external/cronet/base/task/task_features.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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