Avatar for the matrix-org user
matrix-org
matrix-rust-sdk
BlogDocsChangelog

perf: precompute the room notification modes only if push rules have changed

#5621
Comparing
bnjbvr/process-room-notification-changes-only-when-push-rules-changed
(
5ea16b9
) with
main
(
bcabf1b
)
CodSpeed Performance Gauge
0%
Untouched
49

Benchmarks

Passed

Linked chunk writing [memory store][100]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [memory store][100]
CodSpeed Performance Gauge
+4%
365 µs352.1 µs
Linked chunk metadata loader[memory store][10]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk metadata loader[memory store][10]
CodSpeed Performance Gauge
+1%
5.9 µs5.9 µs
Linked chunk metadata loader[sqlite store][10]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk metadata loader[sqlite store][10]
CodSpeed Performance Gauge
+1%
172.9 µs171.2 µs
Room key sharing [memory][163 devices]
benchmarks/benches/crypto_bench.rs::benches::room_key_sharing::Room key sharing::Room key sharing [memory][163 devices]
CodSpeed Performance Gauge
+1%
46.7 ms46.4 ms
Linked chunk writing [none][10]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [none][10]
CodSpeed Performance Gauge
+1%
15.6 µs15.5 µs
Create a timeline with initial events[10000 events]
benchmarks/benches/timeline.rs::room::create_timeline_with_initial_events::Create a timeline::Create a timeline with initial events[10000 events]
CodSpeed Performance Gauge
0%
749.1 ms746.5 ms
Linked chunk lazy loader[sqlite store][10]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk lazy loader[sqlite store][10]
CodSpeed Performance Gauge
0%
425.1 µs423.7 µs
Linked chunk metadata loader[memory store][100]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk metadata loader[memory store][100]
CodSpeed Performance Gauge
0%
21.2 µs21.1 µs
Linked chunk writing [none][100]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [none][100]
CodSpeed Performance Gauge
0%
85.1 µs84.9 µs
Event cache room updates[SQLite][room count: 1]
benchmarks/benches/event_cache.rs::event_cache::handle_room_updates::Event cache room updates::Event cache room updates[SQLite][room count: 1]
CodSpeed Performance Gauge
0%
37 ms37 ms
Linked chunk metadata loader[sqlite store][100]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk metadata loader[sqlite store][100]
CodSpeed Performance Gauge
0%
244.1 µs243.7 µs
Linked chunk lazy loader[memory store][1000]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk lazy loader[memory store][1000]
CodSpeed Performance Gauge
0%
2.4 ms2.4 ms
Linked chunk lazy loader[sqlite store][1000]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk lazy loader[sqlite store][1000]
CodSpeed Performance Gauge
0%
15 ms15 ms
Linked chunk metadata loader[memory store][1000]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk metadata loader[memory store][1000]
CodSpeed Performance Gauge
0%
758.7 µs757.7 µs
Linked chunk writing [memory store][10]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [memory store][10]
CodSpeed Performance Gauge
0%
52.8 µs52.8 µs
Event cache find_event_relations[memory][10 events, edits filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[memory][10 events, edits filter]
CodSpeed Performance Gauge
0%
3.3 ms3.3 ms
Event cache find_event_relations[memory][10 events, #no filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[memory][10 events, #no filter]
CodSpeed Performance Gauge
0%
3.3 ms3.3 ms
Event cache find_event_relations[SQLite][100 events, #no filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[SQLite][100 events, #no filter]
CodSpeed Performance Gauge
0%
8 ms8 ms
Restore session [memory store]
benchmarks/benches/store_bench.rs::benches::restore_session::Client reload::Restore session [memory store]
CodSpeed Performance Gauge
0%
272.1 ms271.9 ms
Linked chunk writing [sqlite store][10]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [sqlite store][10]
CodSpeed Performance Gauge
0%
548.2 µs547.9 µs
Linked chunk writing [none][1000]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [none][1000]
CodSpeed Performance Gauge
0%
794.3 µs794 µs
Event cache room updates[SQLite][room count: 10]
benchmarks/benches/event_cache.rs::event_cache::handle_room_updates::Event cache room updates::Event cache room updates[SQLite][room count: 10]
CodSpeed Performance Gauge
0%
390.5 ms390.4 ms
Event cache find_event_relations[SQLite][1000 events, edits filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[SQLite][1000 events, edits filter]
CodSpeed Performance Gauge
0%
82.8 ms82.8 ms
Event cache find_event_relations[memory][100 events, #no filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[memory][100 events, #no filter]
CodSpeed Performance Gauge
0%
46.8 ms46.8 ms
Devices collecting [SQLite][2003 devices]
benchmarks/benches/crypto_bench.rs::benches::devices_missing_sessions_collecting::Devices missing sessions collecting::Devices collecting [SQLite][2003 devices]
CodSpeed Performance Gauge
0%
113.3 ms113.3 ms
Event cache find_event_relations[memory][1000 events, edits filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[memory][1000 events, edits filter]
CodSpeed Performance Gauge
0%
2.2 s2.2 s
Event cache find_event_relations[memory][1000 events, #no filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[memory][1000 events, #no filter]
CodSpeed Performance Gauge
0%
2.2 s2.2 s
Event cache room updates[SQLite][room count: 100]
benchmarks/benches/event_cache.rs::event_cache::handle_room_updates::Event cache room updates::Event cache room updates[SQLite][room count: 100]
CodSpeed Performance Gauge
0%
4.1 s4.1 s
Linked chunk writing [sqlite store][1000]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [sqlite store][1000]
CodSpeed Performance Gauge
0%
27.3 ms27.4 ms
Linked chunk writing [sqlite store][100]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [sqlite store][100]
CodSpeed Performance Gauge
0%
2.6 ms2.6 ms
Device keys query [memory][153 device and cross signing keys]
benchmarks/benches/crypto_bench.rs::benches::keys_query::Keys querying::Device keys query [memory][153 device and cross signing keys]
CodSpeed Performance Gauge
0%
27.6 ms27.6 ms
Restore session [SQLite][encrypted]
benchmarks/benches/store_bench.rs::benches::restore_session::Client reload::Restore session [SQLite][encrypted]
CodSpeed Performance Gauge
0%
1.4 s1.4 s
Event cache find_event_relations[SQLite][1000 events, #no filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[SQLite][1000 events, #no filter]
CodSpeed Performance Gauge
0%
77.9 ms78 ms
Event cache find_event_relations[memory][100 events, edits filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[memory][100 events, edits filter]
CodSpeed Performance Gauge
0%
46.8 ms46.9 ms
Linked chunk metadata loader[sqlite store][1000]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk metadata loader[sqlite store][1000]
CodSpeed Performance Gauge
0%
1.2 ms1.2 ms
Room key sharing [SQLite][163 devices]
benchmarks/benches/crypto_bench.rs::benches::room_key_sharing::Room key sharing::Room key sharing [SQLite][163 devices]
CodSpeed Performance Gauge
0%
57.7 ms57.7 ms
Event cache find_event_relations[SQLite][100 events, edits filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[SQLite][100 events, edits filter]
CodSpeed Performance Gauge
0%
8.5 ms8.5 ms
Event cache room updates[memory][room count: 10]
benchmarks/benches/event_cache.rs::event_cache::handle_room_updates::Event cache room updates::Event cache room updates[memory][room count: 10]
CodSpeed Performance Gauge
0%
141.3 ms141.6 ms
Event cache find_event_relations[SQLite][10 events, edits filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[SQLite][10 events, edits filter]
CodSpeed Performance Gauge
0%
1.2 ms1.2 ms
Device keys query [SQLite][153 device and cross signing keys]
benchmarks/benches/crypto_bench.rs::benches::keys_query::Keys querying::Device keys query [SQLite][153 device and cross signing keys]
CodSpeed Performance Gauge
0%
39.9 ms40.1 ms
Event cache room updates[memory][room count: 100]
benchmarks/benches/event_cache.rs::event_cache::handle_room_updates::Event cache room updates::Event cache room updates[memory][room count: 100]
CodSpeed Performance Gauge
0%
1.4 s1.4 s
Devices collecting [memory][2003 devices]
benchmarks/benches/crypto_bench.rs::benches::devices_missing_sessions_collecting::Devices missing sessions collecting::Devices collecting [memory][2003 devices]
CodSpeed Performance Gauge
0%
10.7 ms10.7 ms
Linked chunk lazy loader[sqlite store][100]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk lazy loader[sqlite store][100]
CodSpeed Performance Gauge
0%
1.7 ms1.7 ms
Linked chunk lazy loader[memory store][100]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk lazy loader[memory store][100]
CodSpeed Performance Gauge
0%
188 µs188.8 µs
Event cache room updates[memory][room count: 1]
benchmarks/benches/event_cache.rs::event_cache::handle_room_updates::Event cache room updates::Event cache room updates[memory][room count: 1]
CodSpeed Performance Gauge
-1%
14 ms14.1 ms
Linked chunk lazy loader[memory store][10]
benchmarks/benches/linked_chunk.rs::event_cache::reading::Linked chunk reading::Linked chunk lazy loader[memory store][10]
CodSpeed Performance Gauge
-2%
33.3 µs33.8 µs
Linked chunk writing [memory store][1000]
benchmarks/benches/linked_chunk.rs::event_cache::writing::Linked chunk writing::Linked chunk writing [memory store][1000]
CodSpeed Performance Gauge
-3%
3.5 ms3.6 ms
Event cache find_event_relations[SQLite][10 events, #no filter]
benchmarks/benches/event_cache.rs::event_cache::find_event_relations::Event cache room updates::Event cache find_event_relations[SQLite][10 events, #no filter]
CodSpeed Performance Gauge
-3%
1.1 ms1.2 ms
Restore session [SQLite][clear]
benchmarks/benches/store_bench.rs::benches::restore_session::Client reload::Restore session [SQLite][clear]
CodSpeed Performance Gauge
-8%
752.3 ms820.2 ms

Commits

Click on a commit to change the comparison range
Base
main
bcabf1b
+0.04%
perf: precompute the room notification modes if and only if push rules have changed The room notification modes will only change when the push rules have changed; otherwise, recomputing them is a no-op, and only wastes time. Here's a distribution of the worst processing times under this method, as measured in multiverse with my personal account running (fresh, i.e. after an initial response) for a few minutes: Before: 0.001358279s 0.019668889s 0.030104444s 0.030376296s 0.048609819s 0.049683619s 0.054289813s 0.063690030s After: 0.000000385s 0.000000387s 0.000000410s 0.000000430s 0.000000438s 0.000000478s 0.000000487s 0.000000568s 0.010011267s The new distribution makes sense: the push rules event comes only once, in the initial response, so they're processed only once. Then, there's no need to process it ever again (in my session I've never changed the processing times), so it's almost instantaneous the subsequent times.
e20bdcd
10 days ago
by bnjbvr
-0.25%
fixup! perf: precompute the room notification modes if and only if push rules have changed
5ea16b9
10 days ago
by bnjbvr
© 2025 CodSpeed Technology
Home Terms Privacy Docs