Commit facd5a7e authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by facebook-github-bot-4

Use string for benchmark names to support computed names

Summary: [Folly] Use string for benchmark names to support computed names.

A benchmark program might call `folly::addBenchmark` with a computed benchmark name without wishing to maintain the lifetime of the string. Support this case.

Reviewed By: @philippv

Differential Revision: D2460621
parent 9642ca2d
...@@ -55,8 +55,8 @@ BenchmarkSuspender::NanosecondsSpent BenchmarkSuspender::nsSpent; ...@@ -55,8 +55,8 @@ BenchmarkSuspender::NanosecondsSpent BenchmarkSuspender::nsSpent;
typedef function<detail::TimeIterPair(unsigned int)> BenchmarkFun; typedef function<detail::TimeIterPair(unsigned int)> BenchmarkFun;
vector<tuple<const char*, const char*, BenchmarkFun>>& benchmarks() { vector<tuple<string, string, BenchmarkFun>>& benchmarks() {
static vector<tuple<const char*, const char*, BenchmarkFun>> _benchmarks; static vector<tuple<string, string, BenchmarkFun>> _benchmarks;
return _benchmarks; return _benchmarks;
} }
...@@ -77,8 +77,8 @@ int getGlobalBenchmarkBaselineIndex() { ...@@ -77,8 +77,8 @@ int getGlobalBenchmarkBaselineIndex() {
auto it = std::find_if( auto it = std::find_if(
benchmarks().begin(), benchmarks().begin(),
benchmarks().end(), benchmarks().end(),
[global](const tuple<const char*, const char*, BenchmarkFun> &v) { [global](const tuple<string, string, BenchmarkFun> &v) {
return std::strcmp(get<1>(v), global) == 0; return get<1>(v) == global;
} }
); );
CHECK(it != benchmarks().end()); CHECK(it != benchmarks().end());
...@@ -347,14 +347,14 @@ static string metricReadable(double n, unsigned int decimals) { ...@@ -347,14 +347,14 @@ static string metricReadable(double n, unsigned int decimals) {
} }
static void printBenchmarkResultsAsTable( static void printBenchmarkResultsAsTable(
const vector<tuple<const char*, const char*, double> >& data) { const vector<tuple<string, string, double> >& data) {
// Width available // Width available
static const unsigned int columns = 76; static const unsigned int columns = 76;
// Compute the longest benchmark name // Compute the longest benchmark name
size_t longestName = 0; size_t longestName = 0;
FOR_EACH_RANGE (i, 1, benchmarks().size()) { FOR_EACH_RANGE (i, 1, benchmarks().size()) {
longestName = max(longestName, strlen(get<1>(benchmarks()[i]))); longestName = max(longestName, get<1>(benchmarks()[i]).size());
} }
// Print a horizontal rule // Print a horizontal rule
...@@ -363,19 +363,19 @@ static void printBenchmarkResultsAsTable( ...@@ -363,19 +363,19 @@ static void printBenchmarkResultsAsTable(
}; };
// Print header for a file // Print header for a file
auto header = [&](const char* file) { auto header = [&](const string& file) {
separator('='); separator('=');
printf("%-*srelative time/iter iters/s\n", printf("%-*srelative time/iter iters/s\n",
columns - 28, file); columns - 28, file.c_str());
separator('='); separator('=');
}; };
double baselineNsPerIter = numeric_limits<double>::max(); double baselineNsPerIter = numeric_limits<double>::max();
const char* lastFile = ""; string lastFile;
for (auto& datum : data) { for (auto& datum : data) {
auto file = get<0>(datum); auto file = get<0>(datum);
if (strcmp(file, lastFile)) { if (file != lastFile) {
// New file starting // New file starting
header(file); header(file);
lastFile = file; lastFile = file;
...@@ -418,7 +418,7 @@ static void printBenchmarkResultsAsTable( ...@@ -418,7 +418,7 @@ static void printBenchmarkResultsAsTable(
} }
static void printBenchmarkResultsAsJson( static void printBenchmarkResultsAsJson(
const vector<tuple<const char*, const char*, double> >& data) { const vector<tuple<string, string, double> >& data) {
dynamic d = dynamic::object; dynamic d = dynamic::object;
for (auto& datum: data) { for (auto& datum: data) {
d[std::get<1>(datum)] = std::get<2>(datum) * 1000.; d[std::get<1>(datum)] = std::get<2>(datum) * 1000.;
...@@ -428,7 +428,7 @@ static void printBenchmarkResultsAsJson( ...@@ -428,7 +428,7 @@ static void printBenchmarkResultsAsJson(
} }
static void printBenchmarkResults( static void printBenchmarkResults(
const vector<tuple<const char*, const char*, double> >& data) { const vector<tuple<string, string, double> >& data) {
if (FLAGS_json) { if (FLAGS_json) {
printBenchmarkResultsAsJson(data); printBenchmarkResultsAsJson(data);
...@@ -440,7 +440,7 @@ static void printBenchmarkResults( ...@@ -440,7 +440,7 @@ static void printBenchmarkResults(
void runBenchmarks() { void runBenchmarks() {
CHECK(!benchmarks().empty()); CHECK(!benchmarks().empty());
vector<tuple<const char*, const char*, double>> results; vector<tuple<string, string, double>> results;
results.reserve(benchmarks().size() - 1); results.reserve(benchmarks().size() - 1);
std::unique_ptr<boost::regex> bmRegex; std::unique_ptr<boost::regex> bmRegex;
...@@ -459,7 +459,7 @@ void runBenchmarks() { ...@@ -459,7 +459,7 @@ void runBenchmarks() {
continue; continue;
} }
double elapsed = 0.0; double elapsed = 0.0;
if (strcmp(get<1>(benchmarks()[i]), "-") != 0) { // skip separators if (get<1>(benchmarks()[i]) != "-") { // skip separators
if (bmRegex && !boost::regex_search(get<1>(benchmarks()[i]), *bmRegex)) { if (bmRegex && !boost::regex_search(get<1>(benchmarks()[i]), *bmRegex)) {
continue; continue;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment