eep 0.1.0

Still a work-in-progress...
Documentation
#![feature(test)]

#[cfg(test)]
mod benches {
    mod ring_buffer {
        extern crate test;
        extern crate eep;

        use self::eep::simple_trace::{SimpleTrace, SimpleTraceBuffer};
        use self::eep::traits::TraceSink;

        #[bench]
        fn small_capacity(b: &mut test::Bencher) {
            let mut buffer = SimpleTraceBuffer::new(100);
            b.iter(|| buffer.trace_event(SimpleTrace::FooEvent, None));
            test::black_box(buffer);
        }

        #[bench]
        fn large_capacity(b: &mut test::Bencher) {
            let mut buffer = SimpleTraceBuffer::new(2 * 1024 * 1024);
            b.iter(|| buffer.trace_event(SimpleTrace::FooEvent, None));
            test::black_box(buffer);
        }

        #[bench]
        fn in_mutex(b: &mut test::Bencher) {
            use std::sync::Mutex;

            let buffer = Mutex::new(SimpleTraceBuffer::new(2 * 1024 * 1024));
            b.iter(|| {
                let mut buffer = buffer.lock().unwrap();
                buffer.trace_event(SimpleTrace::FooEvent, None);
            });
            test::black_box(buffer);
        }
    }

    mod thread_and_local_id {
        extern crate eep;
        extern crate test;

        use self::eep::thread_and_local_id::ThreadAndLocalId;
        use self::eep::traits::TraceId;

        #[bench]
        fn new_id(b: &mut test::Bencher) {
            ThreadAndLocalId::new_id();
            b.iter(|| test::black_box(ThreadAndLocalId::new_id()));
        }
    }

    mod simple_trace_id {
        extern crate eep;
        extern crate test;

        use self::eep::simple_trace::SimpleTraceId;
        use self::eep::traits::TraceId;

        #[bench]
        fn new_id(b: &mut test::Bencher) {
            SimpleTraceId::new_id();
            b.iter(|| test::black_box(SimpleTraceId::new_id()));
        }
    }

    #[cfg(feature = "signpost")]
    mod signpost {
        extern crate eep;
        extern crate test;

        use self::eep::signpost::Signpost;
        use self::eep::simple_trace::SimpleTrace;
        use self::eep::traits::TraceSink;

        #[bench]
        fn signpost_event(b: &mut test::Bencher) {
            b.iter(|| {
                Signpost::get().trace_event(SimpleTrace::FooEvent, None);
            });
        }

        #[bench]
        fn signpost_start_stop(b: &mut test::Bencher) {
            b.iter(|| {
                let id = Signpost::get().trace_start(SimpleTrace::OperationThing, None);
                Signpost::get().trace_stop(id, SimpleTrace::OperationThing);
            });
        }
    }
}