diff --git a/Cargo.toml b/Cargo.toml index af1552593..9c70dc729 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -124,6 +124,10 @@ harness = false name = "get_chat_msgs" harness = false +[[bench]] +name = "get_chatlist" +harness = false + [features] default = ["vendored"] internals = [] diff --git a/benches/get_chat_msgs.rs b/benches/get_chat_msgs.rs index 6816094d0..680ac1275 100644 --- a/benches/get_chat_msgs.rs +++ b/benches/get_chat_msgs.rs @@ -27,7 +27,7 @@ fn criterion_benchmark(c: &mut Criterion) { (0..len).map(|i| chatlist.get_chat_id(i).unwrap()).collect() }); - c.bench_function("Load all chats", |b| { + c.bench_function("chat::get_chat_msgs (load messages from 10 chats)", |b| { b.to_async(AsyncStdExecutor) .iter(|| get_chat_msgs_benchmark(black_box(&path.as_ref()), black_box(&chats))) }); diff --git a/benches/get_chatlist.rs b/benches/get_chatlist.rs new file mode 100644 index 000000000..d7c1d2064 --- /dev/null +++ b/benches/get_chatlist.rs @@ -0,0 +1,25 @@ +use criterion::async_executor::AsyncStdExecutor; +use criterion::{black_box, criterion_group, criterion_main, Criterion}; + +use deltachat::chatlist::Chatlist; +use deltachat::context::Context; + +async fn get_chat_list_benchmark(context: &Context) { + Chatlist::try_load(&context, 0, None, None).await.unwrap(); +} + +fn criterion_benchmark(c: &mut Criterion) { + // To enable this benchmark, set `DELTACHAT_BENCHMARK_DATABASE` to some large database with many + // messages, such as your primary account. + if let Ok(path) = std::env::var("DELTACHAT_BENCHMARK_DATABASE") { + let context = + async_std::task::block_on(async { Context::new(path.into(), 100).await.unwrap() }); + c.bench_function("chatlist:try_load (Get Chatlist)", |b| { + b.to_async(AsyncStdExecutor) + .iter(|| get_chat_list_benchmark(black_box(&context))) + }); + } +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches);