diff options
Diffstat (limited to 'third_party/rust/rustix/benches')
-rw-r--r-- | third_party/rust/rustix/benches/mod.rs | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/third_party/rust/rustix/benches/mod.rs b/third_party/rust/rustix/benches/mod.rs new file mode 100644 index 0000000000..cd3cb323bb --- /dev/null +++ b/third_party/rust/rustix/benches/mod.rs @@ -0,0 +1,217 @@ +//! Benchmarks for rustix. +//! +//! To enable these benchmarks, add `--cfg=criterion` to RUSTFLAGS and enable +//! the "fs", "time", and "process" cargo features. +//! +//! ```sh +//! RUSTFLAGS=--cfg=criterion cargo bench --features=fs,time,process,stdio +//! ``` + +#[cfg(any( + not(criterion), + not(feature = "fs"), + not(feature = "process"), + not(feature = "time"), + not(feature = "stdio"), + windows, + target_os = "emscripten", + target_os = "redox", + target_os = "wasi", +))] +fn main() { + unimplemented!( + "Add --cfg=criterion to RUSTFLAGS and enable the \"fs\", \"time\", \"process\", and \"stdio\" cargo \ + features." + ) +} + +#[cfg(not(any( + not(criterion), + not(feature = "fs"), + not(feature = "process"), + not(feature = "time"), + not(feature = "stdio"), + windows, + target_os = "emscripten", + target_os = "redox", + target_os = "wasi", +)))] +use criterion::{criterion_group, criterion_main}; + +#[cfg(not(any( + not(criterion), + not(feature = "fs"), + not(feature = "process"), + not(feature = "time"), + not(feature = "stdio"), + windows, + target_os = "emscripten", + target_os = "redox", + target_os = "wasi", +)))] +mod suite { + use criterion::Criterion; + + pub(super) fn simple_statat(c: &mut Criterion) { + use rustix::fs::{statat, AtFlags, CWD}; + + c.bench_function("simple statat", |b| { + b.iter(|| { + statat(CWD, "/", AtFlags::empty()).unwrap(); + }) + }); + } + + pub(super) fn simple_statat_libc(c: &mut Criterion) { + c.bench_function("simple statat libc", |b| { + b.iter(|| { + let mut s = std::mem::MaybeUninit::<libc::stat>::uninit(); + unsafe { + assert_eq!( + libc::fstatat( + libc::AT_FDCWD, + std::ffi::CString::new("/").unwrap().as_c_str().as_ptr() as _, + s.as_mut_ptr(), + 0 + ), + 0 + ); + } + }) + }); + } + + pub(super) fn simple_statat_libc_cstr(c: &mut Criterion) { + c.bench_function("simple statat libc cstr", |b| { + b.iter(|| { + let mut s = std::mem::MaybeUninit::<libc::stat>::uninit(); + unsafe { + assert_eq!( + libc::fstatat( + libc::AT_FDCWD, + rustix::cstr!("/").as_ptr() as _, + s.as_mut_ptr(), + 0 + ), + 0 + ); + } + }) + }); + } + + pub(super) fn simple_statat_cstr(c: &mut Criterion) { + use rustix::fs::{statat, AtFlags, CWD}; + + c.bench_function("simple statat cstr", |b| { + b.iter(|| { + statat(CWD, rustix::cstr!("/"), AtFlags::empty()).unwrap(); + }) + }); + } + + pub(super) fn simple_fstat(c: &mut Criterion) { + use rustix::fs::fstat; + + c.bench_function("simple fstat", |b| { + b.iter(|| { + fstat(rustix::stdio::stdin()).unwrap(); + }) + }); + } + + pub(super) fn simple_fstat_libc(c: &mut Criterion) { + c.bench_function("simple fstat libc", |b| { + b.iter(|| { + let mut s = std::mem::MaybeUninit::<libc::stat>::uninit(); + unsafe { + assert_eq!(libc::fstat(libc::STDIN_FILENO, s.as_mut_ptr()), 0); + } + }) + }); + } + + #[cfg(not(target_os = "wasi"))] + pub(super) fn simple_clock_gettime(c: &mut Criterion) { + use rustix::time::{clock_gettime, ClockId}; + + c.bench_function("simple clock_gettime", |b| { + b.iter(|| { + let _ = clock_gettime(ClockId::Monotonic); + }) + }); + } + + #[cfg(not(target_os = "wasi"))] + pub(super) fn simple_clock_gettime_libc(c: &mut Criterion) { + c.bench_function("simple clock_gettime libc", |b| { + b.iter(|| { + let mut s = std::mem::MaybeUninit::<libc::timespec>::uninit(); + unsafe { + assert_eq!( + libc::clock_gettime(libc::CLOCK_MONOTONIC, s.as_mut_ptr()), + 0 + ); + let _ = s.assume_init(); + } + }) + }); + } + + #[cfg(not(target_os = "wasi"))] + pub(super) fn simple_getpid(c: &mut Criterion) { + use rustix::process::getpid; + + c.bench_function("simple getpid", |b| { + b.iter(|| { + let _ = getpid(); + }) + }); + } + + #[cfg(not(target_os = "wasi"))] + pub(super) fn simple_getpid_libc(c: &mut Criterion) { + c.bench_function("simple getpid libc", |b| { + b.iter(|| unsafe { + let _ = libc::getpid(); + }) + }); + } +} + +#[cfg(not(any( + not(criterion), + not(feature = "fs"), + not(feature = "process"), + not(feature = "time"), + not(feature = "stdio"), + windows, + target_os = "emscripten", + target_os = "redox", + target_os = "wasi", +)))] +criterion_group!( + benches, + suite::simple_statat, + suite::simple_statat_libc, + suite::simple_statat_libc_cstr, + suite::simple_statat_cstr, + suite::simple_fstat, + suite::simple_fstat_libc, + suite::simple_clock_gettime, + suite::simple_clock_gettime_libc, + suite::simple_getpid, + suite::simple_getpid_libc +); +#[cfg(not(any( + not(criterion), + not(feature = "fs"), + not(feature = "process"), + not(feature = "time"), + not(feature = "stdio"), + windows, + target_os = "emscripten", + target_os = "redox", + target_os = "wasi", +)))] +criterion_main!(benches); |