game-metrics 0.0.5

A simple crate for effective metrics instrumentation targeted at games.
Documentation
use game_metrics::{scope, instrument, Metrics};
use std::time::Duration;

#[instrument]
fn long() {
    std::thread::sleep(Duration::from_millis(500));
}

#[instrument]
fn short() {
    std::thread::sleep(Duration::from_millis(50));
}


fn long_scoped() {
    scope!("long_scoped");
    std::thread::sleep(Duration::from_millis(500));
}


fn short_scoped() {
    scope!("short_scoped");
    std::thread::sleep(Duration::from_millis(50));
}

fn main() {
    let metrics = Metrics::new(1);

    let t1 =  std::thread::spawn(|| {
        (0..10).for_each(|_| long_scoped());
        (0..10).for_each(|_| long());
        (0..10).for_each(|_| short_scoped());
        (0..10).for_each(|_| short());
    });

    let t2 =  std::thread::spawn(|| {
        (0..10).for_each(|_| long_scoped());
        (0..10).for_each(|_| long());
        (0..10).for_each(|_| short_scoped());
        (0..10).for_each(|_| short());
    });

    t1.join().unwrap();
    t2.join().unwrap();

    metrics.for_each_histogram(|span_name, h| {
        println!("{} -> {:.2}ms", span_name, h.mean() / 1_000_000.0);
    });
}