fn bench_lib_consumer()

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();
        }
    });
}