Skip to content

Commit f37feba

Browse files
committed
Use criterion for cargo bench locally, use iai in CI
1 parent 6cfc2d7 commit f37feba

File tree

3 files changed

+90
-2
lines changed

3 files changed

+90
-2
lines changed

.github/workflows/benchmark.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ jobs:
5353
- name: Revert when benches do not compile on main
5454
run: cargo check --benches --no-default-features || git checkout main -- benches/my_benchmark.rs
5555
- name: Run benchmarks for main branch
56-
run: cargo bench --no-default-features
56+
run: cargo bench --no-default-features --feature iai
5757
- name: Checkout PR branch
5858
run: git checkout -
5959
- name: Run bench against baseline
60-
run: cargo bench --no-default-features | sed '0,/^test result:/d' | tee bench.txt
60+
run: cargo bench --no-default-features --feature iai | sed '0,/^test result:/d' | tee bench.txt
6161

6262
# for testing
6363
# - name: create mock results

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ vecmath = "1.0"
3535

3636
[dev-dependencies]
3737
alloc_counter = "0.0.4"
38+
criterion = "0.5.1"
3839
env_logger = "0.10"
3940
iai = "0.1.1"
4041
rand = "0.8"
@@ -62,3 +63,4 @@ cpal = ["dep:cpal"]
6263
cubeb = ["dep:cubeb"]
6364
cpal-jack = ["cpal", "cpal/jack"]
6465
cpal-asio = ["cpal", "cpal/asio"]
66+
iai = []

benches/my_benchmark.rs

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
#[cfg(feature = "iai")]
12
use iai::black_box;
23

4+
#[cfg(not(feature = "iai"))]
5+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
6+
37
use web_audio_api::context::BaseAudioContext;
48
use web_audio_api::context::OfflineAudioContext;
59
use web_audio_api::node::{AudioNode, AudioScheduledSourceNode, PanningModelType};
@@ -217,6 +221,7 @@ pub fn bench_hrtf_panners() {
217221
assert_eq!(ctx.start_rendering_sync().length(), SAMPLES);
218222
}
219223

224+
#[cfg(feature = "iai")]
220225
iai::main!(
221226
bench_ctor,
222227
bench_sine,
@@ -231,3 +236,84 @@ iai::main!(
231236
bench_analyser_node,
232237
bench_hrtf_panners,
233238
);
239+
240+
#[cfg(not(feature = "iai"))]
241+
fn criterion_ctor(c: &mut Criterion) {
242+
c.bench_function("bench_ctor", |b| b.iter(|| bench_ctor()));
243+
}
244+
#[cfg(not(feature = "iai"))]
245+
fn criterion_sine(c: &mut Criterion) {
246+
c.bench_function("bench_sine", |b| b.iter(|| bench_sine()));
247+
}
248+
#[cfg(not(feature = "iai"))]
249+
fn criterion_sine_gain(c: &mut Criterion) {
250+
c.bench_function("bench_sine_gain", |b| b.iter(|| bench_sine_gain()));
251+
}
252+
#[cfg(not(feature = "iai"))]
253+
fn criterion_sine_gain_delay(c: &mut Criterion) {
254+
c.bench_function("bench_sine_gain_delay", |b| {
255+
b.iter(|| bench_sine_gain_delay())
256+
});
257+
}
258+
#[cfg(not(feature = "iai"))]
259+
fn criterion_buffer_src(c: &mut Criterion) {
260+
c.bench_function("bench_buffer_src", |b| b.iter(|| bench_buffer_src()));
261+
}
262+
#[cfg(not(feature = "iai"))]
263+
fn criterion_buffer_src_delay(c: &mut Criterion) {
264+
c.bench_function("bench_buffer_src_delay", |b| {
265+
b.iter(|| bench_buffer_src_delay())
266+
});
267+
}
268+
#[cfg(not(feature = "iai"))]
269+
fn criterion_buffer_src_iir(c: &mut Criterion) {
270+
c.bench_function("bench_buffer_src_iir", |b| {
271+
b.iter(|| bench_buffer_src_iir())
272+
});
273+
}
274+
#[cfg(not(feature = "iai"))]
275+
fn criterion_buffer_src_biquad(c: &mut Criterion) {
276+
c.bench_function("bench_buffer_src_biquad", |b| {
277+
b.iter(|| bench_buffer_src_biquad())
278+
});
279+
}
280+
#[cfg(not(feature = "iai"))]
281+
fn criterion_stereo_positional(c: &mut Criterion) {
282+
c.bench_function("bench_stereo_positional", |b| {
283+
b.iter(|| bench_stereo_positional())
284+
});
285+
}
286+
#[cfg(not(feature = "iai"))]
287+
fn criterion_stereo_panning_automation(c: &mut Criterion) {
288+
c.bench_function("bench_stereo_panning_automation", |b| {
289+
b.iter(|| bench_stereo_panning_automation())
290+
});
291+
}
292+
#[cfg(not(feature = "iai"))]
293+
fn criterion_analyser_node(c: &mut Criterion) {
294+
c.bench_function("bench_analyser_node", |b| b.iter(|| bench_analyser_node()));
295+
}
296+
#[cfg(not(feature = "iai"))]
297+
fn criterion_hrtf_panners(c: &mut Criterion) {
298+
c.bench_function("bench_hrtf_panners", |b| b.iter(|| bench_hrtf_panners()));
299+
}
300+
301+
#[cfg(not(feature = "iai"))]
302+
criterion_group!(
303+
benches,
304+
criterion_ctor,
305+
criterion_sine,
306+
criterion_sine_gain,
307+
criterion_sine_gain_delay,
308+
criterion_buffer_src,
309+
criterion_buffer_src_delay,
310+
criterion_buffer_src_iir,
311+
criterion_buffer_src_biquad,
312+
criterion_stereo_positional,
313+
criterion_stereo_panning_automation,
314+
criterion_analyser_node,
315+
criterion_hrtf_panners
316+
);
317+
318+
#[cfg(not(feature = "iai"))]
319+
criterion_main!(benches);

0 commit comments

Comments
 (0)