forked from libretro/RetroArch
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathperformance.h
138 lines (112 loc) · 3.23 KB
/
performance.h
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2015 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _RARCH_PERF_H
#define _RARCH_PERF_H
#include "general.h"
#include <retro_inline.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WIN32
#define PERF_LOG_FMT "[PERF]: Avg (%s): %I64u ticks, %I64u runs.\n"
#else
#define PERF_LOG_FMT "[PERF]: Avg (%s): %llu ticks, %llu runs.\n"
#endif
/* Used internally by RetroArch. */
#define RARCH_PERFORMANCE_INIT(X) \
static struct retro_perf_counter X = {#X}; \
do { \
if (!(X).registered) \
rarch_perf_register(&(X)); \
} while(0)
#define RARCH_PERFORMANCE_START(X) rarch_perf_start(&(X))
#define RARCH_PERFORMANCE_STOP(X) rarch_perf_stop(&(X))
#ifndef MAX_COUNTERS
#define MAX_COUNTERS 64
#endif
extern const struct retro_perf_counter *perf_counters_rarch[MAX_COUNTERS];
extern const struct retro_perf_counter *perf_counters_libretro[MAX_COUNTERS];
extern unsigned perf_ptr_rarch;
extern unsigned perf_ptr_libretro;
/**
* rarch_get_perf_counter:
*
* Gets performance counter.
*
* Returns: performance counter.
**/
retro_perf_tick_t rarch_get_perf_counter(void);
/**
* rarch_get_time_usec:
*
* Gets time in microseconds.
*
* Returns: time in microseconds.
**/
retro_time_t rarch_get_time_usec(void);
void rarch_perf_register(struct retro_perf_counter *perf);
/* Same as rarch_perf_register, just for libretro cores. */
void retro_perf_register(struct retro_perf_counter *perf);
void retro_perf_clear(void);
void rarch_perf_log(void);
void retro_perf_log(void);
/**
* rarch_perf_start:
* @perf : pointer to performance counter
*
* Start performance counter.
**/
static INLINE void rarch_perf_start(struct retro_perf_counter *perf)
{
global_t *global = global_get_ptr();
if (!global->perfcnt_enable || !perf)
return;
perf->call_cnt++;
perf->start = rarch_get_perf_counter();
}
/**
* rarch_perf_stop:
* @perf : pointer to performance counter
*
* Stop performance counter.
**/
static INLINE void rarch_perf_stop(struct retro_perf_counter *perf)
{
global_t *global = global_get_ptr();
if (!global->perfcnt_enable || !perf)
return;
perf->total += rarch_get_perf_counter() - perf->start;
}
/**
* rarch_get_cpu_features:
*
* Gets CPU features..
*
* Returns: bitmask of all CPU features available.
**/
uint64_t rarch_get_cpu_features(void);
/**
* rarch_get_cpu_cores:
*
* Gets the amount of available CPU cores.
*
* Returns: amount of CPU cores available.
**/
unsigned rarch_get_cpu_cores(void);
#ifdef __cplusplus
}
#endif
#endif