#[macro_export]
macro_rules! compute_small {
($expr:expr) => {{
#[cfg(feature = "compute-validation")]
let _start = std::time::Instant::now();
let result = $expr;
#[cfg(feature = "compute-validation")]
$crate::compute::validation::validate_small(_start.elapsed());
result
}};
}
#[macro_export]
macro_rules! compute_medium {
($expr:expr) => {{
#[cfg(feature = "compute-validation")]
let _start = std::time::Instant::now();
let result = async {
if let Ok(_permit) = $crate::compute::thread_local::try_acquire_block_permit() {
Ok(tokio::task::block_in_place(|| {
let r = $expr;
drop(_permit); r
}))
} else if let Some(pool) = $crate::compute::thread_local::get_pool() {
pool.execute(|| $expr).await
} else {
tracing::warn!("compute_medium: No thread-local context, executing inline (may block async runtime)");
Ok($expr)
}
}
.await?;
#[cfg(feature = "compute-validation")]
$crate::compute::validation::validate_medium(_start.elapsed());
result
}};
($pool:expr, $expr:expr) => {{
#[cfg(feature = "compute-validation")]
let _start = std::time::Instant::now();
let result = async {
if let Ok(_permit) = $crate::compute::thread_local::try_acquire_block_permit() {
Ok(tokio::task::block_in_place(|| {
let r = $expr;
drop(_permit); r
}))
} else {
$pool.execute(|| $expr).await
}
}
.await?;
#[cfg(feature = "compute-validation")]
$crate::compute::validation::validate_medium(_start.elapsed());
result
}};
}
#[macro_export]
macro_rules! compute_large {
($expr:expr) => {{
#[cfg(feature = "compute-validation")]
let _start = std::time::Instant::now();
let result = async {
if let Some(pool) = $crate::compute::thread_local::get_pool() {
pool.execute(|| $expr).await
} else {
tracing::warn!("compute_large: No thread-local context, executing inline (will block async runtime!)");
Ok($expr)
}
}
.await?;
#[cfg(feature = "compute-validation")]
$crate::compute::validation::validate_large(_start.elapsed());
result
}};
($pool:expr, $expr:expr) => {{
#[cfg(feature = "compute-validation")]
let _start = std::time::Instant::now();
let result = $pool.execute(|| $expr).await?;
#[cfg(feature = "compute-validation")]
$crate::compute::validation::validate_large(_start.elapsed());
result
}};
}