diff --git a/Cargo.lock b/Cargo.lock index b97df7ae..4fae0d2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,6 +41,19 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.4", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.4" @@ -363,12 +376,6 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d809780667f4410e7c41b07f52439b94d2bdf8528eeedc287fa38d3b7f95d82" -[[package]] -name = "bit-vec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" - [[package]] name = "bitflags" version = "2.10.0" @@ -421,17 +428,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "bloomfilter" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c541c70a910b485670304fd420f0eab8f7bde68439db6a8d98819c3d2774d7e2" -dependencies = [ - "bit-vec", - "getrandom 0.2.16", - "siphasher", -] - [[package]] name = "blurhash" version = "0.2.3" @@ -649,16 +645,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "count-min-sketch" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fef0a447ef2e9e6bd57e379f88702c58c4a4253ba82fb175bd7db012192311a" -dependencies = [ - "rand 0.8.5", - "siphasher", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -1176,6 +1162,7 @@ dependencies = [ "oo7", "pulldown-cmark", "qrcode", + "quick_cache", "rand 0.9.2", "regex", "rmp-serde", @@ -1195,7 +1182,6 @@ dependencies = [ "tracing-subscriber", "url", "webp", - "wtinylfu", "zeroize", ] @@ -3808,6 +3794,18 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d68782463e408eb1e668cf6152704bd856c78c5b6417adaee3203d8f4c1fc9ec" +[[package]] +name = "quick_cache" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ada44a88ef953a3294f6eb55d2007ba44646015e18613d2f213016379203ef3" +dependencies = [ + "ahash", + "equivalent", + "hashbrown 0.16.1", + "parking_lot", +] + [[package]] name = "quote" version = "1.0.43" @@ -5747,17 +5745,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "wtinylfu" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60467db864b7ccbac14ff59595c4e24945243508683f49a4e21eaf747399544f" -dependencies = [ - "bloomfilter", - "count-min-sketch", - "lru", -] - [[package]] name = "x25519-dalek" version = "2.0.1" diff --git a/Cargo.toml b/Cargo.toml index 7d18d947..cf9b30dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,6 +40,7 @@ mime_guess = "2" numeric-sort = "0.1" pulldown-cmark = "0.13" qrcode = { version = "0.14", default-features = false } +quick_cache = "0.6" rand = "0.9" regex = "1" rmp-serde = "1" @@ -57,7 +58,6 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } url = "2" webp = { version = "0.3", default-features = false } -wtinylfu = "0.2" zeroize = "1" # gtk-rs project and dependents. These usually need to be updated together. diff --git a/src/session/remote/cache.rs b/src/session/remote/cache.rs index ff4d71a5..668c3758 100644 --- a/src/session/remote/cache.rs +++ b/src/session/remote/cache.rs @@ -1,7 +1,7 @@ use std::{cell::RefCell, fmt, rc::Rc}; +use quick_cache::unsync::Cache; use ruma::{OwnedRoomOrAliasId, OwnedUserId, RoomId}; -use wtinylfu::WTinyLfuCache; use super::{RemoteRoom, RemoteUser}; use crate::{session::Session, utils::matrix::MatrixRoomIdUri}; @@ -9,9 +9,9 @@ use crate::{session::Session, utils::matrix::MatrixRoomIdUri}; /// The data of the [`RemoteCache`]. struct RemoteCacheData { /// Remote rooms. - rooms: RefCell>, + rooms: RefCell>, /// Remote users. - users: RefCell>, + users: RefCell>, } /// An API to query remote data and cache it. @@ -27,8 +27,8 @@ impl RemoteCache { Self { session, data: RemoteCacheData { - rooms: WTinyLfuCache::new(30, 10).into(), - users: WTinyLfuCache::new(30, 10).into(), + rooms: Cache::new(30).into(), + users: Cache::new(30).into(), } .into(), } @@ -78,7 +78,7 @@ impl RemoteCache { // We did not find it, create the room. let id = uri.id.clone(); let room = RemoteRoom::new(&self.session, uri); - rooms.push(id, room.clone()); + rooms.insert(id, room.clone()); room } @@ -95,7 +95,7 @@ impl RemoteCache { // We did not find it, create the user. let user = RemoteUser::new(&self.session, user_id.clone()); - users.push(user_id, user.clone()); + users.insert(user_id, user.clone()); user }