From e66a4f6acad98752a11902cb1feaae0586819835 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Mon, 10 Nov 2025 07:15:33 +0800 Subject: [PATCH] perf: some inline magic for Draft This would improve 8-14% CPU for all API --- src-tauri/Cargo.lock | 47 ------------------------------------ src-tauri/Cargo.toml | 4 --- src-tauri/src/utils/draft.rs | 7 ++++++ 3 files changed, 7 insertions(+), 51 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 596ffbfff..b7bf8c381 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -581,21 +572,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link 0.2.1", -] - [[package]] name = "base62" version = "2.2.3" @@ -2826,12 +2802,6 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "gio" version = "0.18.4" @@ -4941,15 +4911,6 @@ dependencies = [ "objc2-security", ] -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -5158,10 +5119,8 @@ version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ - "backtrace", "cfg-if", "libc", - "petgraph", "redox_syscall 0.5.18", "smallvec", "windows-link 0.2.1", @@ -6409,12 +6368,6 @@ dependencies = [ "ordered-multimap", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" version = "2.1.1" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 9f57f1eab..6efd1d19a 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -171,10 +171,6 @@ crate-type = ["staticlib", "cdylib", "rlib"] [dev-dependencies] criterion = { version = "0.7.0", features = ["async_tokio"] } -parking_lot = { version = "0.12.5", features = [ - "hardware-lock-elision", - "deadlock_detection", -] } [lints.clippy] # Core categories - most important for code safety and correctness diff --git a/src-tauri/src/utils/draft.rs b/src-tauri/src/utils/draft.rs index 8eab1f302..07782f4bd 100644 --- a/src-tauri/src/utils/draft.rs +++ b/src-tauri/src/utils/draft.rs @@ -12,12 +12,14 @@ pub struct Draft { } impl Draft { + #[inline] pub fn new(data: T) -> Self { Self { inner: Arc::new(RwLock::new((Arc::new(Box::new(data)), None))), } } /// 以 Arc> 的形式获取当前“已提交(正式)”数据的快照(零拷贝,仅 clone Arc) + #[inline] pub fn data_arc(&self) -> SharedBox { let guard = self.inner.read(); Arc::clone(&guard.0) @@ -25,6 +27,7 @@ impl Draft { /// 获取当前(草稿若存在则返回草稿,否则返回已提交)的快照 /// 这也是零拷贝:只 clone Arc,不 clone T + #[inline] pub fn latest_arc(&self) -> SharedBox { let guard = self.inner.read(); guard.1.clone().unwrap_or_else(|| Arc::clone(&guard.0)) @@ -33,6 +36,7 @@ impl Draft { /// 通过闭包以可变方式编辑草稿(在闭包中我们给出 &mut T) /// - 延迟拷贝:如果只有这一个 Arc 引用,则直接修改,不会克隆 T; /// - 若草稿被其他读者共享,Arc::make_mut 会做一次 T.clone(最小必要拷贝)。 + #[inline] pub fn edit_draft(&self, f: F) -> R where F: FnOnce(&mut T) -> R, @@ -56,6 +60,7 @@ impl Draft { } /// 将草稿提交到已提交位置(替换),并清除草稿 + #[inline] pub fn apply(&self) { let mut guard = self.inner.write(); if let Some(d) = guard.1.take() { @@ -64,6 +69,7 @@ impl Draft { } /// 丢弃草稿(如果存在) + #[inline] pub fn discard(&self) { let mut guard = self.inner.write(); guard.1 = None; @@ -71,6 +77,7 @@ impl Draft { /// 异步地以拥有 Box 的方式修改已提交数据:将克隆一次已提交数据到本地, /// 异步闭包返回新的 Box(替换已提交数据)和业务返回值 R。 + #[inline] pub async fn with_data_modify(&self, f: F) -> Result where T: Send + Sync + 'static,