geopro/external/gpr3dviewer/PerformanceLogger.h

61 lines
1.3 KiB
C++

#ifndef PERFORMANCELOGGER_H
#define PERFORMANCELOGGER_H
#include <QString>
#include <QElapsedTimer>
#include <QVector>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QDebug>
#include <QMutex>
#include <memory>
class PerformanceLogger
{
public:
struct Record
{
QString category;
QString name;
qint64 elapsedMs = 0;
QDateTime timestamp;
};
static PerformanceLogger &instance();
void beginSession(const QString &sessionName = QString());
void endSession();
void log(const QString &category, const QString &name, qint64 elapsedMs);
void printReport() const;
void saveToFile(const QString &filePath) const;
QString reportString() const;
QVector<Record> records() const;
void clear();
private:
PerformanceLogger() = default;
mutable QMutex m_mutex;
QVector<Record> m_records;
QString m_sessionName;
bool m_sessionActive = false;
};
class ScopedPerfTimer
{
public:
ScopedPerfTimer(const QString &category, const QString &name);
~ScopedPerfTimer();
private:
QString m_category;
QString m_name;
QElapsedTimer m_timer;
};
#define SCOPED_PERF_TIMER(category, name) ScopedPerfTimer _perfTimer(category, name)
#endif // PERFORMANCELOGGER_H