2022-12-23 13:50:27 -05:00
|
|
|
/*
|
|
|
|
* Created by Brett on 23/12/22.
|
|
|
|
* Licensed under GNU General Public License V3.0
|
|
|
|
* See LICENSE file for license detail
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef BLT_PROFILER_H
|
|
|
|
#define BLT_PROFILER_H
|
|
|
|
|
2022-12-25 23:19:44 -05:00
|
|
|
#include <string>
|
2023-01-10 10:45:11 -05:00
|
|
|
#include <blt/std/queue.h>
|
2023-01-26 00:59:36 -05:00
|
|
|
#include <unordered_map>
|
2022-12-23 13:50:27 -05:00
|
|
|
|
2023-01-26 00:59:36 -05:00
|
|
|
/**
|
|
|
|
* Defines several disableable macros (#define BLT_DISABLE_PROFILING). If you do not use these macros profiling will not be disableable
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace blt::profiling {
|
2022-12-26 00:31:00 -05:00
|
|
|
struct CapturePoint {
|
2023-01-26 00:59:36 -05:00
|
|
|
std::string name;
|
|
|
|
long point {};
|
2022-12-26 00:31:00 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
struct CaptureInterval {
|
2023-01-05 01:52:56 -05:00
|
|
|
long start;
|
|
|
|
long end;
|
2022-12-26 00:31:00 -05:00
|
|
|
};
|
|
|
|
|
2023-01-26 00:59:36 -05:00
|
|
|
struct Profile {
|
|
|
|
std::unordered_map<std::string, CaptureInterval> intervals;
|
|
|
|
blt::flat_queue<CapturePoint> points;
|
2023-01-12 23:11:17 -05:00
|
|
|
};
|
|
|
|
|
2023-01-26 00:59:36 -05:00
|
|
|
void startInterval(const std::string& profileName, const std::string& intervalName);
|
|
|
|
void endInterval(const std::string& profileName, const std::string& intervalName);
|
|
|
|
|
|
|
|
void point(const std::string& profileName, const std::string& pointName);
|
|
|
|
|
|
|
|
CaptureInterval getInterval(const std::string& profileName, const std::string& intervalName);
|
|
|
|
Profile getProfile(const std::string& profileName);
|
|
|
|
|
2023-01-26 12:21:19 -05:00
|
|
|
void printProfile(const std::string& profileName, int loggingLevel = -1);
|
|
|
|
void printOrderedProfile(const std::string& profileName, int loggingLevel = -1);
|
2023-01-26 00:59:36 -05:00
|
|
|
|
|
|
|
void discardProfiles();
|
|
|
|
void discardIntervals(const std::string& profileName);
|
|
|
|
void discardPoints(const std::string& profileName);
|
2022-12-26 00:31:00 -05:00
|
|
|
}
|
2022-12-23 13:50:27 -05:00
|
|
|
|
|
|
|
#endif //BLT_PROFILER_H
|
2023-01-26 00:59:36 -05:00
|
|
|
|
|
|
|
#ifdef BLT_DISABLE_PROFILING
|
|
|
|
#define BLT_START_INTERVAL(profileName, intervalName)
|
|
|
|
#define BLT_END_INTERVAL(profileName, intervalName)
|
|
|
|
#define BLT_POINT(profileName, pointName)
|
2023-01-26 12:21:19 -05:00
|
|
|
#define BLT_PRINT_PROFILE(profileName, ...)
|
|
|
|
#define BLT_PRINT_ORDERED(profileName, ...)
|
2023-01-26 00:59:36 -05:00
|
|
|
#else
|
|
|
|
#define BLT_START_INTERVAL(profileName, intervalName) blt::profiling::startInterval(profileName, intervalName);
|
|
|
|
#define BLT_END_INTERVAL(profileName, intervalName) blt::profiling::endInterval(profileName, intervalName);
|
|
|
|
#define BLT_POINT(profileName, pointName) blt::profiling::point(profileName, pointName);
|
2023-01-26 12:21:19 -05:00
|
|
|
#define BLT_PRINT_PROFILE(profileName, ...) blt::profiling::printProfile(profileName, ##__VA_ARGS__);
|
|
|
|
#define BLT_PRINT_ORDERED(profileName, ...) blt::profiling::printOrderedProfile(profileName, ##__VA_ARGS__);
|
2023-01-26 00:59:36 -05:00
|
|
|
#endif
|