editor: More perf work (#49465)

Seems that `SmallVec::clone` is pretty expensive in a generic case, and
specialising it improves the performance quite a bit!

Release Notes:

- Improved performance of different building blocks within the
MultiBuffer.

---------

Co-authored-by: Lukas Wirth <lukas@zed.dev>
This commit is contained in:
Jakub KonkaandLukas Wirth authored and GitHub committed 2026-02-18 14:20:30 +01:00
1 parent c41aeb17f7
commit 846b4191c9
5 files changed
+60 -49

No files matched your search

+17 -20
View File
@@ -914,28 +914,25 @@ impl BufferDiffInner<language::BufferSnapshot> {
buffer: &'a text::BufferSnapshot,
secondary: Option<&'a Self>,
) -> impl 'a + Iterator<Item = DiffHunk> {
let mut cursor = self.hunks.filter::<_, DiffHunkSummary>(buffer, filter);
let anchor_iter = iter::from_fn(move || {
cursor.next();
cursor.item()
})
.flat_map(move |hunk| {
[
(
&hunk.buffer_range.start,
let anchor_iter = self
.hunks
.filter::<_, DiffHunkSummary>(buffer, filter)
.flat_map(move |hunk| {
[
(
hunk.buffer_range.start,
hunk.diff_base_byte_range.start,
hunk,
&hunk.buffer_range.start,
(
hunk.buffer_range.start,
hunk.diff_base_byte_range.start,
hunk,
),
),
),
(
&hunk.buffer_range.end,
(hunk.buffer_range.end, hunk.diff_base_byte_range.end, hunk),
),
]
});
(
&hunk.buffer_range.end,
(hunk.buffer_range.end, hunk.diff_base_byte_range.end, hunk),
),
]
});
let mut pending_hunks_cursor = self.pending_hunks.cursor::<DiffHunkSummary>(buffer);
pending_hunks_cursor.next();