xref: /aosp_15_r20/external/cronet/base/features.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 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/features.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/cpu_reduction_experiment.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/task/sequence_manager/sequence_manager_impl.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread.h"
10*6777b538SAndroid Build Coastguard Worker #include "build/buildflag.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
13*6777b538SAndroid Build Coastguard Worker #include "base/message_loop/message_pump_libevent.h"
14*6777b538SAndroid Build Coastguard Worker #endif
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_APPLE)
17*6777b538SAndroid Build Coastguard Worker #include "base/files/file.h"
18*6777b538SAndroid Build Coastguard Worker #include "base/message_loop/message_pump_apple.h"
19*6777b538SAndroid Build Coastguard Worker #include "base/message_loop/message_pump_kqueue.h"
20*6777b538SAndroid Build Coastguard Worker #include "base/synchronization/condition_variable.h"
21*6777b538SAndroid Build Coastguard Worker #endif
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_ANDROID)
24*6777b538SAndroid Build Coastguard Worker #include "base/android/input_hint_checker.h"
25*6777b538SAndroid Build Coastguard Worker #endif
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
28*6777b538SAndroid Build Coastguard Worker #include "base/task/sequence_manager/thread_controller_power_monitor.h"
29*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread_win.h"
30*6777b538SAndroid Build Coastguard Worker #endif
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker namespace base::features {
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker // Alphabetical:
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker // Enforce that writeable file handles passed to untrusted processes are not
37*6777b538SAndroid Build Coastguard Worker // backed by executable files.
38*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kEnforceNoExecutableFileHandles,
39*6777b538SAndroid Build Coastguard Worker              "EnforceNoExecutableFileHandles",
40*6777b538SAndroid Build Coastguard Worker              FEATURE_ENABLED_BY_DEFAULT);
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/851128): Roll out this to 100% before replacing existing
43*6777b538SAndroid Build Coastguard Worker // NOTREACHED()s with NOTREACHED_NORETURN() as part of NOTREACHED() migration.
44*6777b538SAndroid Build Coastguard Worker // Note that a prerequisite for rolling out this experiment is that existing
45*6777b538SAndroid Build Coastguard Worker // NOTREACHED reports are at a very low rate. Once this rolls out we should
46*6777b538SAndroid Build Coastguard Worker // monitor that crash rates for the experiment population is within a 1-5% or
47*6777b538SAndroid Build Coastguard Worker // lower than the control group.
48*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kNotReachedIsFatal,
49*6777b538SAndroid Build Coastguard Worker              "NotReachedIsFatal",
50*6777b538SAndroid Build Coastguard Worker              FEATURE_DISABLED_BY_DEFAULT);
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker // Optimizes parsing and loading of data: URLs.
53*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kOptimizeDataUrls, "OptimizeDataUrls", FEATURE_ENABLED_BY_DEFAULT);
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kUseRustJsonParser,
56*6777b538SAndroid Build Coastguard Worker              "UseRustJsonParser",
57*6777b538SAndroid Build Coastguard Worker              FEATURE_DISABLED_BY_DEFAULT);
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kJsonNegativeZero, "JsonNegativeZero", FEATURE_ENABLED_BY_DEFAULT);
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
62*6777b538SAndroid Build Coastguard Worker // Force to enable LowEndDeviceMode partially on Android 3Gb devices.
63*6777b538SAndroid Build Coastguard Worker // (see PartialLowEndModeOnMidRangeDevices below)
64*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kPartialLowEndModeOn3GbDevices,
65*6777b538SAndroid Build Coastguard Worker              "PartialLowEndModeOn3GbDevices",
66*6777b538SAndroid Build Coastguard Worker              FEATURE_DISABLED_BY_DEFAULT);
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker // Used to enable LowEndDeviceMode partially on Android and ChromeOS mid-range
69*6777b538SAndroid Build Coastguard Worker // devices. Such devices aren't considered low-end, but we'd like experiment
70*6777b538SAndroid Build Coastguard Worker // with a subset of low-end features to see if we get a good memory vs.
71*6777b538SAndroid Build Coastguard Worker // performance tradeoff.
72*6777b538SAndroid Build Coastguard Worker //
73*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/1434873): |#if| out 32-bit before launching or going to
74*6777b538SAndroid Build Coastguard Worker // high Stable %, because we will enable the feature only for <8GB 64-bit
75*6777b538SAndroid Build Coastguard Worker // devices, where we didn't ship yet. However, we first need a larger
76*6777b538SAndroid Build Coastguard Worker // population to collect data.
77*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kPartialLowEndModeOnMidRangeDevices,
78*6777b538SAndroid Build Coastguard Worker              "PartialLowEndModeOnMidRangeDevices",
79*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_ANDROID)
80*6777b538SAndroid Build Coastguard Worker              FEATURE_ENABLED_BY_DEFAULT);
81*6777b538SAndroid Build Coastguard Worker #elif BUILDFLAG(IS_CHROMEOS)
82*6777b538SAndroid Build Coastguard Worker              FEATURE_DISABLED_BY_DEFAULT);
83*6777b538SAndroid Build Coastguard Worker #endif
84*6777b538SAndroid Build Coastguard Worker 
85*6777b538SAndroid Build Coastguard Worker #endif  // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
86*6777b538SAndroid Build Coastguard Worker 
87*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_ANDROID)
88*6777b538SAndroid Build Coastguard Worker // Whether to report frame metrics to the Android.FrameTimeline.* histograms.
89*6777b538SAndroid Build Coastguard Worker BASE_FEATURE(kCollectAndroidFrameTimelineMetrics,
90*6777b538SAndroid Build Coastguard Worker              "CollectAndroidFrameTimelineMetrics",
91*6777b538SAndroid Build Coastguard Worker              FEATURE_DISABLED_BY_DEFAULT);
92*6777b538SAndroid Build Coastguard Worker #endif  // BUILDFLAG(IS_ANDROID)
93*6777b538SAndroid Build Coastguard Worker 
Init(EmitThreadControllerProfilerMetadata emit_thread_controller_profiler_metadata)94*6777b538SAndroid Build Coastguard Worker void Init(EmitThreadControllerProfilerMetadata
95*6777b538SAndroid Build Coastguard Worker               emit_thread_controller_profiler_metadata) {
96*6777b538SAndroid Build Coastguard Worker   InitializeCpuReductionExperiment();
97*6777b538SAndroid Build Coastguard Worker   sequence_manager::internal::SequenceManagerImpl::InitializeFeatures();
98*6777b538SAndroid Build Coastguard Worker   sequence_manager::internal::ThreadController::InitializeFeatures(
99*6777b538SAndroid Build Coastguard Worker       emit_thread_controller_profiler_metadata);
100*6777b538SAndroid Build Coastguard Worker 
101*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
102*6777b538SAndroid Build Coastguard Worker   MessagePumpLibevent::InitializeFeatures();
103*6777b538SAndroid Build Coastguard Worker #endif
104*6777b538SAndroid Build Coastguard Worker 
105*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS)
106*6777b538SAndroid Build Coastguard Worker   PlatformThread::InitializeFeatures();
107*6777b538SAndroid Build Coastguard Worker #endif
108*6777b538SAndroid Build Coastguard Worker 
109*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_APPLE)
110*6777b538SAndroid Build Coastguard Worker   ConditionVariable::InitializeFeatures();
111*6777b538SAndroid Build Coastguard Worker   File::InitializeFeatures();
112*6777b538SAndroid Build Coastguard Worker   MessagePumpCFRunLoopBase::InitializeFeatures();
113*6777b538SAndroid Build Coastguard Worker   MessagePumpKqueue::InitializeFeatures();
114*6777b538SAndroid Build Coastguard Worker #endif
115*6777b538SAndroid Build Coastguard Worker 
116*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_ANDROID)
117*6777b538SAndroid Build Coastguard Worker   android::InputHintChecker::InitializeFeatures();
118*6777b538SAndroid Build Coastguard Worker #endif
119*6777b538SAndroid Build Coastguard Worker 
120*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
121*6777b538SAndroid Build Coastguard Worker   sequence_manager::internal::ThreadControllerPowerMonitor::
122*6777b538SAndroid Build Coastguard Worker       InitializeFeatures();
123*6777b538SAndroid Build Coastguard Worker   InitializePlatformThreadFeatures();
124*6777b538SAndroid Build Coastguard Worker #endif
125*6777b538SAndroid Build Coastguard Worker }
126*6777b538SAndroid Build Coastguard Worker 
127*6777b538SAndroid Build Coastguard Worker }  // namespace base::features
128