ruwuma/crates/ruma-events/benches/event_deserialize.rs
Jonas Platte 31331f3165
Bring back ruma-events
Co-authored-by: Kévin Commaille <zecakeh@tedomum.fr>
2023-08-28 10:23:54 +02:00

90 lines
2.6 KiB
Rust

// `cargo bench` works, but if you use `cargo bench -- --save-baseline <name>`
// or pass any other args to it, it fails with the error
// `cargo bench unknown option --save-baseline`.
// To pass args to criterion, use this form
// `cargo bench --features criterion --bench <name of the bench> -- --save-baseline <name>`.
#![allow(unused_imports, dead_code)]
use criterion::{criterion_group, criterion_main, Criterion};
use ruma_common::serde::Raw;
use ruma_events::{
room::power_levels::RoomPowerLevelsEventContent, AnyStateEvent, AnyTimelineEvent,
OriginalStateEvent,
};
use serde_json::json;
fn power_levels() -> serde_json::Value {
json!({
"content": {
"ban": 50,
"events": {
"m.room.avatar": 50,
"m.room.canonical_alias": 50,
"m.room.history_visibility": 100,
"m.room.name": 50,
"m.room.power_levels": 100
},
"events_default": 0,
"invite": 0,
"kick": 50,
"redact": 50,
"state_default": 50,
"users": {
"@example:localhost": 100
},
"users_default": 0
},
"event_id": "$15139375512JaHAW:localhost",
"origin_server_ts": 45,
"sender": "@example:localhost",
"room_id": "!room:localhost",
"state_key": "",
"type": "m.room.power_levels",
"unsigned": {
"age": 45
}
})
}
fn deserialize_any_room_event(c: &mut Criterion) {
let json_data = power_levels();
c.bench_function("deserialize to `AnyTimelineEvent`", |b| {
b.iter(|| {
let _ = serde_json::from_value::<AnyTimelineEvent>(json_data.clone()).unwrap();
})
});
}
fn deserialize_any_state_event(c: &mut Criterion) {
let json_data = power_levels();
c.bench_function("deserialize to `AnyStateEvent`", |b| {
b.iter(|| {
let _ = serde_json::from_value::<AnyStateEvent>(json_data.clone()).unwrap();
})
});
}
fn deserialize_specific_event(c: &mut Criterion) {
let json_data = power_levels();
c.bench_function("deserialize to `OriginalStateEvent<PowerLevelsEventContent>`", |b| {
b.iter(|| {
let _ = serde_json::from_value::<OriginalStateEvent<RoomPowerLevelsEventContent>>(
json_data.clone(),
)
.unwrap();
})
});
}
criterion_group!(
benches,
deserialize_any_room_event,
deserialize_any_state_event,
deserialize_specific_event
);
criterion_main!(benches);