@@ -59,6 +59,31 @@ fn guest_call_benchmark(c: &mut Criterion) {
5959 } ) ;
6060 } ) ;
6161
62+ // Benchmarks a guest function call calling into the host.
63+ // The benchmark does **not** include the time to reset the sandbox memory after the call.
64+ group. bench_function ( "guest_call_with_call_to_host_function" , |b| {
65+ let mut uninitialized_sandbox = create_uninit_sandbox ( ) ;
66+
67+ // Define a host function that adds two integers and register it.
68+ uninitialized_sandbox
69+ . register ( "HostAdd" , |a : i32 , b : i32 | Ok ( a + b) )
70+ . unwrap ( ) ;
71+
72+ let multiuse_sandbox: MultiUseSandbox =
73+ uninitialized_sandbox. evolve ( Noop :: default ( ) ) . unwrap ( ) ;
74+ let mut call_ctx = multiuse_sandbox. new_call_context ( ) ;
75+
76+ b. iter ( || call_ctx. call :: < i32 > ( "Add" , ( 1_i32 , 41_i32 ) ) . unwrap ( ) ) ;
77+ } ) ;
78+
79+ group. finish ( ) ;
80+ }
81+
82+ fn guest_call_benchmark_large_param ( c : & mut Criterion ) {
83+ let mut group = c. benchmark_group ( "guest_functions_with_large_parameters" ) ;
84+ #[ cfg( target_os = "windows" ) ]
85+ group. sample_size ( 10 ) ; // This benchark is very slow on Windows, so we reduce the sample size to avoid long test runs.
86+
6287 // This benchmark includes time to first clone a vector and string, so it is not a "pure' benchmark of the guest call, but it's still useful
6388 group. bench_function ( "guest_call_with_large_parameters" , |b| {
6489 const SIZE : usize = 50 * 1024 * 1024 ; // 50 MB
@@ -86,23 +111,6 @@ fn guest_call_benchmark(c: &mut Criterion) {
86111 } ) ;
87112 } ) ;
88113
89- // Benchmarks a guest function call calling into the host.
90- // The benchmark does **not** include the time to reset the sandbox memory after the call.
91- group. bench_function ( "guest_call_with_call_to_host_function" , |b| {
92- let mut uninitialized_sandbox = create_uninit_sandbox ( ) ;
93-
94- // Define a host function that adds two integers and register it.
95- uninitialized_sandbox
96- . register ( "HostAdd" , |a : i32 , b : i32 | Ok ( a + b) )
97- . unwrap ( ) ;
98-
99- let multiuse_sandbox: MultiUseSandbox =
100- uninitialized_sandbox. evolve ( Noop :: default ( ) ) . unwrap ( ) ;
101- let mut call_ctx = multiuse_sandbox. new_call_context ( ) ;
102-
103- b. iter ( || call_ctx. call :: < i32 > ( "Add" , ( 1_i32 , 41_i32 ) ) . unwrap ( ) ) ;
104- } ) ;
105-
106114 group. finish ( ) ;
107115}
108116
@@ -148,6 +156,6 @@ fn sandbox_benchmark(c: &mut Criterion) {
148156criterion_group ! {
149157 name = benches;
150158 config = Criterion :: default ( ) ;
151- targets = guest_call_benchmark, sandbox_benchmark
159+ targets = guest_call_benchmark, sandbox_benchmark, guest_call_benchmark_large_param
152160}
153161criterion_main ! ( benches) ;
0 commit comments