main.rs

 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}