X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fpcnt.h;fp=frontend%2Fpcnt.h;h=57bc88adff36851d82ef8f271bb49195fad6f6fe;hp=0000000000000000000000000000000000000000;hb=14dffdb7a0457fc647103deafa5f1cac12e888fb;hpb=b60f2812208aa36dc8b9e8e90f02b608dafd0c00 diff --git a/frontend/pcnt.h b/frontend/pcnt.h new file mode 100644 index 00000000..57bc88ad --- /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; +} +