#[cfg(feature = "trace_tracy")]
use once_cell::sync::Lazy;
#[cfg(feature = "trace_tracy")]
static TRACY_CLIENT: Lazy<tracing_tracy::client::Client> =
Lazy::new(|| tracing_tracy::client::Client::start());
pub fn init_profiler() {
#[cfg(feature = "trace_tracy")]
{
let _ = &*TRACY_CLIENT;
}
}
pub fn shutdown_profiler() {
#[cfg(feature = "trace_tracy")]
{
TRACY_CLIENT.frame_mark();
std::thread::sleep(std::time::Duration::from_millis(100));
}
}
#[inline]
pub fn frame_mark() {
#[cfg(feature = "trace_tracy")]
{
TRACY_CLIENT.frame_mark();
}
}
#[inline]
pub fn secondary_frame_mark(name: &str) {
#[cfg(feature = "trace_tracy")]
{
match name {
"physics" => {
use tracing_tracy::client::frame_name;
TRACY_CLIENT.secondary_frame_mark(frame_name!("physics"));
}
_ => {
TRACY_CLIENT.frame_mark();
}
}
}
#[cfg(not(feature = "trace_tracy"))]
{
let _ = name; }
}
#[inline]
pub fn is_profiler_running() -> bool {
#[cfg(feature = "trace_tracy")]
{
tracing_tracy::client::Client::is_running()
}
#[cfg(not(feature = "trace_tracy"))]
{
false
}
}
#[macro_export]
macro_rules! profile_scope {
($name:expr) => {
#[cfg(feature = "trace_tracy")]
let _guard = tracing::span!(tracing::Level::INFO, $name).entered();
};
}
#[cfg(feature = "trace_tracy")]
pub use tracing::instrument as profile;
#[cfg(not(feature = "trace_tracy"))]
#[macro_export]
macro_rules! profile {
($($tt:tt)*) => {
};
}