From 457d9453762acf6a8a872728dc09ffe305612cb6 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 16 Apr 2021 16:16:46 +0200 Subject: [PATCH] Avoid unnecessary cloning of items when calling `SumTree::edit` --- zed/src/operation_queue.rs | 6 +----- zed/src/sum_tree/mod.rs | 4 ++-- zed/src/worktree.rs | 9 ++++----- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/zed/src/operation_queue.rs b/zed/src/operation_queue.rs index baad04b0bfa1137ce9a8a2b0eb120ae2da2df53b..0603d5b9ff4976856a4dd3c8b424026a8427d95b 100644 --- a/zed/src/operation_queue.rs +++ b/zed/src/operation_queue.rs @@ -35,11 +35,7 @@ impl OperationQueue { pub fn insert(&mut self, mut ops: Vec) { ops.sort_by_key(|op| op.timestamp()); ops.dedup_by_key(|op| op.timestamp()); - let mut edits = ops - .into_iter() - .map(|op| Edit::Insert(op)) - .collect::>(); - self.0.edit(&mut edits); + self.0.edit(ops.into_iter().map(Edit::Insert).collect()); } pub fn drain(&mut self) -> Self { diff --git a/zed/src/sum_tree/mod.rs b/zed/src/sum_tree/mod.rs index a78de88f804c7c097e7abb9a61ef7fbba38e08df..413f0e7ddc04ea271dd072bc9869b80212d35a16 100644 --- a/zed/src/sum_tree/mod.rs +++ b/zed/src/sum_tree/mod.rs @@ -332,7 +332,7 @@ impl SumTree { }; } - pub fn edit(&mut self, edits: &mut [Edit]) -> Vec { + pub fn edit(&mut self, mut edits: Vec>) -> Vec { if edits.is_empty() { return Vec::new(); } @@ -369,7 +369,7 @@ impl SumTree { match edit { Edit::Insert(item) => { - buffered_items.push(item.clone()); + buffered_items.push(item); } Edit::Remove(_) => {} } diff --git a/zed/src/worktree.rs b/zed/src/worktree.rs index e26469083f2de92cb5fa54f16008f77f32929ebb..be2cb88fbc176b8546e7a9d87e7cf651b8777560 100644 --- a/zed/src/worktree.rs +++ b/zed/src/worktree.rs @@ -752,14 +752,13 @@ impl BackgroundScanner { } let mut entries = self.entries.lock(); - let prev_entries = entries.edit(&mut edits); + let prev_entries = entries.edit(edits); Self::remove_stale_children(&mut *entries, prev_entries, new_parents); } fn remove_entries(&self, inodes: impl IntoIterator) { let mut entries = self.entries.lock(); - let prev_entries = - entries.edit(&mut inodes.into_iter().map(Edit::Remove).collect::>()); + let prev_entries = entries.edit(inodes.into_iter().map(Edit::Remove).collect()); Self::remove_stale_children(&mut *entries, prev_entries, HashMap::new()); } @@ -791,7 +790,7 @@ impl BackgroundScanner { } } - let mut parent_edits = new_parent_entries + let parent_edits = new_parent_entries .into_iter() .map(|(_, (mut parent_entry, new_children))| { if let Entry::Dir { children, .. } = &mut parent_entry { @@ -802,7 +801,7 @@ impl BackgroundScanner { Edit::Insert(parent_entry) }) .collect::>(); - tree.edit(&mut parent_edits); + tree.edit(parent_edits); } }