#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;
|
|
};
|
|
|
|
}
|
|
}
|