in benches/lib.rs [80:145]
fn bench_lib_consumer(b: &mut Bencher) {
let num_threads = 2;
let result_map: Arc<SyncCovResultMap> = Arc::new(Mutex::new(
FxHashMap::with_capacity_and_hasher(20_000, Default::default()),
));
let (sender, receiver) = unbounded();
let working_dir = PathBuf::from("");
let gcno_buf: Vec<u8> = vec![
111, 110, 99, 103, 42, 50, 48, 52, 74, 200, 254, 66, 0, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0,
236, 217, 93, 255, 2, 0, 0, 0, 109, 97, 105, 110, 0, 0, 0, 0, 2, 0, 0, 0, 102, 105, 108,
101, 46, 99, 0, 0, 1, 0, 0, 0, 0, 0, 65, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 67, 1, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 3, 0, 0, 0, 1, 0,
0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 69, 1, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 102, 105, 108, 101, 46, 99, 0,
0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
b.iter(|| {
let mut parsers = Vec::new();
for i in 0..num_threads {
let receiver = receiver.clone();
let result_map = Arc::clone(&result_map);
let working_dir = working_dir.clone();
let t = thread::Builder::new()
.name(format!("Consumer {}", i))
.spawn(move || {
consumer(
&working_dir,
None,
&result_map,
receiver,
false,
false,
None,
);
})
.unwrap();
parsers.push(t);
}
for _ in 0..10_000 {
sender
.send(Some(WorkItem {
format: ItemFormat::Gcno,
item: ItemType::Buffers(GcnoBuffers {
stem: "".to_string(),
gcno_buf: gcno_buf.clone(),
gcda_buf: Vec::new(),
}),
name: "".to_string(),
}))
.unwrap();
}
for _ in 0..num_threads {
sender.send(None).unwrap();
}
for parser in parsers {
parser.join().unwrap();
}
});
}