You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

89 lines
1.9 KiB

#pragma once
#include "tsdk/TrackEngineTypes.h"
#include <chrono>
namespace tsdk {
namespace profiler {
struct ProfilerImpl;
/** @brief Profiler class - storage for all ScopeTimers and statistics.
*/
struct Profiler {
static Profiler& getInstance() {
static Profiler profiler;
return profiler;
}
bool isEnabled() const;
void setEnabled(bool enable);
void pushTimer(const char *timerName);
void profileTime(const char *timerName, size_t duration);
void outputProfileData();
void outputBuffersState(const char *filename);
void storeBufferState(const char *bufferName, tsdk::FrameId frame, size_t bufferSize);
private:
Profiler();
~Profiler();
ProfilerImpl *m_pimpl;
};
struct BufferLog {
/** @brief saves state of buffer for given frame number
* @param bufferName to save info for it
* @param frame to which save info
* @param bufferSize current number of items in buffer
*/
static void logBufferState(const char *bufferName, tsdk::FrameId frame, size_t bufferSize);
/** @brief saves info about buffers to json file with given filename
* @param filename
*/
static void outputState(const char *filename);
};
/** @brief ScopedTimer class with nesting and storing statistics
*/
struct ScopedTimer {
/** @brief Constructor
* @param name name for timing interval
*/
TRACK_ENGINE_API explicit ScopedTimer(const char *name);
TRACK_ENGINE_API ~ScopedTimer();
ScopedTimer(ScopedTimer &) = delete;
ScopedTimer(ScopedTimer &&) = delete;
ScopedTimer &operator=(ScopedTimer &) = delete;
ScopedTimer &operator=(ScopedTimer &&) = delete;
/** @brief output timing storage data to log
*/
static void outputProfileData();
private:
using clock = std::chrono::high_resolution_clock;
using time_point_type = std::chrono::high_resolution_clock::time_point;
char m_name[1024];
time_point_type m_start;
};
}
}