sysinfo 0.40.0

Library to get system information such as processes, CPUs, disks, components and networks
Documentation
#![feature(test)]
// Needed for `black_box`.
#![allow(clippy::unit_arg)]

extern crate test;

use std::hint::black_box;

#[cfg(feature = "system")]
#[bench]
fn bench_new(b: &mut test::Bencher) {
    b.iter(|| {
        let _ = black_box(sysinfo::System::new());
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_new_all(b: &mut test::Bencher) {
    b.iter(|| {
        let _ = black_box(sysinfo::System::new_all());
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_refresh_all(b: &mut test::Bencher) {
    let Ok(mut s) = sysinfo::System::new_all() else {
        return;
    };
    b.iter(move || {
        black_box(s.refresh_all());
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_refresh_processes(b: &mut test::Bencher) {
    let Ok(mut s) = sysinfo::System::new() else {
        return;
    };

    s.refresh_processes(sysinfo::ProcessesToUpdate::All, true); // to load the whole processes list a first time.
    b.iter(move || {
        black_box(s.refresh_processes(sysinfo::ProcessesToUpdate::All, true));
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_first_refresh_processes(b: &mut test::Bencher) {
    if sysinfo::System::new().is_err() {
        return;
    }
    b.iter(move || {
        let mut s = sysinfo::System::new().unwrap();
        black_box(s.refresh_processes(sysinfo::ProcessesToUpdate::All, true));
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_refresh_process(b: &mut test::Bencher) {
    let Ok(mut s) = sysinfo::System::new() else {
        return;
    };

    s.refresh_all();
    // to be sure it'll exist for at least as long as we run
    let pid = sysinfo::get_current_pid().expect("failed to get current pid");
    b.iter(move || {
        black_box(s.refresh_processes(sysinfo::ProcessesToUpdate::Some(&[pid]), true));
    });
}

#[bench]
fn bench_refresh_disk(b: &mut test::Bencher) {
    let Ok(mut disks) = sysinfo::Disks::new_with_refreshed_list() else {
        return;
    };

    let disk = &mut disks[0];
    b.iter(move || {
        black_box(disk.refresh());
    });
}

#[bench]
fn bench_refresh_disks(b: &mut test::Bencher) {
    let Ok(mut disks) = sysinfo::Disks::new_with_refreshed_list() else {
        return;
    };

    b.iter(move || {
        black_box(disks.refresh(true));
    });
}

#[cfg(feature = "network")]
#[bench]
fn bench_refresh_networks(b: &mut test::Bencher) {
    let Ok(mut n) = sysinfo::Networks::new_with_refreshed_list() else {
        return;
    };

    b.iter(move || {
        black_box(n.refresh(true));
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_refresh_memory(b: &mut test::Bencher) {
    let Ok(mut s) = sysinfo::System::new() else {
        return;
    };

    b.iter(move || {
        black_box(s.refresh_memory());
    });
}

#[cfg(feature = "system")]
#[bench]
fn bench_refresh_cpu_usage(b: &mut test::Bencher) {
    let Ok(mut s) = sysinfo::System::new() else {
        return;
    };

    s.refresh_cpu_usage();
    b.iter(move || {
        black_box(s.refresh_cpu_usage());
    });
}

#[cfg(feature = "component")]
#[bench]
fn bench_refresh_components(b: &mut test::Bencher) {
    let Ok(mut c) = sysinfo::Components::new_with_refreshed_list() else {
        return;
    };

    b.iter(move || {
        black_box(c.refresh(false));
    });
}

#[bench]
fn bench_refresh_users_list(b: &mut test::Bencher) {
    let Ok(mut users) = sysinfo::Users::new_with_refreshed_list() else {
        return;
    };

    b.iter(move || {
        black_box(users.refresh());
    });
}