 a371ee3019
			
		
	
	
		a371ee3019
		
			
		
	
	
	
	
		
			
			# Objective - Contributes to #11478 ## Solution - Made `bevy_utils::tracing` `doc(hidden)` - Re-exported `tracing` from `bevy_log` for end-users - Added `tracing` directly to crates that need it. ## Testing - CI --- ## Migration Guide If you were importing `tracing` via `bevy::utils::tracing`, instead use `bevy::log::tracing`. Note that many items within `tracing` are also directly re-exported from `bevy::log` as well, so you may only need `bevy::log` for the most common items (e.g., `warn!`, `trace!`, etc.). This also applies to the `log_once!` family of macros. ## Notes - While this doesn't reduce the line-count in `bevy_utils`, it further decouples the internal crates from `bevy_utils`, making its eventual removal more feasible in the future. - I have just imported `tracing` as we do for all dependencies. However, a workspace dependency may be more appropriate for version management.
		
			
				
	
	
		
			40 lines
		
	
	
		
			983 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			983 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #[cfg(feature = "portable-atomic")]
 | |
| use portable_atomic::{AtomicBool, Ordering};
 | |
| 
 | |
| #[cfg(not(feature = "portable-atomic"))]
 | |
| use core::sync::atomic::{AtomicBool, Ordering};
 | |
| 
 | |
| /// Wrapper around an [`AtomicBool`], abstracting the backing implementation and
 | |
| /// ordering considerations.
 | |
| #[doc(hidden)]
 | |
| pub struct OnceFlag(AtomicBool);
 | |
| 
 | |
| impl OnceFlag {
 | |
|     /// Create a new flag in the unset state.
 | |
|     pub const fn new() -> Self {
 | |
|         Self(AtomicBool::new(true))
 | |
|     }
 | |
| 
 | |
|     /// Sets this flag. Will return `true` if this flag hasn't been set before.
 | |
|     pub fn set(&self) -> bool {
 | |
|         self.0.swap(false, Ordering::Relaxed)
 | |
|     }
 | |
| }
 | |
| 
 | |
| impl Default for OnceFlag {
 | |
|     fn default() -> Self {
 | |
|         Self::new()
 | |
|     }
 | |
| }
 | |
| 
 | |
| /// Call some expression only once per call site.
 | |
| #[macro_export]
 | |
| macro_rules! once {
 | |
|     ($expression:expr) => {{
 | |
|         static SHOULD_FIRE: $crate::OnceFlag = $crate::OnceFlag::new();
 | |
|         if SHOULD_FIRE.set() {
 | |
|             $expression;
 | |
|         }
 | |
|     }};
 | |
| }
 |