zed/crates/project_panel/benches/sorting.rs
Piotr Osiewicz a49b2d5bf8
project panel: Make updates asynchronous (#38881)
Closes #ISSUE

Release Notes:

- project panel: Revamped how project panel entries are refreshed, which
should lead to a significantly smoother experience when working in large
projects.

---------

Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
2025-10-02 11:40:09 +05:30

54 lines
1.7 KiB
Rust

use criterion::{Criterion, criterion_group, criterion_main};
use project::{Entry, EntryKind, GitEntry, ProjectEntryId};
use project_panel::par_sort_worktree_entries;
use std::sync::Arc;
use util::rel_path::RelPath;
fn load_linux_repo_snapshot() -> Vec<GitEntry> {
let file = std::fs::read_to_string(
"/Users/hiro/Projects/zed/crates/project_panel/benches/linux_repo_snapshot.txt",
)
.expect("Failed to read file");
file.lines()
.filter_map(|line| {
let kind = match line.chars().next() {
Some('f') => EntryKind::File,
Some('d') => EntryKind::Dir,
_ => return None,
};
let entry = Entry {
kind,
path: Arc::from(RelPath::unix(&(line.trim_end()[2..])).unwrap()),
id: ProjectEntryId::default(),
size: 0,
inode: 0,
mtime: None,
canonical_path: None,
is_ignored: false,
is_always_included: false,
is_external: false,
is_private: false,
char_bag: Default::default(),
is_fifo: false,
};
Some(GitEntry {
entry,
git_summary: Default::default(),
})
})
.collect()
}
fn criterion_benchmark(c: &mut Criterion) {
let snapshot = load_linux_repo_snapshot();
c.bench_function("Sort linux worktree snapshot", |b| {
b.iter_batched(
|| snapshot.clone(),
|mut snapshot| par_sort_worktree_entries(&mut snapshot),
criterion::BatchSize::LargeInput,
);
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);