45 root_dir: PathBuf, |
45 root_dir: PathBuf, |
46 ignore_files: Vec<PathBuf>, |
46 ignore_files: Vec<PathBuf>, |
47 options: StatusOptions, |
47 options: StatusOptions, |
48 ) -> Result<(DirstateStatus<'dirstate>, Vec<PatternFileWarning>), StatusError> |
48 ) -> Result<(DirstateStatus<'dirstate>, Vec<PatternFileWarning>), StatusError> |
49 { |
49 { |
50 // Force the global rayon threadpool to not exceed 16 concurrent threads. |
50 // Also cap for a Python caller of this function, but don't complain if |
51 // This is a stop-gap measure until we figure out why using more than 16 |
51 // the global threadpool has already been set since this code path is also |
52 // threads makes `status` slower for each additional thread. |
52 // being used by `rhg`, which calls this early. |
53 // We use `ok()` in case the global threadpool has already been |
53 let _ = crate::utils::cap_default_rayon_threads(); |
54 // instantiated in `rhg` or some other caller. |
|
55 // TODO find the underlying cause and fix it, then remove this. |
|
56 rayon::ThreadPoolBuilder::new() |
|
57 .num_threads(16.min(rayon::current_num_threads())) |
|
58 .build_global() |
|
59 .ok(); |
|
60 |
54 |
61 let (ignore_fn, warnings, patterns_changed): (IgnoreFnType, _, _) = |
55 let (ignore_fn, warnings, patterns_changed): (IgnoreFnType, _, _) = |
62 if options.list_ignored || options.list_unknown { |
56 if options.list_ignored || options.list_unknown { |
63 let (ignore_fn, warnings, changed) = match dmap.dirstate_version { |
57 let (ignore_fn, warnings, changed) = match dmap.dirstate_version { |
64 DirstateVersion::V1 => { |
58 DirstateVersion::V1 => { |