From d1f2f4a1ece43326b722abfa26af788f0e0a2ce3 Mon Sep 17 00:00:00 2001 From: Nathan Goldbaum Date: Tue, 17 Feb 2026 15:29:51 -0700 Subject: [PATCH] Add critical section benchmarks --- pyo3-benches/Cargo.toml | 4 +++ .../benches/bench_critical_sections.rs | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 pyo3-benches/benches/bench_critical_sections.rs diff --git a/pyo3-benches/Cargo.toml b/pyo3-benches/Cargo.toml index 0c7c4a7a1c4..4a3024819f9 100644 --- a/pyo3-benches/Cargo.toml +++ b/pyo3-benches/Cargo.toml @@ -38,6 +38,10 @@ harness = false name = "bench_comparisons" harness = false +[[bench]] +name = "bench_critical_sections" +harness = false + [[bench]] name = "bench_err" harness = false diff --git a/pyo3-benches/benches/bench_critical_sections.rs b/pyo3-benches/benches/bench_critical_sections.rs new file mode 100644 index 00000000000..616672b615e --- /dev/null +++ b/pyo3-benches/benches/bench_critical_sections.rs @@ -0,0 +1,32 @@ +use codspeed_criterion_compat::{criterion_group, criterion_main, Bencher, Criterion}; + +use pyo3::prelude::*; +use pyo3::sync::critical_section::{with_critical_section, with_critical_section2}; +use pyo3::types::PyList; + +fn create_cs(b: &mut Bencher<'_>) { + Python::attach(|py| { + let lis = PyList::new(py, 0..3).unwrap(); + b.iter(|| { + with_critical_section(&lis, || {}); + }) + }); +} + +fn create_cs2(b: &mut Bencher<'_>) { + Python::attach(|py| { + let lis1 = PyList::new(py, 0..3).unwrap(); + let lis2 = PyList::new(py, 4..6).unwrap(); + b.iter(|| { + with_critical_section2(&lis1, &lis2, || {}); + }) + }); +} + +fn criterion_benchmark(c: &mut Criterion) { + c.bench_function("critical_section_creation", create_cs); + c.bench_function("critical_section_creation2", create_cs2); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches);