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