1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
enum pcounters {
PCNT_ALL,
PCNT_GPU,
PCNT_SPU,
PCNT_CNT
};
#ifdef PCNT
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;
}
#else
#define pcnt_start(id)
#define pcnt_end(id)
#define pcnt_hook_plugins()
#define pcnt_print(fps)
#endif
|