#[cfg(feature = "macros")]
pub use timetrace_macros::{profile_function, profile_session, profile_session_limited};
mod backends;
pub mod profile_result;
pub mod profiler;
pub mod profiler_timer;
pub use profiler_timer::ProfilerTimer;
pub use backends::base::TracingBackend;
#[cfg(all(feature = "tracy", feature = "json"))]
compile_error!("features 'tracy' and 'json' are mutually exclusive");
#[macro_export]
macro_rules! profile_begin_session {
($name:expr, $filepath:expr) => {
use $crate::TracingBackend;
$crate::profiler::Profiler::get()
.lock()
.begin_session($name, $filepath);
};
}
#[macro_export]
macro_rules! profile_begin_session_limited {
($name:expr, $path:expr, $frames:expr, $ms:expr) => {
use $crate::TracingBackend;
$crate::profiler::Profiler::get()
.lock()
.begin_session_limited($name, $path, $frames, $ms);
};
}
#[macro_export]
macro_rules! profile_end_session {
() => {
use $crate::TracingBackend;
$crate::profiler::Profiler::get()
.lock()
.end_session()
.unwrap();
};
}
#[macro_export]
macro_rules! profile_scope {
($name:expr) => {
use $crate::TracingBackend;
let _timer = $crate::profiler_timer::ProfilerTimer::new($name);
};
}
#[macro_export]
macro_rules! profile_function_scope {
() => {
__profile_function!(module_path!())
};
}
#[cfg(feature = "tracy")]
#[macro_export]
macro_rules! __profile_function {
($name:literal) => {
let _timetrace_span = tracy_client::span!($name);
};
}
#[cfg(not(feature = "tracy"))]
#[macro_export]
macro_rules! __profile_function {
($name:literal) => {
use $crate::TracingBackend;
let _timetrace_timer = $crate::profiler_timer::ProfilerTimer::new($name);
};
}
#[macro_export]
macro_rules! profile_new_frame {
() => {
use $crate::TracingBackend;
$crate::profiler::Profiler::get().lock().new_frame();
};
}
#[macro_export]
macro_rules! profile_update {
($name:expr, $value:expr) => {
use $crate::TracingBackend;
profile_new_frame!();
};
}