Add send_events benchmark

This commit is contained in:
Hocuri
2022-05-05 18:49:06 +02:00
committed by Septias
parent c3d99e1016
commit 86fc553294
3 changed files with 47 additions and 2 deletions

View File

@@ -137,6 +137,10 @@ harness = false
name = "get_chatlist"
harness = false
[[bench]]
name = "send_events"
harness = false
[features]
default = ["vendored"]
internals = []

42
benches/send_events.rs Normal file
View File

@@ -0,0 +1,42 @@
use criterion::async_executor::AsyncStdExecutor;
use criterion::{criterion_group, criterion_main, Criterion};
use deltachat::context::Context;
use deltachat::{info, Event, EventType};
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 context =
async_std::task::block_on(async { Context::new(dbfile.into(), id).await.unwrap() });
c.bench_function("Sending 1000 events", |b| {
b.to_async(AsyncStdExecutor)
.iter(|| send_events_benchmark(&context))
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);

View File

@@ -441,14 +441,13 @@ impl Context {
async_std::task::spawn(async move {
// TODO synchronously is prob. better
match context.get_config_int(Config::DebugLogging).await {
Err(e) => eprintln!("Can't get debug logging config: {:#}", e),
Err(_) => {} // Probably the database is simply closed (i.e. encrypted and no passphrase available yet)
Ok(0) => {}
Ok(debug_logging_webxdc) => {
let time = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as i64;
// TODO
let webxdc_instance_id = MsgId::new(debug_logging_webxdc as u32);