This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/misc/PerfCheck.h
frank 55061ef0da minor changes to floorplan
fixed some compile issues
worked on nav-meshes
added some tests
2018-01-16 12:41:05 +01:00

131 lines
2.2 KiB
C++

#ifndef PERFCHECK_H
#define PERFCHECK_H
//#define WITH_PERF_CHECK
#ifdef WITH_PERF_CHECK
#include <string>
#include <time.h>
#include <unordered_map>
class PerfCheck {
struct Stats {
size_t calls = 0;
clock_t time = 0;
};
uint32_t name;
clock_t in;
static Stats stats[1024];
public:
/** ctor */
explicit PerfCheck(const uint32_t name) : name(name), in(clock()) {
;
}
/** dtor */
~PerfCheck() {
stats[name].calls += 1;
stats[name].time += clock() - in;
}
PerfCheck(PerfCheck const&) = delete;
PerfCheck& operator = (PerfCheck const&) = delete;
static void dump() {
for (int i = 0; i < 1024; ++i) {
const Stats& s = stats[i];
if (s.calls != 0) {
std::cout << i << ":\t";
std::cout << "\tcalls: " << s.calls;
std::cout << "\ttime: " << s.time;
std::cout << "\ttime/call: " << ((double)s.time / (double)s.calls);
std::cout << std::endl;
}
}
}
// static inline Stats* map() {
// static Stats stats[1024];// = new Stats[1024];
// return stats;
// }
};
PerfCheck::Stats PerfCheck::stats[1024];
#define PERF_REGION(idx, name) PerfCheck pcr_idx(idx)
#define PERF_DUMP() PerfCheck::dump();
#else
#define PERF_REGION(idx, name)
#define PERF_DUMP()
#endif
/*
class PerfCheck {
std::string name;
clock_t in;
public:
explicit PerfCheck(const std::string& name) : name(name), in(clock()) {
;
}
~PerfCheck() {
const clock_t diff = (clock() - in);
add(name, diff);
}
PerfCheck(PerfCheck const&) = delete;
PerfCheck& operator = (PerfCheck const&) = delete;
static void dump() {
for (const auto& it : map()) {
std::cout << it.first << ":\t";
std::cout << "\tcalls: " << it.second.calls;
std::cout << "\ttime: " << it.second.time;
std::cout << "\ttime/call: " << ((double)it.second.time / (double)it.second.calls);
std::cout << std::endl;
}
}
private:
struct Stats {
size_t calls = 0;
clock_t time = 0;
};
static std::unordered_map<std::string, Stats>& map() {
static std::unordered_map<std::string, Stats> stats;
return stats;
}
void add(const std::string& name, const clock_t diff) {
std::unordered_map<std::string, Stats>& m = map();
m[name].calls += 1;
m[name].time += diff;
}
};
*/
#endif // PERFCHECK_H