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