mirror of
https://github.com/chatmail/core.git
synced 2026-04-17 21:46:35 +03:00
49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
use criterion::{criterion_group, criterion_main, Criterion};
|
|
|
|
use deltachat::context::Context;
|
|
use deltachat::stock_str::StockStrings;
|
|
use deltachat::{info, Event, EventType, Events};
|
|
use tempfile::tempdir;
|
|
|
|
async fn send_events_benchmark(context: &Context) {
|
|
let emitter = context.get_event_emitter();
|
|
for _i in 0..1_000_000 {
|
|
info!(context, "interesting event...");
|
|
}
|
|
info!(context, "DONE");
|
|
|
|
loop {
|
|
match emitter.recv().await.unwrap() {
|
|
Event {
|
|
typ: EventType::Info(info),
|
|
..
|
|
} if info.contains("DONE") => {
|
|
break;
|
|
}
|
|
_ => {}
|
|
}
|
|
}
|
|
}
|
|
|
|
fn criterion_benchmark(c: &mut Criterion) {
|
|
let dir = tempdir().unwrap();
|
|
let dbfile = dir.path().join("db.sqlite");
|
|
let id = 100;
|
|
let rt = tokio::runtime::Runtime::new().unwrap();
|
|
|
|
let context = rt.block_on(async {
|
|
Context::new(&dbfile, id, Events::new(), StockStrings::new())
|
|
.await
|
|
.expect("failed to create context")
|
|
});
|
|
let executor = tokio::runtime::Runtime::new().unwrap();
|
|
|
|
c.bench_function("Sending 1000 events", |b| {
|
|
b.to_async(&executor)
|
|
.iter(|| send_events_benchmark(&context))
|
|
});
|
|
}
|
|
|
|
criterion_group!(benches, criterion_benchmark);
|
|
criterion_main!(benches);
|