1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 // A stripped-down version of Chromium's chrome/test/perf/perf_test.cc.
12 // ResultsToString(), PrintResult(size_t value) and AppendResult(size_t value)
13 // have been modified. The remainder are identical to the Chromium version.
14
15 #include "webrtc/test/testsupport/perf_test.h"
16
17 #include <sstream>
18 #include <stdio.h>
19
20 namespace {
21
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)22 std::string ResultsToString(const std::string& measurement,
23 const std::string& modifier,
24 const std::string& trace,
25 const std::string& values,
26 const std::string& prefix,
27 const std::string& suffix,
28 const std::string& units,
29 bool important) {
30 // <*>RESULT <graph_name>: <trace_name>= <value> <units>
31 // <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units>
32 // <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units>
33
34 // TODO(ajm): Use of a stream here may violate the style guide (depending on
35 // one's definition of "logging"). Consider adding StringPrintf-like
36 // functionality as in the original Chromium implementation.
37 std::ostringstream stream;
38 if (important) {
39 stream << "*";
40 }
41 stream << "RESULT " << measurement << modifier << ": " << trace << "= "
42 << prefix << values << suffix << " " << units << std::endl;
43 return stream.str();
44 }
45
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)46 void PrintResultsImpl(const std::string& measurement,
47 const std::string& modifier,
48 const std::string& trace,
49 const std::string& values,
50 const std::string& prefix,
51 const std::string& suffix,
52 const std::string& units,
53 bool important) {
54 printf("%s", ResultsToString(measurement, modifier, trace, values,
55 prefix, suffix, units, important).c_str());
56 }
57
58 } // namespace
59
60 namespace webrtc {
61 namespace test {
62
PrintResult(const std::string & measurement,const std::string & modifier,const std::string & trace,size_t value,const std::string & units,bool important)63 void PrintResult(const std::string& measurement,
64 const std::string& modifier,
65 const std::string& trace,
66 size_t value,
67 const std::string& units,
68 bool important) {
69 std::ostringstream value_stream;
70 value_stream << value;
71 PrintResultsImpl(measurement, modifier, trace, value_stream.str(), "", "",
72 units, important);
73 }
74
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)75 void AppendResult(std::string& output,
76 const std::string& measurement,
77 const std::string& modifier,
78 const std::string& trace,
79 size_t value,
80 const std::string& units,
81 bool important) {
82 std::ostringstream value_stream;
83 value_stream << value;
84 output += ResultsToString(measurement, modifier, trace,
85 value_stream.str(),
86 "", "", units, important);
87 }
88
PrintResult(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & value,const std::string & units,bool important)89 void PrintResult(const std::string& measurement,
90 const std::string& modifier,
91 const std::string& trace,
92 const std::string& value,
93 const std::string& units,
94 bool important) {
95 PrintResultsImpl(measurement, modifier, trace, value, "", "", units,
96 important);
97 }
98
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)99 void AppendResult(std::string& output,
100 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 output += ResultsToString(measurement, modifier, trace, value, "", "", units,
107 important);
108 }
109
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)110 void PrintResultMeanAndError(const std::string& measurement,
111 const std::string& modifier,
112 const std::string& trace,
113 const std::string& mean_and_error,
114 const std::string& units,
115 bool important) {
116 PrintResultsImpl(measurement, modifier, trace, mean_and_error,
117 "{", "}", units, important);
118 }
119
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)120 void AppendResultMeanAndError(std::string& output,
121 const std::string& measurement,
122 const std::string& modifier,
123 const std::string& trace,
124 const std::string& mean_and_error,
125 const std::string& units,
126 bool important) {
127 output += ResultsToString(measurement, modifier, trace, mean_and_error,
128 "{", "}", units, important);
129 }
130
PrintResultList(const std::string & measurement,const std::string & modifier,const std::string & trace,const std::string & values,const std::string & units,bool important)131 void PrintResultList(const std::string& measurement,
132 const std::string& modifier,
133 const std::string& trace,
134 const std::string& values,
135 const std::string& units,
136 bool important) {
137 PrintResultsImpl(measurement, modifier, trace, values,
138 "[", "]", units, important);
139 }
140
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)141 void AppendResultList(std::string& output,
142 const std::string& measurement,
143 const std::string& modifier,
144 const std::string& trace,
145 const std::string& values,
146 const std::string& units,
147 bool important) {
148 output += ResultsToString(measurement, modifier, trace, values,
149 "[", "]", units, important);
150 }
151
PrintSystemCommitCharge(const std::string & test_name,size_t charge,bool important)152 void PrintSystemCommitCharge(const std::string& test_name,
153 size_t charge,
154 bool important) {
155 PrintSystemCommitCharge(stdout, test_name, charge, important);
156 }
157
PrintSystemCommitCharge(FILE * target,const std::string & test_name,size_t charge,bool important)158 void PrintSystemCommitCharge(FILE* target,
159 const std::string& test_name,
160 size_t charge,
161 bool important) {
162 fprintf(target, "%s", SystemCommitChargeToString(test_name, charge,
163 important).c_str());
164 }
165
SystemCommitChargeToString(const std::string & test_name,size_t charge,bool important)166 std::string SystemCommitChargeToString(const std::string& test_name,
167 size_t charge,
168 bool important) {
169 std::string trace_name(test_name);
170 std::string output;
171 AppendResult(output, "commit_charge", "", "cc" + trace_name, charge, "kb",
172 important);
173 return output;
174 }
175
176 } // namespace test
177 } // namespace webrtc
178