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