#[repr(C)]pub struct retro_perf_callback {
pub get_time_usec: Option<unsafe extern "C" fn() -> i64>,
pub get_cpu_features: Option<unsafe extern "C" fn() -> u64>,
pub get_perf_counter: Option<unsafe extern "C" fn() -> u64>,
pub perf_register: Option<unsafe extern "C" fn(*mut retro_perf_counter)>,
pub perf_start: Option<unsafe extern "C" fn(*mut retro_perf_counter)>,
pub perf_stop: Option<unsafe extern "C" fn(*mut retro_perf_counter)>,
pub perf_log: Option<unsafe extern "C" fn()>,
}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: Option<unsafe extern "C" fn() -> i64>§get_cpu_features: Option<unsafe extern "C" fn() -> u64>§get_perf_counter: Option<unsafe extern "C" fn() -> u64>§perf_register: Option<unsafe extern "C" fn(*mut retro_perf_counter)>§perf_start: Option<unsafe extern "C" fn(*mut retro_perf_counter)>§perf_stop: Option<unsafe extern "C" fn(*mut retro_perf_counter)>§perf_log: Option<unsafe extern "C" fn()>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§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more