syscall_encode 0.1.11

Traits and macros to help define a syscall interface for a kernel.
Documentation
#![cfg(feature = "benchmarking")]

use std::sync::Arc;

use criterion::{criterion_group, criterion_main, Bencher, Criterion};
use syscall_encode::tests::{test_encode, test_encode_fast, Bar, Foo, NullAbi};

fn bench_normal(bencher: &mut Bencher) {
    let abi = Arc::new(NullAbi::default());
    bencher.iter(|| {
        let foo = Foo::default();
        test_encode(&abi, foo, |_, _| {});
    });
}

fn bench_fast(bencher: &mut Bencher) {
    let abi = Arc::new(NullAbi::default());
    bencher.iter(|| {
        let bar = Bar { x: 3, y: 12 };
        test_encode_fast(&abi, bar);
    });
}

fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("encode_normal", |b| bench_normal(b));
    c.bench_function("encode_fast", |b| bench_fast(b));
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);