about summary refs log tree commit diff
path: root/src/librustc_interface
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2020-01-09 03:48:00 +0100
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2020-01-09 22:38:40 +0100
commitb650e91cf40500b60475c17ff289e1db761d7836 (patch)
treeaf0c1909e8ecd78ff1728032bd2cd34c225702de /src/librustc_interface
parent59eb49d0da83fff01ae3c63f2e282b953e5f88df (diff)
downloadrust-b650e91cf40500b60475c17ff289e1db761d7836.tar.gz
rust-b650e91cf40500b60475c17ff289e1db761d7836.zip
Label unmarked time
Diffstat (limited to 'src/librustc_interface')
-rw-r--r--src/librustc_interface/interface.rs14
-rw-r--r--src/librustc_interface/passes.rs74
-rw-r--r--src/librustc_interface/queries.rs15
3 files changed, 66 insertions, 37 deletions
diff --git a/src/librustc_interface/interface.rs b/src/librustc_interface/interface.rs
index c4449945dd1..d00875f6fee 100644
--- a/src/librustc_interface/interface.rs
+++ b/src/librustc_interface/interface.rs
@@ -177,11 +177,17 @@ pub fn run_compiler_in_existing_thread_pool<R>(
         override_queries: config.override_queries,
     };
 
-    let _sess_abort_error = OnDrop(|| {
-        compiler.sess.diagnostic().print_error_count(registry);
-    });
+    let r = {
+        let _sess_abort_error = OnDrop(|| {
+            compiler.sess.diagnostic().print_error_count(registry);
+        });
 
-    f(&compiler)
+        f(&compiler)
+    };
+
+    let prof = compiler.sess.prof.clone();
+    prof.generic_activity("drop_compiler").run(move || drop(compiler));
+    r
 }
 
 pub fn run_compiler<R: Send>(mut config: Config, f: impl FnOnce(&Compiler) -> R + Send) -> R {
diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs
index a7e174f0455..76ceeabdb72 100644
--- a/src/librustc_interface/passes.rs
+++ b/src/librustc_interface/passes.rs
@@ -163,19 +163,22 @@ pub fn register_plugins<'a>(
         )
     });
 
-    let (krate, features) = rustc_expand::config::features(
-        krate,
-        &sess.parse_sess,
-        sess.edition(),
-        &sess.opts.debugging_opts.allow_features,
-    );
+    let (krate, features) = sess.time("compute_features", || {
+        rustc_expand::config::features(
+            krate,
+            &sess.parse_sess,
+            sess.edition(),
+            &sess.opts.debugging_opts.allow_features,
+        )
+    });
     // these need to be set "early" so that expansion sees `quote` if enabled.
     sess.init_features(features);
 
     let crate_types = util::collect_crate_types(sess, &krate.attrs);
     sess.crate_types.set(crate_types);
 
-    let disambiguator = util::compute_crate_disambiguator(sess);
+    let disambiguator =
+        sess.time("compute_crate_disambiguator", || util::compute_crate_disambiguator(sess));
     sess.crate_disambiguator.set(disambiguator);
     rustc_incremental::prepare_session_directory(sess, &crate_name, disambiguator);
 
