From facd5a7e615ede30cc3b537c689b9ca195fcc081 Mon Sep 17 00:00:00 2001 From: Yedidya Feldblum Date: Sat, 19 Sep 2015 21:51:15 -0700 Subject: [PATCH] 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 --- folly/Benchmark.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/folly/Benchmark.cpp b/folly/Benchmark.cpp index 6311fd76..aef1250b 100644 --- a/folly/Benchmark.cpp +++ b/folly/Benchmark.cpp @@ -55,8 +55,8 @@ BenchmarkSuspender::NanosecondsSpent BenchmarkSuspender::nsSpent; typedef function BenchmarkFun; -vector>& benchmarks() { - static vector> _benchmarks; +vector>& benchmarks() { + static vector> _benchmarks; return _benchmarks; } @@ -77,8 +77,8 @@ int getGlobalBenchmarkBaselineIndex() { auto it = std::find_if( benchmarks().begin(), benchmarks().end(), - [global](const tuple &v) { - return std::strcmp(get<1>(v), global) == 0; + [global](const tuple &v) { + return get<1>(v) == global; } ); CHECK(it != benchmarks().end()); @@ -347,14 +347,14 @@ static string metricReadable(double n, unsigned int decimals) { } static void printBenchmarkResultsAsTable( - const vector >& data) { + const vector >& data) { // Width available static const unsigned int columns = 76; // Compute the longest benchmark name size_t longestName = 0; 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 @@ -363,19 +363,19 @@ static void printBenchmarkResultsAsTable( }; // Print header for a file - auto header = [&](const char* file) { + auto header = [&](const string& file) { separator('='); printf("%-*srelative time/iter iters/s\n", - columns - 28, file); + columns - 28, file.c_str()); separator('='); }; double baselineNsPerIter = numeric_limits::max(); - const char* lastFile = ""; + string lastFile; for (auto& datum : data) { auto file = get<0>(datum); - if (strcmp(file, lastFile)) { + if (file != lastFile) { // New file starting header(file); lastFile = file; @@ -418,7 +418,7 @@ static void printBenchmarkResultsAsTable( } static void printBenchmarkResultsAsJson( - const vector >& data) { + const vector >& data) { dynamic d = dynamic::object; for (auto& datum: data) { d[std::get<1>(datum)] = std::get<2>(datum) * 1000.; @@ -428,7 +428,7 @@ static void printBenchmarkResultsAsJson( } static void printBenchmarkResults( - const vector >& data) { + const vector >& data) { if (FLAGS_json) { printBenchmarkResultsAsJson(data); @@ -440,7 +440,7 @@ static void printBenchmarkResults( void runBenchmarks() { CHECK(!benchmarks().empty()); - vector> results; + vector> results; results.reserve(benchmarks().size() - 1); std::unique_ptr bmRegex; @@ -459,7 +459,7 @@ void runBenchmarks() { continue; } 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)) { continue; } -- 2.34.1