use crate::type_aliases::perf_log_fn::PerfLogFn;
use core::cell::UnsafeCell;
use core::ffi::c_void;
#[repr(transparent)]
struct SyncCell<T: Copy>(UnsafeCell<T>);
unsafe impl<T: Copy> Sync for SyncCell<T> {}
impl<T: Copy> SyncCell<T> {
const fn new(val: T) -> Self {
Self(UnsafeCell::new(val))
}
}
pub(crate) static G_PERF_LOG_CONTEXT: SyncCell<*mut c_void> = SyncCell::new(core::ptr::null_mut());
pub(crate) static G_PERF_LOG_FN: SyncCell<PerfLogFn> = SyncCell::new(None);
pub fn set_perf_log(context: *mut c_void, log_fn: PerfLogFn) {
unsafe {
*G_PERF_LOG_CONTEXT.0.get() = context;
*G_PERF_LOG_FN.0.get() = log_fn;
}
}