use std::{ path::Path, sync::{Arc, atomic::AtomicUsize}, }; use fs::RealFs; use settings::WorktreeId; use worktree::Worktree; fn main() { let Some(worktree_root_path) = std::env::args().nth(1) else { println!( "Missing path to worktree root\nUsage: bench_background_scan PATH_TO_WORKTREE_ROOT" ); return; }; let app = gpui_platform::headless(); app.run(|cx| { settings::init(cx); let fs = Arc::new(RealFs::new(None, cx.background_executor().clone())); cx.spawn(async move |cx| { let worktree = Worktree::local( Path::new(&worktree_root_path), true, fs, Arc::new(AtomicUsize::new(0)), true, WorktreeId::from_proto(0), cx, ) .await .expect("Worktree initialization to succeed"); let did_finish_scan = worktree.update(cx, |this, _| this.as_local().unwrap().scan_complete()); let start = std::time::Instant::now(); did_finish_scan.await; let elapsed = start.elapsed(); let (files, directories) = worktree.read_with(cx, |this, _| (this.file_count(), this.dir_count())); println!( "{:?} for {directories} directories and {files} files", elapsed ); cx.update(|cx| { cx.quit(); }) }) .detach(); }) }