22 Profiler() { m_start = Timer::GetRawTicks(); }
27 KyFloat64 GetMillisecondsAndRestart() {
return GetSecondsAndRestart() * 1000.0; }
28 KyFloat64 GetMicrosecondsAndRestart() {
return GetSecondsAndRestart() * 1000000.0; }
31 KyFloat32 GetMillisecondsAndRestartF() {
return (
KyFloat32)GetMillisecondsAndRestart(); }
32 KyFloat32 GetMicrosecondsAndRestartF() {
return (
KyFloat32)GetMicrosecondsAndRestart(); }
34 void GetSecondsAndRestart(
KyFloat64* s) {
if (s) { *s = GetSecondsAndRestart(); } }
35 void GetMillisecondsAndRestart(
KyFloat64* ms) {
if (ms) { *ms = GetMillisecondsAndRestart(); } }
36 void GetMicrosecondsAndRestart(
KyFloat64* mks) {
if (mks) { *mks = GetMicrosecondsAndRestart(); } }
38 void GetSecondsAndRestartF(
KyFloat32* s) {
if (s) { *s = GetSecondsAndRestartF(); } }
39 void GetMillisecondsAndRestartF(
KyFloat32* ms) {
if (ms) { *ms = GetMillisecondsAndRestartF(); } }
40 void GetMicrosecondsAndRestartF(
KyFloat32* mks) {
if (mks) { *mks = GetMicrosecondsAndRestartF(); } }
44 KyFloat64 GetSeconds()
const {
return ComputeSeconds(Timer::GetRawTicks()); }
45 KyFloat64 GetMilliseconds()
const {
return GetSeconds() * 1000.0; }
46 KyFloat64 GetMicroseconds()
const {
return GetSeconds() * 1000000.0; }
52 void GetSeconds(
KyFloat64* s)
const {
if (s) { *s = GetSeconds(); } }
53 void GetMilliseconds(
KyFloat64* ms)
const {
if (ms) { *ms = GetMilliseconds(); } }
54 void GetMicroseconds(
KyFloat64* mks)
const {
if (mks) { *mks = GetMicroseconds(); } }
56 void GetSecondsF(
KyFloat32* s)
const {
if (s) { *s = GetSecondsF(); } }
57 void GetMillisecondsF(
KyFloat32* ms)
const {
if (ms) { *ms = GetMillisecondsF(); } }
58 void GetMicrosecondsF(
KyFloat32* mks)
const {
if (mks) { *mks = GetMicrosecondsF(); } }
68 KY_INLINE
KyFloat64 Profiler::GetSecondsAndRestart()
70 UInt64 now = Timer::GetRawTicks();
79 const UInt64 ticksDiff = end - m_start;
81 return (
KyFloat64)ticksDiff * secondsPerTick;
86 #define KY_IMPLEMENT_SCOPED_PROFILER(class_name, time_unit, init_zero) \
87 KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem) \
89 class_name(KyFloat32* time) : m_time(time) { if (m_time) init_zero(); } \
90 ~class_name() { if (m_time) { *m_time += (KyFloat32)(m_profiler.GetMicroseconds() * time_unit); } } \
91 void DoInitZero() { *m_time = 0.0f; } \
92 void DoNotInitZero() {} \
107 class ScopedProfilerSeconds { KY_IMPLEMENT_SCOPED_PROFILER(ScopedProfilerSeconds , 0.000001, DoInitZero ) };
108 class ScopedProfilerMs { KY_IMPLEMENT_SCOPED_PROFILER(ScopedProfilerMs , 0.001 , DoInitZero ) };
109 class ScopedProfilerMks { KY_IMPLEMENT_SCOPED_PROFILER(ScopedProfilerMks , 1.0 , DoInitZero ) };
110 class ScopedProfilerSumSeconds { KY_IMPLEMENT_SCOPED_PROFILER(ScopedProfilerSumSeconds, 0.000001, DoNotInitZero) };
111 class ScopedProfilerSumMs { KY_IMPLEMENT_SCOPED_PROFILER(ScopedProfilerSumMs , 0.001 , DoNotInitZero) };
112 class ScopedProfilerSumMks { KY_IMPLEMENT_SCOPED_PROFILER(ScopedProfilerSumMks , 1.0 , DoNotInitZero) };
117 #define KY_BEGIN_PROFILE_SECONDS(s) { Kaim::ScopedProfilerSeconds scopedProfiler(s);
118 #define KY_BEGIN_PROFILE_MS(ms) { Kaim::ScopedProfilerMs scopedProfiler(ms);
119 #define KY_BEGIN_PROFILE_MKS(mks) { Kaim::ScopedProfilerMks scopedProfiler(mks);
121 #define KY_BEGIN_PROFILE_SECONDS_CUMULATE(s) { Kaim::ScopedProfilerSumSeconds scopedProfiler(s);
122 #define KY_BEGIN_PROFILE_MS_CUMULATE(ms) { Kaim::ScopedProfilerSumMs scopedProfiler(ms);
123 #define KY_BEGIN_PROFILE_MKS_CUMULATE(mks) { Kaim::ScopedProfilerSumMks scopedProfiler(mks);
125 #define KY_END_PROFILE }
Small utility class atop Kaim::Timer to profile easily.
Definition: timeprofiler.h:17
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
double KyFloat64
double
Definition: types.h:33
std::uint64_t UInt64
uint64_t
Definition: SF_Types.h:138
float KyFloat32
float
Definition: types.h:32