]> git.lizzy.rs Git - rust.git/commitdiff
cleanup + detect num cpus
authorJake Heinz <jh@discordapp.com>
Fri, 14 Jan 2022 09:48:59 +0000 (09:48 +0000)
committerJake Heinz <jh@discordapp.com>
Fri, 14 Jan 2022 09:48:59 +0000 (09:48 +0000)
Cargo.lock
crates/ide/src/lib.rs
crates/ide/src/prime_caches.rs
crates/rust-analyzer/Cargo.toml
crates/rust-analyzer/src/cli/load_cargo.rs
crates/rust-analyzer/src/main_loop.rs

index 915da5d2837dd1523527b69af545bedebafabf4f..264876855304f22e190855282c600b8bbca5eddc 100644 (file)
@@ -1013,9 +1013,9 @@ dependencies = [
 
 [[package]]
 name = "num_cpus"
-version = "1.13.0"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
 dependencies = [
  "hermit-abi",
  "libc",
@@ -1349,6 +1349,7 @@ dependencies = [
  "lsp-types",
  "mbe",
  "mimalloc",
+ "num_cpus",
  "oorandom",
  "parking_lot",
  "proc_macro_api",
index 5c872fe9c71cefb2050c2a83dcb242ee311fc087..4028b0bc7257053c929d46f1a67eaf45fbcd554e 100644 (file)
@@ -87,7 +87,7 @@ macro_rules! eprintln {
     moniker::{MonikerKind, MonikerResult, PackageInformation},
     move_item::Direction,
     navigation_target::NavigationTarget,
-    prime_caches::{ParallelPrimeCachesProgress, PrimeCachesProgress},
+    prime_caches::ParallelPrimeCachesProgress,
     references::ReferenceSearchResult,
     rename::RenameError,
     runnables::{Runnable, RunnableKind, TestId},
@@ -244,13 +244,6 @@ pub fn status(&self, file_id: Option<FileId>) -> Cancellable<String> {
         self.with_db(|db| status::status(&*db, file_id))
     }
 
-    pub fn prime_caches<F>(&self, cb: F) -> Cancellable<()>
-    where
-        F: Fn(PrimeCachesProgress) + Sync + std::panic::UnwindSafe,
-    {
-        self.with_db(move |db| prime_caches::prime_caches(db, &cb))
-    }
-
     pub fn parallel_prime_caches<F>(&self, num_worker_threads: u8, cb: F) -> Cancellable<()>
     where
         F: Fn(ParallelPrimeCachesProgress) + Sync + std::panic::UnwindSafe,
index 3998e721d1394ff191589942a895d6afc9c0f606..b3413c0326608e0215872afed102cdf7f41a9d05 100644 (file)
 
 use crate::RootDatabase;
 
-/// We started indexing a crate.
-#[derive(Debug)]
-pub struct PrimeCachesProgress {
-    pub on_crate: String,
-    pub n_done: usize,
-    pub n_total: usize,
-}
-
-pub(crate) fn prime_caches(db: &RootDatabase, cb: &(dyn Fn(PrimeCachesProgress) + Sync)) {
-    let _p = profile::span("prime_caches");
-    let graph = db.crate_graph();
-    let to_prime = compute_crates_to_prime(db, &graph);
-
-    let n_total = to_prime.len();
-    for (n_done, &crate_id) in to_prime.iter().enumerate() {
-        let crate_name = graph[crate_id].display_name.as_deref().unwrap_or_default().to_string();
-
-        cb(PrimeCachesProgress { on_crate: crate_name, n_done, n_total });
-        // This also computes the DefMap
-        db.import_map(crate_id);
-    }
-}
-
 /// We're indexing many crates.
 #[derive(Debug)]
 pub struct ParallelPrimeCachesProgress {
index 0ab866a707ebe758d21831ed5e8a3774d8d208c5..014001397de4264826353ec8feec60406408a1cb 100644 (file)
@@ -31,6 +31,7 @@ serde = { version = "1.0.106", features = ["derive"] }
 serde_json = { version = "1.0.48", features = ["preserve_order"] }
 threadpool = "1.7.1"
 rayon = "1.5"
+num_cpus = "1.13.1"
 mimalloc = { version = "0.1.19", default-features = false, optional = true }
 lsp-server = "0.5.1"
 tracing = "0.1"
index 19ce86e3ffad3983919d5a4f89a323c4b48ffc0b..490aef50f3e70c2f675e006b8498bec448a5cae7 100644 (file)
@@ -88,7 +88,7 @@ pub fn load_workspace(
         load_crate_graph(crate_graph, project_folders.source_root_config, &mut vfs, &receiver);
 
     if load_config.prefill_caches {
-        host.analysis().prime_caches(|_| {})?;
+        host.analysis().parallel_prime_caches(1, |_| {})?;
     }
     Ok((host, vfs, proc_macro_client))
 }
index c0736ede09024aa41b817c868bb9cbeabb45ace6..3d17ee45137045af853b018bb72d8305348b9800 100644 (file)
@@ -509,10 +509,13 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
                 let analysis = self.snapshot().analysis;
                 move |sender| {
                     sender.send(Task::PrimeCaches(PrimeCachesProgress::Begin)).unwrap();
-                    let res = analysis.parallel_prime_caches(32, |progress| {
-                        let report = PrimeCachesProgress::Report(progress);
-                        sender.send(Task::PrimeCaches(report)).unwrap();
-                    });
+                    let res = analysis.parallel_prime_caches(
+                        num_cpus::get_physical().try_into().unwrap_or(u8::MAX),
+                        |progress| {
+                            let report = PrimeCachesProgress::Report(progress);
+                            sender.send(Task::PrimeCaches(report)).unwrap();
+                        },
+                    );
                     sender
                         .send(Task::PrimeCaches(PrimeCachesProgress::End {
                             cancelled: res.is_err(),