| // 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 |