1use std::{
2 path::Path,
3 sync::{Arc, atomic::AtomicUsize},
4};
5
6use fs::RealFs;
7use settings::WorktreeId;
8use worktree::Worktree;
9
10fn main() {
11 let Some(worktree_root_path) = std::env::args().nth(1) else {
12 println!(
13 "Missing path to worktree root\nUsage: bench_background_scan PATH_TO_WORKTREE_ROOT"
14 );
15 return;
16 };
17 let app = gpui_platform::headless();
18
19 app.run(|cx| {
20 settings::init(cx);
21 let fs = Arc::new(RealFs::new(None, cx.background_executor().clone()));
22
23 cx.spawn(async move |cx| {
24 let worktree = Worktree::local(
25 Path::new(&worktree_root_path),
26 true,
27 fs,
28 Arc::new(AtomicUsize::new(0)),
29 true,
30 WorktreeId::from_proto(0),
31 cx,
32 )
33 .await
34 .expect("Worktree initialization to succeed");
35 let did_finish_scan =
36 worktree.update(cx, |this, _| this.as_local().unwrap().scan_complete());
37 let start = std::time::Instant::now();
38 did_finish_scan.await;
39 let elapsed = start.elapsed();
40 let (files, directories) =
41 worktree.read_with(cx, |this, _| (this.file_count(), this.dir_count()));
42 println!(
43 "{:?} for {directories} directories and {files} files",
44 elapsed
45 );
46 cx.update(|cx| {
47 cx.quit();
48 })
49 })
50 .detach();
51 })
52}