flamegraph/
flamegraph.rs

1use core::{mem, ptr};
2use std::env;
3
4use kimchi::bench::BenchmarkCtx;
5
6/// function to avoid optimizations by the compiler
7/// taken from <https://docs.rs/criterion/latest/src/criterion/lib.rs.html#171>
8pub fn black_box<T>(dummy: T) -> T {
9    unsafe {
10        let ret = ptr::read_volatile(&dummy);
11        mem::forget(dummy);
12        ret
13    }
14}
15
16fn main() {
17    let mode = env::args().nth(1);
18    match mode.as_deref() {
19        Some("prove") => {
20            let ctx = BenchmarkCtx::new(14);
21            loop {
22                let proof_and_public = ctx.create_proof();
23                black_box(proof_and_public);
24            }
25        }
26        Some("verify") => {
27            let ctx = BenchmarkCtx::new(4);
28            let proof_and_public = ctx.create_proof();
29            loop {
30                ctx.batch_verification(black_box(&vec![proof_and_public.clone()]));
31            }
32        }
33        _ => panic!("you must provide an argument (prove or verify)"),
34    };
35}