| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #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
|