53 lines
999 B
C++
53 lines
999 B
C++
|
#pragma once
|
||
|
|
||
|
#include "profiler.h"
|
||
|
|
||
|
struct ScopeProfiler {
|
||
|
const char *name;
|
||
|
bool enabled = true;
|
||
|
|
||
|
ScopeProfiler(const char *name)
|
||
|
: name(name)
|
||
|
{
|
||
|
profile_start(name);
|
||
|
}
|
||
|
|
||
|
~ScopeProfiler() { Stop(); }
|
||
|
|
||
|
ScopeProfiler(const ScopeProfiler &) = delete;
|
||
|
ScopeProfiler(ScopeProfiler &&other)
|
||
|
: name(other.name),
|
||
|
enabled(other.enabled)
|
||
|
{
|
||
|
other.enabled = false;
|
||
|
}
|
||
|
|
||
|
ScopeProfiler &operator=(const ScopeProfiler &) = delete;
|
||
|
ScopeProfiler &operator=(ScopeProfiler &&other) = delete;
|
||
|
|
||
|
void Stop()
|
||
|
{
|
||
|
if (!enabled)
|
||
|
return;
|
||
|
|
||
|
profile_end(name);
|
||
|
enabled = false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#ifndef NO_PROFILER_MACROS
|
||
|
|
||
|
#define ScopeProfiler_NameConcatImpl(x, y) x ## y
|
||
|
#define ScopeProfiler_NameConcat(x, y) ScopeProfiler_NameConcatImpl(x, y)
|
||
|
|
||
|
#ifdef __COUNTER__
|
||
|
#define ScopeProfiler_Name(x) ScopeProfiler_NameConcat(x, __COUNTER__)
|
||
|
#else
|
||
|
#define ScopeProfiler_Name(x) ScopeProfiler_NameConcat(x, __LINE__)
|
||
|
#endif
|
||
|
|
||
|
#define ProfileScope(x) ScopeProfiler \
|
||
|
ScopeProfiler_Name(SCOPE_PROFILE){x}
|
||
|
|
||
|
#endif
|