pub mod console;
pub mod file;
pub mod log_console;
pub mod perfetto;
pub mod ring_buffer;
use std::sync::atomic::{AtomicBool, Ordering};
pub fn install_log_console() {
static INSTALLED: AtomicBool = AtomicBool::new(false);
if INSTALLED.swap(true, Ordering::SeqCst) {
return;
}
crate::TRACING_BUS.add_subscriber(std::sync::Arc::new(
log_console::LogConsoleSubscriber::new(),
));
}
use std::sync::{Arc, OnceLock};
use crate::subscribers::ring_buffer::RingBufferSubscriber;
static FLIGHT_RECORDER: OnceLock<Arc<RingBufferSubscriber>> = OnceLock::new();
pub fn install_flight_recorder(capacity: usize) -> Arc<RingBufferSubscriber> {
FLIGHT_RECORDER
.get_or_init(|| {
let rec = Arc::new(RingBufferSubscriber::filtered(capacity, |e| {
!e.is_high_frequency()
}));
crate::bus::TRACING_BUS.add_subscriber(rec.clone());
rec
})
.clone()
}
pub fn flight_recorder() -> Option<Arc<RingBufferSubscriber>> {
FLIGHT_RECORDER.get().cloned()
}