summaryrefslogtreecommitdiffstats
path: root/openat/benches/count_processes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openat/benches/count_processes.rs')
-rw-r--r--openat/benches/count_processes.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/openat/benches/count_processes.rs b/openat/benches/count_processes.rs
new file mode 100644
index 0000000..aa9f856
--- /dev/null
+++ b/openat/benches/count_processes.rs
@@ -0,0 +1,39 @@
+#![feature(test)]
+
+extern crate openat;
+extern crate test;
+
+
+use std::fs::read_dir;
+use std::str::from_utf8;
+use std::os::unix::ffi::OsStrExt;
+use test::Bencher;
+
+use openat::Dir;
+
+
+#[bench]
+fn procs_stdlib(b: &mut Bencher) {
+ b.iter(|| {
+ read_dir("/proc").unwrap().filter(|r| {
+ r.as_ref().ok()
+ .and_then(|e| from_utf8(e.file_name().as_bytes()).ok()
+ // pid is everything that can be parsed as a number
+ .and_then(|s| s.parse::<u32>().ok()))
+ .is_some()
+ }).count()
+ });
+}
+
+#[bench]
+fn procs_openat(b: &mut Bencher) {
+ b.iter(|| {
+ Dir::open("/proc").unwrap().list_dir(".").unwrap().filter(|r| {
+ r.as_ref().ok()
+ .and_then(|e| from_utf8(e.file_name().as_bytes()).ok()
+ // pid is everything that can be parsed as a number
+ .and_then(|s| s.parse::<u32>().ok()))
+ .is_some()
+ }).count()
+ });
+}