xref: /aosp_15_r20/external/cronet/base/allocator/miracle_parameter.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2023 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/allocator/miracle_parameter.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/command_line.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/strings/strcat.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/system/sys_info.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace base {
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker namespace miracle_parameter {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace {
16*6777b538SAndroid Build Coastguard Worker 
GetFieldTrialParamByFeatureAsString(const base::Feature & feature,const std::string & param_name,const std::string & default_value)17*6777b538SAndroid Build Coastguard Worker std::string GetFieldTrialParamByFeatureAsString(
18*6777b538SAndroid Build Coastguard Worker     const base::Feature& feature,
19*6777b538SAndroid Build Coastguard Worker     const std::string& param_name,
20*6777b538SAndroid Build Coastguard Worker     const std::string& default_value) {
21*6777b538SAndroid Build Coastguard Worker   const std::string value =
22*6777b538SAndroid Build Coastguard Worker       base::GetFieldTrialParamValueByFeature(feature, param_name);
23*6777b538SAndroid Build Coastguard Worker   return value.empty() ? default_value : value;
24*6777b538SAndroid Build Coastguard Worker }
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker }  // namespace
27*6777b538SAndroid Build Coastguard Worker 
GetParamNameWithSuffix(const std::string & param_name)28*6777b538SAndroid Build Coastguard Worker std::string GetParamNameWithSuffix(const std::string& param_name) {
29*6777b538SAndroid Build Coastguard Worker   // `base::SysInfo::AmountOfPhysicalMemoryMB()` refers to CommandLine
30*6777b538SAndroid Build Coastguard Worker   // internally. If the CommandLine is not initialized, we return early to avoid
31*6777b538SAndroid Build Coastguard Worker   // a crash.
32*6777b538SAndroid Build Coastguard Worker   if (!base::CommandLine::InitializedForCurrentProcess()) {
33*6777b538SAndroid Build Coastguard Worker     return param_name;
34*6777b538SAndroid Build Coastguard Worker   }
35*6777b538SAndroid Build Coastguard Worker   int physical_memory_mb = base::SysInfo::AmountOfPhysicalMemoryMB();
36*6777b538SAndroid Build Coastguard Worker   const char* suffix =
37*6777b538SAndroid Build Coastguard Worker       physical_memory_mb < kMiracleParameterMemory512MB  ? "ForLessThan512MB"
38*6777b538SAndroid Build Coastguard Worker       : physical_memory_mb < kMiracleParameterMemory1GB  ? "For512MBTo1GB"
39*6777b538SAndroid Build Coastguard Worker       : physical_memory_mb < kMiracleParameterMemory2GB  ? "For1GBTo2GB"
40*6777b538SAndroid Build Coastguard Worker       : physical_memory_mb < kMiracleParameterMemory4GB  ? "For2GBTo4GB"
41*6777b538SAndroid Build Coastguard Worker       : physical_memory_mb < kMiracleParameterMemory8GB  ? "For4GBTo8GB"
42*6777b538SAndroid Build Coastguard Worker       : physical_memory_mb < kMiracleParameterMemory16GB ? "For8GBTo16GB"
43*6777b538SAndroid Build Coastguard Worker                                                          : "For16GBAndAbove";
44*6777b538SAndroid Build Coastguard Worker   return base::StrCat({param_name, suffix});
45*6777b538SAndroid Build Coastguard Worker }
46*6777b538SAndroid Build Coastguard Worker 
GetMiracleParameterAsString(const base::Feature & feature,const std::string & param_name,const std::string & default_value)47*6777b538SAndroid Build Coastguard Worker std::string GetMiracleParameterAsString(const base::Feature& feature,
48*6777b538SAndroid Build Coastguard Worker                                         const std::string& param_name,
49*6777b538SAndroid Build Coastguard Worker                                         const std::string& default_value) {
50*6777b538SAndroid Build Coastguard Worker   return GetFieldTrialParamByFeatureAsString(
51*6777b538SAndroid Build Coastguard Worker       feature, GetParamNameWithSuffix(param_name),
52*6777b538SAndroid Build Coastguard Worker       GetFieldTrialParamByFeatureAsString(feature, param_name, default_value));
53*6777b538SAndroid Build Coastguard Worker }
54*6777b538SAndroid Build Coastguard Worker 
GetMiracleParameterAsDouble(const base::Feature & feature,const std::string & param_name,double default_value)55*6777b538SAndroid Build Coastguard Worker double GetMiracleParameterAsDouble(const base::Feature& feature,
56*6777b538SAndroid Build Coastguard Worker                                    const std::string& param_name,
57*6777b538SAndroid Build Coastguard Worker                                    double default_value) {
58*6777b538SAndroid Build Coastguard Worker   return base::GetFieldTrialParamByFeatureAsDouble(
59*6777b538SAndroid Build Coastguard Worker       feature, GetParamNameWithSuffix(param_name),
60*6777b538SAndroid Build Coastguard Worker       base::GetFieldTrialParamByFeatureAsDouble(feature, param_name,
61*6777b538SAndroid Build Coastguard Worker                                                 default_value));
62*6777b538SAndroid Build Coastguard Worker }
63*6777b538SAndroid Build Coastguard Worker 
GetMiracleParameterAsInt(const base::Feature & feature,const std::string & param_name,int default_value)64*6777b538SAndroid Build Coastguard Worker int GetMiracleParameterAsInt(const base::Feature& feature,
65*6777b538SAndroid Build Coastguard Worker                              const std::string& param_name,
66*6777b538SAndroid Build Coastguard Worker                              int default_value) {
67*6777b538SAndroid Build Coastguard Worker   return base::GetFieldTrialParamByFeatureAsInt(
68*6777b538SAndroid Build Coastguard Worker       feature, GetParamNameWithSuffix(param_name),
69*6777b538SAndroid Build Coastguard Worker       base::GetFieldTrialParamByFeatureAsInt(feature, param_name,
70*6777b538SAndroid Build Coastguard Worker                                              default_value));
71*6777b538SAndroid Build Coastguard Worker }
72*6777b538SAndroid Build Coastguard Worker 
GetMiracleParameterAsBool(const base::Feature & feature,const std::string & param_name,bool default_value)73*6777b538SAndroid Build Coastguard Worker bool GetMiracleParameterAsBool(const base::Feature& feature,
74*6777b538SAndroid Build Coastguard Worker                                const std::string& param_name,
75*6777b538SAndroid Build Coastguard Worker                                bool default_value) {
76*6777b538SAndroid Build Coastguard Worker   return base::GetFieldTrialParamByFeatureAsBool(
77*6777b538SAndroid Build Coastguard Worker       feature, GetParamNameWithSuffix(param_name),
78*6777b538SAndroid Build Coastguard Worker       base::GetFieldTrialParamByFeatureAsBool(feature, param_name,
79*6777b538SAndroid Build Coastguard Worker                                               default_value));
80*6777b538SAndroid Build Coastguard Worker }
81*6777b538SAndroid Build Coastguard Worker 
GetMiracleParameterAsTimeDelta(const base::Feature & feature,const std::string & param_name,base::TimeDelta default_value)82*6777b538SAndroid Build Coastguard Worker base::TimeDelta GetMiracleParameterAsTimeDelta(const base::Feature& feature,
83*6777b538SAndroid Build Coastguard Worker                                                const std::string& param_name,
84*6777b538SAndroid Build Coastguard Worker                                                base::TimeDelta default_value) {
85*6777b538SAndroid Build Coastguard Worker   return base::GetFieldTrialParamByFeatureAsTimeDelta(
86*6777b538SAndroid Build Coastguard Worker       feature, GetParamNameWithSuffix(param_name),
87*6777b538SAndroid Build Coastguard Worker       base::GetFieldTrialParamByFeatureAsTimeDelta(feature, param_name,
88*6777b538SAndroid Build Coastguard Worker                                                    default_value));
89*6777b538SAndroid Build Coastguard Worker }
90*6777b538SAndroid Build Coastguard Worker 
91*6777b538SAndroid Build Coastguard Worker }  // namespace miracle_parameter
92*6777b538SAndroid Build Coastguard Worker 
93*6777b538SAndroid Build Coastguard Worker }  // namespace base
94