use crate::{recorder::SpanRecorder, Chronograph};
use std::sync::OnceLock;
static GLOBAL_CHRONOGRAPH: OnceLock<Chronograph> = OnceLock::new();
static NOOP_CHRONOGRAPH: OnceLock<Chronograph> = OnceLock::new();
pub fn global() -> &'static Chronograph {
fn get_noop_chronograph() -> &'static Chronograph {
NOOP_CHRONOGRAPH.get_or_init(|| {
Chronograph::builder()
.with_recorder(SpanRecorder::NoOp())
.build()
})
}
GLOBAL_CHRONOGRAPH
.get()
.unwrap_or_else(get_noop_chronograph)
}
pub fn init(chronograph: Chronograph) {
if GLOBAL_CHRONOGRAPH.set(chronograph).is_err() {
panic!("chronograph::init has already been called");
}
}