@@ -611,6 +614,8 @@ pub fn prepare_outputs(
     boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
     crate_name: &str,
 ) -> Result<OutputFilenames> {
+    let _timer = sess.timer("prepare_outputs");
+
     // FIXME: rustdoc passes &[] instead of &krate.attrs here
     let outputs = util::build_output_filenames(
         &compiler.input,
@@ -721,33 +726,40 @@ pub fn create_global_ctxt<'tcx>(
 
     let query_result_on_disk_cache = rustc_incremental::load_query_result_cache(sess);
 
-    let codegen_backend = compiler.codegen_backend();
-    let mut local_providers = ty::query::Providers::default();
-    default_provide(&mut local_providers);
-    codegen_backend.provide(&mut local_providers);
+    let codegen_backend = sess.time("load_codegen_backend", || compiler.codegen_backend());
 
-    let mut extern_providers = local_providers;
-    default_provide_extern(&mut extern_providers);
-    codegen_backend.provide_extern(&mut extern_providers);
+    let (local_providers, extern_providers) = sess.time("load_codegen_backend", || {
+        let mut local_providers = ty::query::Providers::default();
+        default_provide(&mut local_providers);
+        codegen_backend.provide(&mut local_providers);
 
-    if let Some(callback) = compiler.override_queries {
-        callback(sess, &mut local_providers, &mut extern_providers);
-    }
+        let mut extern_providers = local_providers;
+        default_provide_extern(&mut extern_providers);
+        codegen_backend.provide_extern(&mut extern_providers);
 
-    let gcx = global_ctxt.init_locking(|| {
-        TyCtxt::create_global_ctxt(
-            sess,
-            lint_store,
-            local_providers,
-            extern_providers,
-            &all_arenas,
-            arena,
-            resolver_outputs,
-            hir_map,
-            query_result_on_disk_cache,
-            &crate_name,
-            &outputs,
-        )
+        if let Some(callback) = compiler.override_queries {
+            callback(sess, &mut local_providers, &mut extern_providers);
+        }
+
+        (local_providers, extern_providers)
+    });
+
+    let gcx = sess.time("setup_global_ctxt", || {
+        global_ctxt.init_locking(|| {
+            TyCtxt::create_global_ctxt(
+                sess,
+                lint_store,
+                local_providers,
+                extern_providers,
+                &all_arenas,
+                arena,
+                resolver_outputs,
+                hir_map,
+                query_result_on_disk_cache,
+                &crate_name,
+                &outputs,
+            )
+        })
     });
 
     // Do some initialization of the DepGraph that can only be done with the tcx available.
diff --git a/src/librustc_interface/queries.rs b/src/librustc_interface/queries.rs
index 6033569d765..3ec043624ac 100644
--- a/src/librustc_interface/queries.rs
+++ b/src/librustc_interface/queries.rs
@@ -158,6 +158,7 @@ impl<'tcx> Queries<'tcx> {
             Ok(match self.compiler.crate_name {
                 Some(ref crate_name) => crate_name.clone(),
                 None => {
+                    let _timer = self.session().timer("crate_name");
                     let parse_result = self.parse()?;
                     let krate = parse_result.peek();
                     rustc_codegen_utils::link::find_crate_name(
@@ -176,6 +177,7 @@ impl<'tcx> Queries<'tcx> {
         self.expansion.compute(|| {
             let crate_name = self.crate_name()?.peek().clone();
             let (krate, lint_store) = self.register_plugins()?.take();
+            let _timer = self.session().timer("configure_and_expand");
             passes::configure_and_expand(
                 self.session().clone(),
                 lint_store.clone(),
@@ -256,6 +258,7 @@ impl<'tcx> Queries<'tcx> {
             let lint_store = self.expansion()?.peek().2.clone();
             let hir = self.lower_to_hir()?.peek();
             let (ref hir_forest, ref resolver_outputs) = &*hir;
+            let _timer = self.session().timer("create_global_ctxt");
             Ok(passes::create_global_ctxt(
                 self.compiler,
                 lint_store,
@@ -312,14 +315,19 @@ pub struct Linker {
 
 impl Linker {
     pub fn link(self) -> Result<()> {
-        self.codegen_backend
+        let r = self
+            .codegen_backend
             .join_codegen_and_link(
                 self.ongoing_codegen,
                 &self.sess,
                 &self.dep_graph,
                 &self.prepare_outputs,
             )
-            .map_err(|_| ErrorReported)
+            .map_err(|_| ErrorReported);
+        let prof = self.sess.prof.clone();
+        let dep_graph = self.dep_graph;
+        prof.generic_activity("drop_dep_graph").run(move || drop(dep_graph));
+        r
     }
 }
 
@@ -328,6 +336,7 @@ impl Compiler {
     where
         F: for<'tcx> FnOnce(&'tcx Queries<'tcx>) -> T,
     {
+        let mut _timer = None;
         let queries = Queries::new(&self);
         let ret = f(&queries);
 
@@ -337,6 +346,8 @@ impl Compiler {
             }
         }
 
+        _timer = Some(self.session().timer("free_global_ctxt"));
+
         ret
     }