Merge #9712: bench: Fix initialization order in registration

29c5328 bench: Fix initialization order in registration (Wladimir J. van der Laan)
This commit is contained in:
MarcoFalke 2017-02-08 04:40:19 +01:00
commit d304fef374
No known key found for this signature in database
GPG key ID: 2D7F2372E50FE137
2 changed files with 10 additions and 9 deletions

View file

@ -9,7 +9,10 @@
#include <iomanip> #include <iomanip>
#include <sys/time.h> #include <sys/time.h>
std::map<std::string, benchmark::BenchFunction> benchmark::BenchRunner::benchmarks; benchmark::BenchRunner::BenchmarkMap &benchmark::BenchRunner::benchmarks() {
static std::map<std::string, benchmark::BenchFunction> benchmarks_map;
return benchmarks_map;
}
static double gettimedouble(void) { static double gettimedouble(void) {
struct timeval tv; struct timeval tv;
@ -19,7 +22,7 @@ static double gettimedouble(void) {
benchmark::BenchRunner::BenchRunner(std::string name, benchmark::BenchFunction func) benchmark::BenchRunner::BenchRunner(std::string name, benchmark::BenchFunction func)
{ {
benchmarks.insert(std::make_pair(name, func)); benchmarks().insert(std::make_pair(name, func));
} }
void void
@ -29,12 +32,9 @@ benchmark::BenchRunner::RunAll(double elapsedTimeForOne)
std::cout << "#Benchmark" << "," << "count" << "," << "min" << "," << "max" << "," << "average" << "," std::cout << "#Benchmark" << "," << "count" << "," << "min" << "," << "max" << "," << "average" << ","
<< "min_cycles" << "," << "max_cycles" << "," << "average_cycles" << "\n"; << "min_cycles" << "," << "max_cycles" << "," << "average_cycles" << "\n";
for (std::map<std::string,benchmark::BenchFunction>::iterator it = benchmarks.begin(); for (const auto &p: benchmarks()) {
it != benchmarks.end(); ++it) { State state(p.first, elapsedTimeForOne);
p.second(state);
State state(it->first, elapsedTimeForOne);
benchmark::BenchFunction& func = it->second;
func(state);
} }
perf_fini(); perf_fini();
} }

View file

@ -63,7 +63,8 @@ namespace benchmark {
class BenchRunner class BenchRunner
{ {
static std::map<std::string, BenchFunction> benchmarks; typedef std::map<std::string, BenchFunction> BenchmarkMap;
static BenchmarkMap &benchmarks();
public: public:
BenchRunner(std::string name, BenchFunction func); BenchRunner(std::string name, BenchFunction func);