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