about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKirill Bulatov <mail4score@gmail.com>2021-04-14 19:11:17 +0300
committerKirill Bulatov <mail4score@gmail.com>2021-04-14 19:11:17 +0300
commitaf8a6049a50809b0f375ec66d1636a5703c83568 (patch)
tree10d0173b20dd96e0884d677181139e651b511f3f
parent678af4106504913ea04672e29f452861d97fae18 (diff)
downloadrust-af8a6049a50809b0f375ec66d1636a5703c83568.tar.gz
rust-af8a6049a50809b0f375ec66d1636a5703c83568.zip
Profile trait solving for all invocations
-rw-r--r--crates/hir_ty/src/autoderef.rs5
-rw-r--r--crates/hir_ty/src/db.rs19
-rw-r--r--crates/ide_db/src/apply_change.rs2
3 files changed, 20 insertions, 6 deletions
diff --git a/crates/hir_ty/src/autoderef.rs b/crates/hir_ty/src/autoderef.rs
index 6d2cf461986..2c07494a978 100644
--- a/crates/hir_ty/src/autoderef.rs
+++ b/crates/hir_ty/src/autoderef.rs
@@ -85,10 +85,7 @@ fn deref_by_trait(
             environment: ty.environment.clone(),
         },
     };
-    if {
-        let _p = profile::span("db.trait_solve");
-        db.trait_solve(krate, implements_goal).is_none()
-    } {
+    if db.trait_solve(krate, implements_goal).is_none() {
         return None;
     }
 
diff --git a/crates/hir_ty/src/db.rs b/crates/hir_ty/src/db.rs
index 1690926ad38..cf67d42662e 100644
--- a/crates/hir_ty/src/db.rs
+++ b/crates/hir_ty/src/db.rs
@@ -128,13 +128,21 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
         id: chalk_db::AssociatedTyValueId,
     ) -> Arc<chalk_db::AssociatedTyValue>;
 
-    #[salsa::invoke(crate::traits::trait_solve_query)]
+    #[salsa::invoke(trait_solve_wait)]
+    #[salsa::transparent]
     fn trait_solve(
         &self,
         krate: CrateId,
         goal: crate::Canonical<crate::InEnvironment<crate::DomainGoal>>,
     ) -> Option<crate::Solution>;
 
+    #[salsa::invoke(crate::traits::trait_solve_query)]
+    fn trait_solve_query(
+        &self,
+        krate: CrateId,
+        goal: crate::Canonical<crate::InEnvironment<crate::DomainGoal>>,
+    ) -> Option<crate::Solution>;
+
     #[salsa::invoke(chalk_db::program_clauses_for_chalk_env_query)]
     fn program_clauses_for_chalk_env(
         &self,
@@ -156,6 +164,15 @@ fn infer_wait(db: &dyn HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult>
     db.infer_query(def)
 }
 
+fn trait_solve_wait(
+    db: &dyn HirDatabase,
+    krate: CrateId,
+    goal: crate::Canonical<crate::InEnvironment<crate::DomainGoal>>,
+) -> Option<crate::Solution> {
+    let _p = profile::span("trait_solve::wait");
+    db.trait_solve_query(krate, goal)
+}
+
 #[test]
 fn hir_database_is_object_safe() {
     fn _assert_object_safe(_: &dyn HirDatabase) {}
diff --git a/crates/ide_db/src/apply_change.rs b/crates/ide_db/src/apply_change.rs
index 6c67425d755..eac5ef6b95b 100644
--- a/crates/ide_db/src/apply_change.rs
+++ b/crates/ide_db/src/apply_change.rs
@@ -201,7 +201,7 @@ impl RootDatabase {
             hir::db::InternImplTraitIdQuery
             hir::db::InternClosureQuery
             hir::db::AssociatedTyValueQuery
-            hir::db::TraitSolveQuery
+            hir::db::TraitSolveQueryQuery
 
             // SymbolsDatabase
             crate::symbol_index::FileSymbolsQuery