feat(gpodder_sqlite): added benchmarking support

This commit is contained in:
Jef Roosens 2025-03-19 21:52:17 +01:00
parent 73988d6264
commit d329a0e61c
Signed by: Jef Roosens
GPG key ID: 02D4C0997E74717B
4 changed files with 335 additions and 1 deletions

View file

@ -3,6 +3,10 @@ name = "gpodder_sqlite"
version = "0.1.0"
edition = "2021"
[[bench]]
name = "devices"
harness = false
[dependencies]
gpodder = { path = "../gpodder" }
diesel = { version = "2.2.7", features = ["r2d2", "sqlite", "returning_clauses_for_sqlite_3_35"] }
@ -11,3 +15,6 @@ tracing = "0.1.41"
chrono = { version = "0.4.39", features = ["serde"] }
rand = "0.8.5"
libsqlite3-sys = { version = "0.31.0", features = ["bundled"] }
[dev-dependencies]
criterion = "0.5.1"

View file

@ -0,0 +1,16 @@
use gpodder::{AuthStore, User};
use gpodder_sqlite::SqliteRepository;
pub fn setup() -> (SqliteRepository, Vec<User>) {
let store = SqliteRepository::in_memory().unwrap();
let mut users = Vec::new();
for i in 0..1000 {
let username = format!("test{}", i + 1);
let password_hash = format!("dummyhash{}", i + 1);
users.push(store.insert_user(&username, &password_hash).unwrap());
}
(store, users)
}

View file

@ -0,0 +1,28 @@
mod common;
use criterion::{criterion_group, criterion_main, Criterion};
use gpodder::{DevicePatch, DeviceRepository};
pub fn bench_devices_for_user(c: &mut Criterion) {
let (store, users) = common::setup();
for i in 0..100000 {
store
.update_device_info(
&users[i % users.len()],
&format!("device id {i}"),
DevicePatch {
caption: Some(format!("device caption {i}")),
r#type: None,
},
)
.unwrap();
}
c.bench_function("devices for user", |b| {
b.iter(|| store.devices_for_user(&users[0]).unwrap())
});
}
criterion_group!(devices, bench_devices_for_user);
criterion_main!(devices);