You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While working on extracting some tracing code in bevy repo, a suggestion arose to include part of it in the tracing crate. The code has to do with per-level tracing macros that should only fire once. These are useful in bevy's context because of the "called-every-frame" nature of game systems, so we are wondering if this kind of functionality would be useful for the wider audience.
Proposal
Add the following macros to tracing crate:
/// Call some expression only once per call site.#[macro_export]macro_rules! once {($expression:expr) => {{use ::std::sync::atomic::{AtomicBool, Ordering};
staticSHOULD_FIRE: AtomicBool = AtomicBool::new(true);
ifSHOULD_FIRE.swap(false, Ordering::Relaxed){
$expression;
}}};}/// Call [`trace!`](crate::tracing::trace) once per call site.////// Useful for logging within systems which are called every frame.#[macro_export]macro_rules! trace_once {($($arg:tt)+) => ({
$crate::once!($crate::tracing::trace!($($arg)+))});}/// Call [`debug!`](crate::tracing::debug) once per call site.////// Useful for logging within systems which are called every frame.#[macro_export]macro_rules! debug_once {($($arg:tt)+) => ({
$crate::once!($crate::tracing::debug!($($arg)+))});}/// Call [`info!`](crate::tracing::info) once per call site.////// Useful for logging within systems which are called every frame.#[macro_export]macro_rules! info_once {($($arg:tt)+) => ({
$crate::once!($crate::tracing::info!($($arg)+))});}/// Call [`warn!`](crate::tracing::warn) once per call site.////// Useful for logging within systems which are called every frame.#[macro_export]macro_rules! warn_once {($($arg:tt)+) => ({
$crate::once!($crate::tracing::warn!($($arg)+))});}/// Call [`error!`](crate::tracing::error) once per call site.////// Useful for logging within systems which are called every frame.#[macro_export]macro_rules! error_once {($($arg:tt)+) => ({
$crate::once!($crate::tracing::error!($($arg)+))});}
Alternatives
We can keep these within bevy if there's no interest in having these features.
The text was updated successfully, but these errors were encountered:
Feature Request
Crates
tracing
Motivation
While working on extracting some tracing code in
bevy
repo, a suggestion arose to include part of it in thetracing
crate. The code has to do with per-level tracing macros that should only fire once. These are useful inbevy
's context because of the "called-every-frame" nature of game systems, so we are wondering if this kind of functionality would be useful for the wider audience.Proposal
Add the following macros to
tracing
crate:Alternatives
We can keep these within
bevy
if there's no interest in having these features.The text was updated successfully, but these errors were encountered: