16 std::chrono::high_resolution_clock::time_point startTime;
17 std::vector<std::chrono::nanoseconds> recordedTimes;
21 static std::map<std::string, TimerData> timers;
24 std::string instanceName;
25 std::chrono::high_resolution_clock::time_point instanceStartTime;
32 instanceStartTime(std::chrono::high_resolution_clock::now()),
33 instanceActive(
true) {}
38 auto endTime = std::chrono::high_resolution_clock::now();
39 auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(
40 endTime - instanceStartTime);
41 std::cout <<
"[" << instanceName
42 <<
"] Elapsed time: " << formatTime(elapsed) <<
"\n";
47 static void start(
const std::string& name) {
48 timers[name].startTime = std::chrono::high_resolution_clock::now();
52 static void stop(
const std::string& name) {
53 auto endTime = std::chrono::high_resolution_clock::now();
54 timers[name].recordedTimes.push_back(
55 std::chrono::duration_cast<std::chrono::nanoseconds>(
56 endTime - timers[name].startTime));
60 static void printStatistics(
const std::string& name) {
61 if (timers.find(name) == timers.end() ||
62 timers[name].recordedTimes.empty()) {
63 std::cout <<
"[" << name <<
"] No data recorded.\n";
67 std::vector<std::chrono::nanoseconds> sortedTimes =
68 timers[name].recordedTimes;
69 std::sort(sortedTimes.begin(), sortedTimes.end());
71 auto minTime = sortedTimes.front();
72 auto maxTime = sortedTimes.back();
73 auto medianTime = sortedTimes[sortedTimes.size() / 2];
74 auto avgTime = std::accumulate(sortedTimes.begin(), sortedTimes.end(),
75 std::chrono::nanoseconds(0)) /
78 std::cout <<
"[" << name <<
"] Statistics:\n"
79 <<
" Min: " << formatTime(minTime) <<
"\n"
80 <<
" Max: " << formatTime(maxTime) <<
"\n"
81 <<
" Median: " << formatTime(medianTime) <<
"\n"
82 <<
" Average: " << formatTime(avgTime) <<
"\n";
86 static void printAllStatistics() {
87 for (
const auto& [name, _] : timers) {
88 printStatistics(name);
94 static std::string formatTime(std::chrono::nanoseconds ns) {
95 auto sec = std::chrono::duration_cast<std::chrono::seconds>(ns).count();
97 std::chrono::duration_cast<std::chrono::milliseconds>(ns).count() %
100 std::chrono::duration_cast<std::chrono::microseconds>(ns).count() %
102 auto ns_only = ns.count() % 1000;
104 return "<" + std::to_string(sec) +
"s-" + std::to_string(ms) +
"ms-" +
105 std::to_string(us) +
"us-" + std::to_string(ns_only) +
"ns>";