History

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. ---------

Jakub Konka committed 9 months ago

Commit 1957a431 parent dc41f715 files · +60 −49Browse files

Showing the changes to crates/buffer_diff/src/buffer_diff.rs (1 of 5 files). Show all

Unified · Split

crates/buffer_diff/src/buffer_diff.rs+17−20
@@ -914,28 +914,25 @@ impl BufferDiffInner<language::BufferSnapshot> { · 913 unmodified lines
914914 buffer: &'a text::BufferSnapshot,
915915 secondary: Option<&'a Self>,
916916 ) -> impl 'a + Iterator<Item = DiffHunk> {
917− let mut cursor = self.hunks.filter::<_, DiffHunkSummary>(buffer, filter);
918−
919− let anchor_iter = iter::from_fn(move || {
920− cursor.next();
921− cursor.item()
922− })
923− .flat_map(move |hunk| {
924− [
925− (
926− &hunk.buffer_range.start,
917+ let anchor_iter = self
918+ .hunks
919+ .filter::<_, DiffHunkSummary>(buffer, filter)
920+ .flat_map(move |hunk| {
921+ [
927922 (
928− hunk.buffer_range.start,
929− hunk.diff_base_byte_range.start,
930− hunk,
923+ &hunk.buffer_range.start,
924+ (
925+ hunk.buffer_range.start,
926+ hunk.diff_base_byte_range.start,
927+ hunk,
928+ ),
931929 ),
932− ),
933− (
934− &hunk.buffer_range.end,
935− (hunk.buffer_range.end, hunk.diff_base_byte_range.end, hunk),
936− ),
937− ]
938− });
930+ (
931+ &hunk.buffer_range.end,
932+ (hunk.buffer_range.end, hunk.diff_base_byte_range.end, hunk),
933+ ),
934+ ]
935+ });
939936
940937 let mut pending_hunks_cursor = self.pending_hunks.cursor::<DiffHunkSummary>(buffer);
941938 pending_hunks_cursor.next();

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t