From 14dffdb7a0457fc647103deafa5f1cac12e888fb Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 19 Nov 2010 19:22:13 +0200 Subject: basic profiling --- frontend/pcnt.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 frontend/pcnt.h (limited to 'frontend/pcnt.h') diff --git a/frontend/pcnt.h b/frontend/pcnt.h new file mode 100644 index 0000000..57bc88a --- /dev/null +++ b/frontend/pcnt.h @@ -0,0 +1,52 @@ + +enum pcounters { + PCNT_ALL, + PCNT_GPU, + PCNT_SPU, + PCNT_CNT +}; + +extern unsigned int pcounters[PCNT_CNT]; +extern unsigned int pcounter_starts[PCNT_CNT]; + +#define pcnt_start(id) \ + pcounter_starts[id] = pcnt_get() + +#define pcnt_end(id) \ + pcounters[id] += pcnt_get() - pcounter_starts[id] + +void pcnt_hook_plugins(void); + +static inline void pcnt_print(float fps) +{ + unsigned int total, gpu, spu, rem; + int i; + + for (i = 0; i < PCNT_CNT; i++) + pcounters[i] >>= 10; + + total = pcounters[PCNT_ALL]; + gpu = pcounters[PCNT_GPU]; + spu = pcounters[PCNT_SPU]; + rem = total - gpu - spu; + if (!total) + total++; + + printf("%2.1f %6u %6u %6u (%2d %2d %2d)\n", fps, gpu, spu, rem, + gpu * 100 / total, spu * 100 / total, rem * 100 / total); + + memset(pcounters, 0, sizeof(pcounters)); +} + +static inline unsigned int pcnt_get(void) +{ + unsigned int val; +#ifdef __ARM_ARCH_7A__ + __asm__ volatile("mrc p15, 0, %0, c9, c13, 0" + : "=r"(val)); +#else + val = 0; +#endif + return val; +} + -- cgit v1.2.3