From 90e1abd5bf75ba113aba93b35f8d19ebaac76fa7 Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Tue, 17 Feb 2026 17:04:55 -0500 Subject: [PATCH] Preallocate vector for `MultiBuffer::excerpt_ids` (#49381) This saves some time spent reallocating inside `Editor::on_buffer_event` for large multibuffers. Release Notes: - N/A --- crates/multi_buffer/src/multi_buffer.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index 3d65588bceb55e774c936e38ee1997044d3a0576..75399e613074464e750e61ae20f6d84c557b23b3 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -799,6 +799,7 @@ pub struct ExcerptSummary { excerpt_locator: Locator, widest_line_number: u32, text: MBTextSummary, + count: usize, } #[derive(Debug, Clone)] @@ -2046,12 +2047,10 @@ impl MultiBuffer { } pub fn excerpt_ids(&self) -> Vec { - self.snapshot - .borrow() - .excerpts - .iter() - .map(|entry| entry.id) - .collect() + let snapshot = self.snapshot.borrow(); + let mut ids = Vec::with_capacity(snapshot.excerpts.summary().count); + ids.extend(snapshot.excerpts.iter().map(|entry| entry.id)); + ids } pub fn excerpt_containing( @@ -7746,6 +7745,7 @@ impl sum_tree::Item for Excerpt { excerpt_locator: self.locator.clone(), widest_line_number: self.max_buffer_row, text: text.into(), + count: 1, } } } @@ -7840,6 +7840,7 @@ impl sum_tree::ContextLessSummary for ExcerptSummary { self.excerpt_locator = summary.excerpt_locator.clone(); self.text += summary.text; self.widest_line_number = cmp::max(self.widest_line_number, summary.widest_line_number); + self.count += summary.count; } }