12009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org/* 22009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 32009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * 42009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * Use of this source code is governed by a BSD-style license 52009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * that can be found in the LICENSE file in the root of the source 62009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * tree. An additional intellectual property rights grant can be found 72009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * in the file PATENTS. All contributing project authors may 82009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 92009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org */ 102009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 112009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org// A stripped-down version of Chromium's chrome/test/perf/perf_test.cc. 122009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org// ResultsToString(), PrintResult(size_t value) and AppendResult(size_t value) 132009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org// have been modified. The remainder are identical to the Chromium version. 142009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 152009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org#include "webrtc/test/testsupport/perf_test.h" 162009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 172009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org#include <sstream> 1834741c8b0e284a2a1b265b1c681e2539ae93f97dpbos@webrtc.org#include <stdio.h> 192009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 202009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgnamespace { 212009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 222009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgstd::string ResultsToString(const std::string& measurement, 232009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 242009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 252009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& values, 262009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& prefix, 272009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& suffix, 282009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 292009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 302009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org // <*>RESULT <graph_name>: <trace_name>= <value> <units> 312009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org // <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units> 322009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org // <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units> 332009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 342009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org // TODO(ajm): Use of a stream here may violate the style guide (depending on 352009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org // one's definition of "logging"). Consider adding StringPrintf-like 362009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org // functionality as in the original Chromium implementation. 372009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org std::ostringstream stream; 382009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org if (important) { 392009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org stream << "*"; 402009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org } 412009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org stream << "RESULT " << measurement << modifier << ": " << trace << "= " 422009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org << prefix << values << suffix << " " << units << std::endl; 432009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org return stream.str(); 442009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 452009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 462009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintResultsImpl(const std::string& measurement, 472009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 482009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 492009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& values, 502009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& prefix, 512009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& suffix, 522009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 532009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 542009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org printf("%s", ResultsToString(measurement, modifier, trace, values, 552009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org prefix, suffix, units, important).c_str()); 562009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 572009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 582009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} // namespace 592009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 602009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgnamespace webrtc { 612009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgnamespace test { 622009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 632009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintResult(const std::string& measurement, 642009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 652009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 662009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org size_t value, 672009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 682009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 692009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org std::ostringstream value_stream; 702009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org value_stream << value; 712009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org PrintResultsImpl(measurement, modifier, trace, value_stream.str(), "", "", 722009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org units, important); 732009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 742009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 752009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid AppendResult(std::string& output, 762009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& measurement, 772009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 782009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 792009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org size_t value, 802009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 812009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 822009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org std::ostringstream value_stream; 832009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org value_stream << value; 842009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org output += ResultsToString(measurement, modifier, trace, 852009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org value_stream.str(), 862009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org "", "", units, important); 872009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 882009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 892009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintResult(const std::string& measurement, 902009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 912009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 922009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& value, 932009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 942009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 952009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org PrintResultsImpl(measurement, modifier, trace, value, "", "", units, 962009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org important); 972009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 982009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 992009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid AppendResult(std::string& output, 1002009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& measurement, 1012009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 1022009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 1032009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& value, 1042009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 1052009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1062009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org output += ResultsToString(measurement, modifier, trace, value, "", "", units, 1072009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org important); 1082009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1092009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1102009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintResultMeanAndError(const std::string& measurement, 1112009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 1122009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 1132009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& mean_and_error, 1142009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 1152009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1162009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org PrintResultsImpl(measurement, modifier, trace, mean_and_error, 1172009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org "{", "}", units, important); 1182009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1192009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1202009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid AppendResultMeanAndError(std::string& output, 1212009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& measurement, 1222009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 1232009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 1242009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& mean_and_error, 1252009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 1262009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1272009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org output += ResultsToString(measurement, modifier, trace, mean_and_error, 1282009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org "{", "}", units, important); 1292009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1302009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1312009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintResultList(const std::string& measurement, 1322009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 1332009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 1342009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& values, 1352009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 1362009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1372009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org PrintResultsImpl(measurement, modifier, trace, values, 1382009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org "[", "]", units, important); 1392009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1402009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1412009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid AppendResultList(std::string& output, 1422009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& measurement, 1432009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& modifier, 1442009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& trace, 1452009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& values, 1462009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& units, 1472009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1482009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org output += ResultsToString(measurement, modifier, trace, values, 1492009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org "[", "]", units, important); 1502009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1512009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1522009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintSystemCommitCharge(const std::string& test_name, 1532009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org size_t charge, 1542009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1552009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org PrintSystemCommitCharge(stdout, test_name, charge, important); 1562009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1572009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1582009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgvoid PrintSystemCommitCharge(FILE* target, 1592009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org const std::string& test_name, 1602009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org size_t charge, 1612009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1622009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org fprintf(target, "%s", SystemCommitChargeToString(test_name, charge, 1632009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org important).c_str()); 1642009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1652009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1662009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.orgstd::string SystemCommitChargeToString(const std::string& test_name, 1672009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org size_t charge, 1682009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org bool important) { 1692009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org std::string trace_name(test_name); 1702009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org std::string output; 1712009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org AppendResult(output, "commit_charge", "", "cc" + trace_name, charge, "kb", 1722009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org important); 1732009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org return output; 1742009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} 1752009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org 1762009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} // namespace test 1772009f6b236a94b144c25d3e8bb2b7b95a536973eandrew@webrtc.org} // namespace webrtc 178