1 use criterion::*;
2 
3 use crate::benchmarks::compiled_protos::helloworld::{HelloReply, HelloRequest};
4 use crate::benchmarks::utils;
5 
build_request(_name: String)6 fn build_request(_name: String) {
7     let _request = tonic::Request::new(HelloRequest { name: _name });
8 }
9 
build_response(_message: String)10 fn build_response(_message: String) {
11     let _response = tonic::Request::new(HelloReply { message: _message });
12 }
13 
bench_throughput(c: &mut Criterion)14 pub fn bench_throughput(c: &mut Criterion) {
15     let mut group = c.benchmark_group("Request_Response");
16 
17     let plot_config = PlotConfiguration::default().summary_scale(AxisScale::Logarithmic);
18 
19     group.plot_config(plot_config);
20 
21     let tiny_string = utils::generate_rnd_string(100).unwrap();
22     let short_string = utils::generate_rnd_string(1_000).unwrap();
23     let medium_string = utils::generate_rnd_string(10_000).unwrap();
24     let big_string = utils::generate_rnd_string(100_000).unwrap();
25     let huge_string = utils::generate_rnd_string(1_000_000).unwrap();
26     let massive_string = utils::generate_rnd_string(10_000_000).unwrap();
27 
28     for size in [
29         tiny_string,
30         short_string,
31         medium_string,
32         big_string,
33         huge_string,
34         massive_string,
35     ]
36     .iter()
37     {
38         group.throughput(Throughput::Bytes(size.len() as u64));
39 
40         group.bench_with_input(BenchmarkId::new("request", size.len()), size, |b, i| {
41             b.iter(|| build_request(i.to_string()))
42         });
43         group.bench_with_input(BenchmarkId::new("response", size.len()), size, |b, i| {
44             b.iter(|| build_response(i.to_string()))
45         });
46     }
47     group.finish();
48 }
49