use core::fmt::Display;
pub use puffin;
#[doc(hidden)]
pub struct NvtxRange;
impl NvtxRange {
#[doc(hidden)]
#[inline]
#[must_use]
pub fn new<M: Display>(msg: M) -> Self {
nvtx::__private::_range_push(msg);
Self
}
}
impl Drop for NvtxRange {
#[inline]
fn drop(&mut self) {
nvtx::__private::_range_pop();
}
}
#[macro_export]
macro_rules! scope {
($name:expr) => {
let _nvtx = $crate::perf::NvtxRange::new($name);
$crate::perf::puffin::profile_scope!($name);
};
($name:expr, $body:expr) => {{
let _nvtx = $crate::perf::NvtxRange::new($name);
$crate::perf::puffin::profile_scope!($name);
$body
}};
}
#[macro_export]
macro_rules! scope_with {
($name:expr, $data:expr) => {
let _nvtx = $crate::perf::NvtxRange::new(::core::format_args!($name, $data));
$crate::perf::puffin::profile_scope!($name, $data);
};
($name:expr, $data:expr, $body:expr) => {{
let _nvtx = $crate::perf::NvtxRange::new(::core::format_args!($name, $data));
$crate::perf::puffin::profile_scope!($name, $data);
$body
}};
}