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