|  | // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "testing/perf/perf_test.h" | 
|  |  | 
|  | #include <stdio.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/strings/string_number_conversions.h" | 
|  | #include "base/strings/stringprintf.h" | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | std::string 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) { | 
|  | // <*>RESULT <graph_name>: <trace_name>= <value> <units> | 
|  | // <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units> | 
|  | // <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units> | 
|  | return base::StringPrintf("%sRESULT %s%s: %s= %s%s%s %s\n", | 
|  | important ? "*" : "", measurement.c_str(), modifier.c_str(), | 
|  | trace.c_str(), prefix.c_str(), values.c_str(), suffix.c_str(), | 
|  | units.c_str()); | 
|  | } | 
|  |  | 
|  | void 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) { | 
|  | fflush(stdout); | 
|  | printf("%s", ResultsToString(measurement, modifier, trace, values, | 
|  | prefix, suffix, units, important).c_str()); | 
|  | fflush(stdout); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | namespace perf_test { | 
|  |  | 
|  | void PrintResult(const std::string& measurement, | 
|  | const std::string& modifier, | 
|  | const std::string& trace, | 
|  | size_t value, | 
|  | const std::string& units, | 
|  | bool important) { | 
|  | PrintResultsImpl(measurement, | 
|  | modifier, | 
|  | trace, | 
|  | base::UintToString(static_cast<unsigned int>(value)), | 
|  | std::string(), | 
|  | std::string(), | 
|  | units, | 
|  | important); | 
|  | } | 
|  |  | 
|  | void PrintResult(const std::string& measurement, | 
|  | const std::string& modifier, | 
|  | const std::string& trace, | 
|  | double value, | 
|  | const std::string& units, | 
|  | bool important) { | 
|  | PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value), | 
|  | std::string(), std::string(), units, important); | 
|  | } | 
|  |  | 
|  | void 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) { | 
|  | output += ResultsToString( | 
|  | measurement, | 
|  | modifier, | 
|  | trace, | 
|  | base::UintToString(static_cast<unsigned int>(value)), | 
|  | std::string(), | 
|  | std::string(), | 
|  | units, | 
|  | important); | 
|  | } | 
|  |  | 
|  | void PrintResult(const std::string& measurement, | 
|  | const std::string& modifier, | 
|  | const std::string& trace, | 
|  | const std::string& value, | 
|  | const std::string& units, | 
|  | bool important) { | 
|  | PrintResultsImpl(measurement, | 
|  | modifier, | 
|  | trace, | 
|  | value, | 
|  | std::string(), | 
|  | std::string(), | 
|  | units, | 
|  | important); | 
|  | } | 
|  |  | 
|  | void 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) { | 
|  | output += ResultsToString(measurement, | 
|  | modifier, | 
|  | trace, | 
|  | value, | 
|  | std::string(), | 
|  | std::string(), | 
|  | units, | 
|  | important); | 
|  | } | 
|  |  | 
|  | void 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) { | 
|  | PrintResultsImpl(measurement, modifier, trace, mean_and_error, | 
|  | "{", "}", units, important); | 
|  | } | 
|  |  | 
|  | void 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) { | 
|  | output += ResultsToString(measurement, modifier, trace, mean_and_error, | 
|  | "{", "}", units, important); | 
|  | } | 
|  |  | 
|  | void PrintResultList(const std::string& measurement, | 
|  | const std::string& modifier, | 
|  | const std::string& trace, | 
|  | const std::string& values, | 
|  | const std::string& units, | 
|  | bool important) { | 
|  | PrintResultsImpl(measurement, modifier, trace, values, | 
|  | "[", "]", units, important); | 
|  | } | 
|  |  | 
|  | void 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) { | 
|  | output += ResultsToString(measurement, modifier, trace, values, | 
|  | "[", "]", units, important); | 
|  | } | 
|  |  | 
|  | void PrintSystemCommitCharge(const std::string& test_name, | 
|  | size_t charge, | 
|  | bool important) { | 
|  | PrintSystemCommitCharge(stdout, test_name, charge, important); | 
|  | } | 
|  |  | 
|  | void PrintSystemCommitCharge(FILE* target, | 
|  | const std::string& test_name, | 
|  | size_t charge, | 
|  | bool important) { | 
|  | fprintf(target, "%s", SystemCommitChargeToString(test_name, charge, | 
|  | important).c_str()); | 
|  | } | 
|  |  | 
|  | std::string SystemCommitChargeToString(const std::string& test_name, | 
|  | size_t charge, | 
|  | bool important) { | 
|  | std::string trace_name(test_name); | 
|  | std::string output; | 
|  | AppendResult(output, | 
|  | "commit_charge", | 
|  | std::string(), | 
|  | "cc" + trace_name, | 
|  | charge, | 
|  | "kb", | 
|  | important); | 
|  | return output; | 
|  | } | 
|  |  | 
|  | }  // namespace perf_test |