Files
Paul Lipscomb 6f66a5db64 Move feedback stutter bug report to android folder
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-30 19:14:00 -05:00

111 lines
2.3 KiB
C++

#ifndef _WDL_TIMING2_H_
#define _WDL_TIMING2_H_
#if defined(_DEBUG) || defined(WDL_TIMING_ENABLE_FOR_RELEASE)
#include "time_precise.h"
#endif
class wdl_timing_accumulator
{
public:
#if defined(_DEBUG) || defined(WDL_TIMING_ENABLE_FOR_RELEASE)
wdl_timing_accumulator(const char *name=NULL)
{
m_cnt=0;
m_tot=m_cur=0.0;
m_name = name ? name : "[unnamed]";
m_depth = 0;
}
~wdl_timing_accumulator()
{
Report("final");
}
static void _format_big_integer(double usec, char *buf, int buflen)
{
char tmp[256];
#ifdef _MSC_VER
_snprintf(tmp, sizeof(tmp), "%.0f", usec);
#else
snprintf(tmp, sizeof(tmp), "%.0f", usec);
#endif
int len = strlen(tmp);
char *from = tmp, *to = buf;
if (len*4/3 < buflen)
{
while (len--)
{
*to++ = *from++;
if (len && len%3 == 0) *to++ = ',';
}
*to = 0;
}
else
{
lstrcpyn(to, from, buflen);
}
}
void Report(const char *caption=NULL) const
{
if (m_cnt)
{
const double usec=1000000.0;
char buf1[256], buf2[256];
_format_big_integer(m_tot*usec/(double)m_cnt, buf1, sizeof(buf1));
_format_big_integer(m_tot*usec, buf2, sizeof(buf2));
wdl_log_force("timing %s%s%s%s: %.0f calls, %s usec/call, %s usec total\n",
m_name, caption ? " (" : "", caption ? caption : "", caption ? ")" : "",
(double)m_cnt, buf1, buf2);
}
}
void Begin()
{
if (!m_depth++)
m_cur = time_precise();
}
void End()
{
WDL_ASSERT(m_depth > 0);
if (!--m_depth)
{
WDL_ASSERT(m_cur != 0.0);
m_tot += time_precise()-m_cur;
m_cur=0.0;
m_cnt++;
}
}
private:
WDL_INT64 m_cnt;
double m_tot, m_cur;
const char *m_name;
int m_depth;
#else
wdl_timing_accumulator(const char *name=NULL) {}
~wdl_timing_accumulator() {}
void Report(const char *caption=NULL) {}
void Begin() {}
void End() {}
#endif
};
class wdl_timing_accumulator_hold
{
public:
#if defined(_DEBUG) || defined(WDL_TIMING_ENABLE_FOR_RELEASE)
wdl_timing_accumulator_hold(wdl_timing_accumulator *p) : m_p(p) { if (p) p->Begin(); }
~wdl_timing_accumulator_hold() { if (m_p) m_p->End(); }
wdl_timing_accumulator *m_p;
#else
wdl_timing_accumulator_hold(wdl_timing_accumulator *p) {}
#endif
};
#endif