Adding Peter Thatcher to the owners file.
[chromium-blink-merge.git] / testing / perf / perf_test.cc
blob0d5abc01cbbb072d454c110d0dd32b70f7a1c1bd
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "testing/perf/perf_test.h"
7 #include <stdio.h>
9 #include "base/logging.h"
10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/stringprintf.h"
13 namespace {
15 std::string ResultsToString(const std::string& measurement,
16 const std::string& modifier,
17 const std::string& trace,
18 const std::string& values,
19 const std::string& prefix,
20 const std::string& suffix,
21 const std::string& units,
22 bool important) {
23 // <*>RESULT <graph_name>: <trace_name>= <value> <units>
24 // <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units>
25 // <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units>
26 return base::StringPrintf("%sRESULT %s%s: %s= %s%s%s %s\n",
27 important ? "*" : "", measurement.c_str(), modifier.c_str(),
28 trace.c_str(), prefix.c_str(), values.c_str(), suffix.c_str(),
29 units.c_str());
32 void PrintResultsImpl(const std::string& measurement,
33 const std::string& modifier,
34 const std::string& trace,
35 const std::string& values,
36 const std::string& prefix,
37 const std::string& suffix,
38 const std::string& units,
39 bool important) {
40 fflush(stdout);
41 printf("%s", ResultsToString(measurement, modifier, trace, values,
42 prefix, suffix, units, important).c_str());
43 fflush(stdout);
46 } // namespace
48 namespace perf_test {
50 void PrintResult(const std::string& measurement,
51 const std::string& modifier,
52 const std::string& trace,
53 size_t value,
54 const std::string& units,
55 bool important) {
56 PrintResultsImpl(measurement,
57 modifier,
58 trace,
59 base::UintToString(static_cast<unsigned int>(value)),
60 std::string(),
61 std::string(),
62 units,
63 important);
66 void PrintResult(const std::string& measurement,
67 const std::string& modifier,
68 const std::string& trace,
69 double value,
70 const std::string& units,
71 bool important) {
72 PrintResultsImpl(measurement,
73 modifier,
74 trace,
75 base::DoubleToString(value),
76 std::string(),
77 std::string(),
78 units,
79 important);
82 void AppendResult(std::string& output,
83 const std::string& measurement,
84 const std::string& modifier,
85 const std::string& trace,
86 size_t value,
87 const std::string& units,
88 bool important) {
89 output += ResultsToString(
90 measurement,
91 modifier,
92 trace,
93 base::UintToString(static_cast<unsigned int>(value)),
94 std::string(),
95 std::string(),
96 units,
97 important);
100 void PrintResult(const std::string& measurement,
101 const std::string& modifier,
102 const std::string& trace,
103 const std::string& value,
104 const std::string& units,
105 bool important) {
106 PrintResultsImpl(measurement,
107 modifier,
108 trace,
109 value,
110 std::string(),
111 std::string(),
112 units,
113 important);
116 void AppendResult(std::string& output,
117 const std::string& measurement,
118 const std::string& modifier,
119 const std::string& trace,
120 const std::string& value,
121 const std::string& units,
122 bool important) {
123 output += ResultsToString(measurement,
124 modifier,
125 trace,
126 value,
127 std::string(),
128 std::string(),
129 units,
130 important);
133 void PrintResultMeanAndError(const std::string& measurement,
134 const std::string& modifier,
135 const std::string& trace,
136 const std::string& mean_and_error,
137 const std::string& units,
138 bool important) {
139 PrintResultsImpl(measurement, modifier, trace, mean_and_error,
140 "{", "}", units, important);
143 void AppendResultMeanAndError(std::string& output,
144 const std::string& measurement,
145 const std::string& modifier,
146 const std::string& trace,
147 const std::string& mean_and_error,
148 const std::string& units,
149 bool important) {
150 output += ResultsToString(measurement, modifier, trace, mean_and_error,
151 "{", "}", units, important);
154 void PrintResultList(const std::string& measurement,
155 const std::string& modifier,
156 const std::string& trace,
157 const std::string& values,
158 const std::string& units,
159 bool important) {
160 PrintResultsImpl(measurement, modifier, trace, values,
161 "[", "]", units, important);
164 void AppendResultList(std::string& output,
165 const std::string& measurement,
166 const std::string& modifier,
167 const std::string& trace,
168 const std::string& values,
169 const std::string& units,
170 bool important) {
171 output += ResultsToString(measurement, modifier, trace, values,
172 "[", "]", units, important);
175 void PrintSystemCommitCharge(const std::string& test_name,
176 size_t charge,
177 bool important) {
178 PrintSystemCommitCharge(stdout, test_name, charge, important);
181 void PrintSystemCommitCharge(FILE* target,
182 const std::string& test_name,
183 size_t charge,
184 bool important) {
185 fprintf(target, "%s", SystemCommitChargeToString(test_name, charge,
186 important).c_str());
189 std::string SystemCommitChargeToString(const std::string& test_name,
190 size_t charge,
191 bool important) {
192 std::string trace_name(test_name);
193 std::string output;
194 AppendResult(output,
195 "commit_charge",
196 std::string(),
197 "cc" + trace_name,
198 charge,
199 "kb",
200 important);
201 return output;
204 } // namespace perf_test