time-graph 0.3.3

Always-on profilling recording function timing and the corresponding call graph
Documentation
use criterion::{Criterion, criterion_group, criterion_main};

#[time_graph::instrument]
fn do_nothing(value: usize) -> usize {
    value
}

fn do_nothing_no_instrument(value: usize) -> usize {
    value
}


#[time_graph::instrument]
fn fibonacci(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        n => fibonacci(n - 1) + fibonacci(n - 2),
    }
}

#[time_graph::instrument]
fn fibonacci_single(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        n => fibonacci_no_instrument(n - 1) + fibonacci_no_instrument(n - 2),
    }
}

fn fibonacci_no_instrument(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        n => fibonacci_no_instrument(n - 1) + fibonacci_no_instrument(n - 2),
    }
}
fn empty_function(c: &mut Criterion) {
    c.bench_function("empty functions, not instrumented", |b| b.iter(||
        do_nothing_no_instrument(std::hint::black_box(44))
    ));

    time_graph::enable_data_collection(false);
    c.bench_function("empty functions, no collection", |b| b.iter(||
        do_nothing(std::hint::black_box(44))
    ));

    time_graph::enable_data_collection(true);
    c.bench_function("empty functions, collection", |b| b.iter(||
        do_nothing(std::hint::black_box(44))
    ));
}

fn basic_calculation(c: &mut Criterion) {
    c.bench_function("fibonacci, not instrumented", |b| b.iter(||
        fibonacci_no_instrument(std::hint::black_box(20))
    ));

    time_graph::enable_data_collection(false);
    c.bench_function("fibonacci, no collection", |b| b.iter(||
        fibonacci(std::hint::black_box(20))
    ));
    c.bench_function("fibonacci outer, no collection", |b| b.iter(||
        fibonacci_single(std::hint::black_box(20))
    ));

    time_graph::enable_data_collection(true);
    c.bench_function("fibonacci, collection", |b| b.iter(||
        fibonacci(std::hint::black_box(20))
    ));
    c.bench_function("fibonacci outer, collection", |b| b.iter(||
        fibonacci_single(std::hint::black_box(20))
    ));
}

criterion_group!(benches, empty_function, basic_calculation);
criterion_main!(benches);