#[repr(C)]pub struct retro_perf_callback {
pub get_time_usec: retro_perf_get_time_usec_t,
pub get_cpu_features: retro_get_cpu_features_t,
pub get_perf_counter: retro_perf_get_counter_t,
pub perf_register: retro_perf_register_t,
pub perf_start: retro_perf_start_t,
pub perf_stop: retro_perf_stop_t,
pub perf_log: retro_perf_log_t,
}
Expand description
For convenience it can be useful to wrap register, start and stop in macros. E.g.: #ifdef LOG_PERFORMANCE #define RETRO_PERFORMANCE_INIT(perf_cb, name) static struct retro_perf_counter name = {#name}; if (!name.registered) perf_cb.perf_register(&(name)) #define RETRO_PERFORMANCE_START(perf_cb, name) perf_cb.perf_start(&(name)) #define RETRO_PERFORMANCE_STOP(perf_cb, name) perf_cb.perf_stop(&(name)) #else … Blank macros … #endif
These can then be used mid-functions around code snippets.
extern struct retro_perf_callback perf_cb; * Somewhere in the core.
void do_some_heavy_work(void) { RETRO_PERFORMANCE_INIT(cb, work_1; RETRO_PERFORMANCE_START(cb, work_1); heavy_work_1(); RETRO_PERFORMANCE_STOP(cb, work_1);
RETRO_PERFORMANCE_INIT(cb, work_2); RETRO_PERFORMANCE_START(cb, work_2); heavy_work_2(); RETRO_PERFORMANCE_STOP(cb, work_2); }
void retro_deinit(void) { perf_cb.perf_log(); * Log all perf counters here for example. }
Fields§
§get_time_usec: retro_perf_get_time_usec_t
§get_cpu_features: retro_get_cpu_features_t
§get_perf_counter: retro_perf_get_counter_t
§perf_register: retro_perf_register_t
§perf_start: retro_perf_start_t
§perf_stop: retro_perf_stop_t
§perf_log: retro_perf_log_t
Trait Implementations§
Source§impl Clone for retro_perf_callback
impl Clone for retro_perf_callback
Source§fn clone(&self) -> retro_perf_callback
fn clone(&self) -> retro_perf_callback
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source
. Read more