summaryrefslogtreecommitdiffstats
path: root/third_party/rust/rustix/benches
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/rustix/benches')
-rw-r--r--third_party/rust/rustix/benches/mod.rs217
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);