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:
1 parent
c41aeb17f7
commit
846b4191c9
5 files changed
+60
-49
No files matched your search
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user