xref: /aosp_15_r20/external/cronet/testing/perf/perf_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2013 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 "testing/perf/perf_test.h"
6 
7 #include <stdio.h>
8 
9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/stringprintf.h"
11 
12 namespace {
13 
ResultsToString(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & values,const std::string & prefix,const std::string & suffix,const std::string & units,bool important)14 std::string ResultsToString(const std::string& measurement,
15                             const std::string& modifier,
16                             const std::string& trace,
17                             const std::string& values,
18                             const std::string& prefix,
19                             const std::string& suffix,
20                             const std::string& units,
21                             bool important) {
22   // <*>RESULT <graph_name>: <trace_name>= <value> <units>
23   // <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units>
24   // <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units>
25   return base::StringPrintf("%sRESULT %s%s: %s= %s%s%s %s\n",
26          important ? "*" : "", measurement.c_str(), modifier.c_str(),
27          trace.c_str(), prefix.c_str(), values.c_str(), suffix.c_str(),
28          units.c_str());
29 }
30 
PrintResultsImpl(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & values,const std::string & prefix,const std::string & suffix,const std::string & units,bool important)31 void PrintResultsImpl(const std::string& measurement,
32                       const std::string& modifier,
33                       const std::string& trace,
34                       const std::string& values,
35                       const std::string& prefix,
36                       const std::string& suffix,
37                       const std::string& units,
38                       bool important) {
39   fflush(stdout);
40   printf("%s", ResultsToString(measurement, modifier, trace, values,
41                                prefix, suffix, units, important).c_str());
42   fflush(stdout);
43 }
44 
45 }  // namespace
46 
47 namespace perf_test {
48 
PrintResult(const std::string & measurement,const std::string & modifier,const std::string & trace,size_t value,const std::string & units,bool important)49 void PrintResult(const std::string& measurement,
50                  const std::string& modifier,
51                  const std::string& trace,
52                  size_t value,
53                  const std::string& units,
54                  bool important) {
55   PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value),
56                    std::string(), std::string(), units, important);
57 }
58 
PrintResult(const std::string & measurement,const std::string & modifier,const std::string & trace,double value,const std::string & units,bool important)59 void PrintResult(const std::string& measurement,
60                  const std::string& modifier,
61                  const std::string& trace,
62                  double value,
63                  const std::string& units,
64                  bool important) {
65   PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value),
66                    std::string(), std::string(), units, important);
67 }
68 
AppendResult(std::string & output,const std::string & measurement,const std::string & modifier,const std::string & trace,size_t value,const std::string & units,bool important)69 void AppendResult(std::string& output,
70                   const std::string& measurement,
71                   const std::string& modifier,
72                   const std::string& trace,
73                   size_t value,
74                   const std::string& units,
75                   bool important) {
76   output +=
77       ResultsToString(measurement, modifier, trace, base::NumberToString(value),
78                       std::string(), std::string(), units, important);
79 }
80 
PrintResult(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & value,const std::string & units,bool important)81 void PrintResult(const std::string& measurement,
82                  const std::string& modifier,
83                  const std::string& trace,
84                  const std::string& value,
85                  const std::string& units,
86                  bool important) {
87   PrintResultsImpl(measurement,
88                    modifier,
89                    trace,
90                    value,
91                    std::string(),
92                    std::string(),
93                    units,
94                    important);
95 }
96 
AppendResult(std::string & output,const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & value,const std::string & units,bool important)97 void AppendResult(std::string& output,
98                   const std::string& measurement,
99                   const std::string& modifier,
100                   const std::string& trace,
101                   const std::string& value,
102                   const std::string& units,
103                   bool important) {
104   output += ResultsToString(measurement,
105                             modifier,
106                             trace,
107                             value,
108                             std::string(),
109                             std::string(),
110                             units,
111                             important);
112 }
113 
PrintResultMeanAndError(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & mean_and_error,const std::string & units,bool important)114 void PrintResultMeanAndError(const std::string& measurement,
115                              const std::string& modifier,
116                              const std::string& trace,
117                              const std::string& mean_and_error,
118                              const std::string& units,
119                              bool important) {
120   PrintResultsImpl(measurement, modifier, trace, mean_and_error,
121                    "{", "}", units, important);
122 }
123 
AppendResultMeanAndError(std::string & output,const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & mean_and_error,const std::string & units,bool important)124 void AppendResultMeanAndError(std::string& output,
125                               const std::string& measurement,
126                               const std::string& modifier,
127                               const std::string& trace,
128                               const std::string& mean_and_error,
129                               const std::string& units,
130                               bool important) {
131   output += ResultsToString(measurement, modifier, trace, mean_and_error,
132                             "{", "}", units, important);
133 }
134 
PrintResultList(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & values,const std::string & units,bool important)135 void PrintResultList(const std::string& measurement,
136                      const std::string& modifier,
137                      const std::string& trace,
138                      const std::string& values,
139                      const std::string& units,
140                      bool important) {
141   PrintResultsImpl(measurement, modifier, trace, values,
142                    "[", "]", units, important);
143 }
144 
AppendResultList(std::string & output,const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & values,const std::string & units,bool important)145 void AppendResultList(std::string& output,
146                       const std::string& measurement,
147                       const std::string& modifier,
148                       const std::string& trace,
149                       const std::string& values,
150                       const std::string& units,
151                       bool important) {
152   output += ResultsToString(measurement, modifier, trace, values,
153                             "[", "]", units, important);
154 }
155 
PrintSystemCommitCharge(const std::string & test_name,size_t charge,bool important)156 void PrintSystemCommitCharge(const std::string& test_name,
157                              size_t charge,
158                              bool important) {
159   PrintSystemCommitCharge(stdout, test_name, charge, important);
160 }
161 
PrintSystemCommitCharge(FILE * target,const std::string & test_name,size_t charge,bool important)162 void PrintSystemCommitCharge(FILE* target,
163                              const std::string& test_name,
164                              size_t charge,
165                              bool important) {
166   fprintf(target, "%s", SystemCommitChargeToString(test_name, charge,
167                                                    important).c_str());
168 }
169 
SystemCommitChargeToString(const std::string & test_name,size_t charge,bool important)170 std::string SystemCommitChargeToString(const std::string& test_name,
171                                        size_t charge,
172                                        bool important) {
173   std::string trace_name(test_name);
174   std::string output;
175   AppendResult(output,
176                "commit_charge",
177                std::string(),
178                "cc" + trace_name,
179                charge,
180                "kb",
181                important);
182   return output;
183 }
184 
185 }  // namespace perf_test
186