use rlx_runtime::Device;
use std::sync::{Mutex, MutexGuard};
static GPU_TEST_MUTEX: Mutex<()> = Mutex::new(());
pub struct GpuTestGuard(#[allow(dead_code)] MutexGuard<'static, ()>);
impl GpuTestGuard {
pub fn acquire(device: Device) -> Option<Self> {
if matches!(
device,
Device::Metal | Device::Gpu | Device::Cuda | Device::Rocm | Device::Mlx
) {
Some(Self(
GPU_TEST_MUTEX.lock().unwrap_or_else(|e| e.into_inner()),
))
} else {
None
}
}
}
impl Drop for GpuTestGuard {
fn drop(&mut self) {
#[cfg(all(feature = "metal", target_os = "macos"))]
{
rlx_metal::device::drain_command_queue();
rlx_metal::mps_blas::invalidate_caches();
}
}
}