Skip to content

Commit b650e91

Browse files
committed
Label unmarked time
1 parent 59eb49d commit b650e91

File tree

9 files changed

+117
-59
lines changed

9 files changed

+117
-59
lines changed

src/librustc_codegen_ssa/back/link.rs

+29-20
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(
5353
crate_name: &str,
5454
target_cpu: &str,
5555
) {
56+
let _timer = sess.timer("link_binary");
5657
let output_metadata = sess.opts.output_types.contains_key(&OutputType::Metadata);
5758
for &crate_type in sess.crate_types.borrow().iter() {
5859
// Ignore executable crates if we have -Z no-codegen, as they will error.
@@ -71,9 +72,11 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(
7172
);
7273
}
7374

74-
for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
75-
check_file_is_writeable(obj, sess);
76-
}
75+
sess.time("link_binary_check_files_are_writeable", || {
76+
for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
77+
check_file_is_writeable(obj, sess);
78+
}
79+
});
7780

7881
let tmpdir = TempFileBuilder::new()
7982
.prefix("rustc")
@@ -84,6 +87,7 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(
8487
let out_filename = out_filename(sess, crate_type, outputs, crate_name);
8588
match crate_type {
8689
config::CrateType::Rlib => {
90+
let _timer = sess.timer("link_rlib");
8791
link_rlib::<B>(
8892
sess,
8993
codegen_results,
@@ -118,29 +122,34 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(
118122
}
119123

120124
// Remove the temporary object file and metadata if we aren't saving temps
121-
if !sess.opts.cg.save_temps {
122-
if sess.opts.output_types.should_codegen() && !preserve_objects_for_their_debuginfo(sess) {
123-
for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
124-
remove(sess, obj);
125+
sess.time("link_binary_remove_temps", || {
126+
if !sess.opts.cg.save_temps {
127+
if sess.opts.output_types.should_codegen()
128+
&& !preserve_objects_for_their_debuginfo(sess)
129+
{
130+
for obj in codegen_results.modules.iter().filter_map(|m| m.object.as_ref()) {
131+
remove(sess, obj);
132+
}
125133
}
126-
}
127-
for obj in codegen_results.modules.iter().filter_map(|m| m.bytecode_compressed.as_ref()) {
128-
remove(sess, obj);
129-
}
130-
if let Some(ref metadata_module) = codegen_results.metadata_module {
131-
if let Some(ref obj) = metadata_module.object {
134+
for obj in codegen_results.modules.iter().filter_map(|m| m.bytecode_compressed.as_ref())
135+
{
132136
remove(sess, obj);
133137
}
134-
}
135-
if let Some(ref allocator_module) = codegen_results.allocator_module {
136-
if let Some(ref obj) = allocator_module.object {
137-
remove(sess, obj);
138+
if let Some(ref metadata_module) = codegen_results.metadata_module {
139+
if let Some(ref obj) = metadata_module.object {
140+
remove(sess, obj);
141+
}
138142
}
139-
if let Some(ref bc) = allocator_module.bytecode_compressed {
140-
remove(sess, bc);
143+
if let Some(ref allocator_module) = codegen_results.allocator_module {
144+
if let Some(ref obj) = allocator_module.object {
145+
remove(sess, obj);
146+
}
147+
if let Some(ref bc) = allocator_module.bytecode_compressed {
148+
remove(sess, bc);
149+
}
141150
}
142151
}
143-
}
152+
});
144153
}
145154

146155
// The third parameter is for env vars, used on windows to set up the

src/librustc_codegen_ssa/back/write.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,8 @@ fn copy_all_cgu_workproducts_to_incr_comp_cache_dir(
479479
return work_products;
480480
}
481481

482+
let _timer = sess.timer("incr_comp_copy_cgu_workproducts");
483+
482484
for module in compiled_modules.modules.iter().filter(|m| m.kind == ModuleKind::Regular) {
483485
let mut files = vec![];
484486

@@ -1714,8 +1716,11 @@ pub struct OngoingCodegen<B: ExtraBackendMethods> {
17141716

17151717
impl<B: ExtraBackendMethods> OngoingCodegen<B> {
17161718
pub fn join(self, sess: &Session) -> (CodegenResults, FxHashMap<WorkProductId, WorkProduct>) {
1719+
let _timer = sess.timer("finish_ongoing_codegen");
1720+
17171721
self.shared_emitter_main.check(sess, true);
1718-
let compiled_modules = match self.future.join() {
1722+
let future = self.future;
1723+
let compiled_modules = sess.time("join_worker_thread", || match future.join() {
17191724
Ok(Ok(compiled_modules)) => compiled_modules,
17201725
Ok(Err(())) => {
17211726
sess.abort_if_errors();
@@ -1724,7 +1729,7 @@ impl<B: ExtraBackendMethods> OngoingCodegen<B> {
17241729
Err(_) => {
17251730
bug!("panic during codegen/LLVM phase");
17261731
}
1727-
};
1732+
});
17281733

17291734
sess.cgu_reuse_tracker.check_expected_reuse(sess.diagnostic());
17301735

src/librustc_data_structures/profiling.rs

+6
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,12 @@ impl<'a> TimingGuard<'a> {
347347
pub fn none() -> TimingGuard<'a> {
348348
TimingGuard(None)
349349
}
350+
351+
#[inline(always)]
352+
pub fn run<R>(self, f: impl FnOnce() -> R) -> R {
353+
let _timer = self;
354+
f()
355+
}
350356
}
351357

352358
#[must_use]

src/librustc_driver/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ pub fn run_compiler(
389389
})?;
390390
} else {
391391
// Drop AST after creating GlobalCtxt to free memory
392+
let _timer = sess.prof.generic_activity("drop_ast");
392393
mem::drop(queries.expansion()?.take());
393394
}
394395

@@ -408,11 +409,13 @@ pub fn run_compiler(
408409
sess.code_stats.print_type_sizes();
409410
}
410411

412+
let _timer = sess.timer("query_linker");
411413
let linker = queries.linker()?;
412414
Ok(Some(linker))
413415
})?;
414416

415417
if let Some(linker) = linker {
418+
let _timer = sess.timer("link");
416419
linker.link()?
417420
}
418421

src/librustc_incremental/persist/fs.rs

+4
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ pub fn prepare_session_directory(
190190
return;
191191
}
192192

193+
let _timer = sess.timer("incr_comp_prepare_session_directory");
194+
193195
debug!("prepare_session_directory");
194196

195197
// {incr-comp-dir}/{crate-name-and-disambiguator}
@@ -306,6 +308,8 @@ pub fn finalize_session_directory(sess: &Session, svh: Svh) {
306308
return;
307309
}
308310

311+
let _timer = sess.timer("incr_comp_finalize_session_directory");
312+
309313
let incr_comp_session_dir: PathBuf = sess.incr_comp_session_dir().clone();
310314

311315
if sess.has_errors_or_delayed_span_bugs() {

src/librustc_incremental/persist/load.rs

+2
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ pub fn load_dep_graph(sess: &Session) -> DepGraphFuture {
102102
return MaybeAsync::Sync(LoadResult::Ok { data: Default::default() });
103103
}
104104

105+
let _timer = sess.prof.generic_activity("incr_comp_prepare_load_dep_graph");
106+
105107
// Calling `sess.incr_comp_session_dir()` will panic if `sess.opts.incremental.is_none()`.
106108
// Fortunately, we just checked that this isn't the case.
107109
let path = dep_graph_path_from(&sess.incr_comp_session_dir());

src/librustc_interface/interface.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,17 @@ pub fn run_compiler_in_existing_thread_pool<R>(
177177
override_queries: config.override_queries,
178178
};
179179

180-
let _sess_abort_error = OnDrop(|| {
181-
compiler.sess.diagnostic().print_error_count(registry);
182-
});
180+
let r = {
181+
let _sess_abort_error = OnDrop(|| {
182+
compiler.sess.diagnostic().print_error_count(registry);
183+
});
183184

184-
f(&compiler)
185+
f(&compiler)
186+
};
187+
188+
let prof = compiler.sess.prof.clone();
189+
prof.generic_activity("drop_compiler").run(move || drop(compiler));
190+
r
185191
}
186192

187193
pub fn run_compiler<R: Send>(mut config: Config, f: impl FnOnce(&Compiler) -> R + Send) -> R {

src/librustc_interface/passes.rs

+43-31
Original file line numberDiff line numberDiff line change
@@ -163,19 +163,22 @@ pub fn register_plugins<'a>(
163163
)
164164
});
165165

166-
let (krate, features) = rustc_expand::config::features(
167-
krate,
168-
&sess.parse_sess,
169-
sess.edition(),
170-
&sess.opts.debugging_opts.allow_features,
171-
);
166+
let (krate, features) = sess.time("compute_features", || {
167+
rustc_expand::config::features(
168+
krate,
169+
&sess.parse_sess,
170+
sess.edition(),
171+
&sess.opts.debugging_opts.allow_features,
172+
)
173+
});
172174
// these need to be set "early" so that expansion sees `quote` if enabled.
173175
sess.init_features(features);
174176

175177
let crate_types = util::collect_crate_types(sess, &krate.attrs);
176178
sess.crate_types.set(crate_types);
177179

178-
let disambiguator = util::compute_crate_disambiguator(sess);
180+
let disambiguator =
181+
sess.time("compute_crate_disambiguator", || util::compute_crate_disambiguator(sess));
179182
sess.crate_disambiguator.set(disambiguator);
180183
rustc_incremental::prepare_session_directory(sess, &crate_name, disambiguator);
181184

@@ -611,6 +614,8 @@ pub fn prepare_outputs(
611614
boxed_resolver: &Steal<Rc<RefCell<BoxedResolver>>>,
612615
crate_name: &str,
613616
) -> Result<OutputFilenames> {
617+
let _timer = sess.timer("prepare_outputs");
618+
614619
// FIXME: rustdoc passes &[] instead of &krate.attrs here
615620
let outputs = util::build_output_filenames(
616621
&compiler.input,
@@ -721,33 +726,40 @@ pub fn create_global_ctxt<'tcx>(
721726

722727
let query_result_on_disk_cache = rustc_incremental::load_query_result_cache(sess);
723728

724-
let codegen_backend = compiler.codegen_backend();
725-
let mut local_providers = ty::query::Providers::default();
726-
default_provide(&mut local_providers);
727-
codegen_backend.provide(&mut local_providers);
729+
let codegen_backend = sess.time("load_codegen_backend", || compiler.codegen_backend());
728730

729-
let mut extern_providers = local_providers;
730-
default_provide_extern(&mut extern_providers);
731-
codegen_backend.provide_extern(&mut extern_providers);
731+
let (local_providers, extern_providers) = sess.time("load_codegen_backend", || {
732+
let mut local_providers = ty::query::Providers::default();
733+
default_provide(&mut local_providers);
734+
codegen_backend.provide(&mut local_providers);
732735

733-
if let Some(callback) = compiler.override_queries {
734-
callback(sess, &mut local_providers, &mut extern_providers);
735-
}
736+
let mut extern_providers = local_providers;
737+
default_provide_extern(&mut extern_providers);
738+
codegen_backend.provide_extern(&mut extern_providers);
736739

737-
let gcx = global_ctxt.init_locking(|| {
738-
TyCtxt::create_global_ctxt(
739-
sess,
740-
lint_store,
741-
local_providers,
742-
extern_providers,
743-
&all_arenas,
744-
arena,
745-
resolver_outputs,
746-
hir_map,
747-
query_result_on_disk_cache,
748-
&crate_name,
749-
&outputs,
750-
)
740+
if let Some(callback) = compiler.override_queries {
741+
callback(sess, &mut local_providers, &mut extern_providers);
742+
}
743+
744+
(local_providers, extern_providers)
745+
});
746+
747+
let gcx = sess.time("setup_global_ctxt", || {
748+
global_ctxt.init_locking(|| {
749+
TyCtxt::create_global_ctxt(
750+
sess,
751+
lint_store,
752+
local_providers,
753+
extern_providers,
754+
&all_arenas,
755+
arena,
756+
resolver_outputs,
757+
hir_map,
758+
query_result_on_disk_cache,
759+
&crate_name,
760+
&outputs,
761+
)
762+
})
751763
});
752764

753765
// Do some initialization of the DepGraph that can only be done with the tcx available.

src/librustc_interface/queries.rs

+13-2
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ impl<'tcx> Queries<'tcx> {
158158
Ok(match self.compiler.crate_name {
159159
Some(ref crate_name) => crate_name.clone(),
160160
None => {
161+
let _timer = self.session().timer("crate_name");
161162
let parse_result = self.parse()?;
162163
let krate = parse_result.peek();
163164
rustc_codegen_utils::link::find_crate_name(
@@ -176,6 +177,7 @@ impl<'tcx> Queries<'tcx> {
176177
self.expansion.compute(|| {
177178
let crate_name = self.crate_name()?.peek().clone();
178179
let (krate, lint_store) = self.register_plugins()?.take();
180+
let _timer = self.session().timer("configure_and_expand");
179181
passes::configure_and_expand(
180182
self.session().clone(),
181183
lint_store.clone(),
@@ -256,6 +258,7 @@ impl<'tcx> Queries<'tcx> {
256258
let lint_store = self.expansion()?.peek().2.clone();
257259
let hir = self.lower_to_hir()?.peek();
258260
let (ref hir_forest, ref resolver_outputs) = &*hir;
261+
let _timer = self.session().timer("create_global_ctxt");
259262
Ok(passes::create_global_ctxt(
260263
self.compiler,
261264
lint_store,
@@ -312,14 +315,19 @@ pub struct Linker {
312315

313316
impl Linker {
314317
pub fn link(self) -> Result<()> {
315-
self.codegen_backend
318+
let r = self
319+
.codegen_backend
316320
.join_codegen_and_link(
317321
self.ongoing_codegen,
318322
&self.sess,
319323
&self.dep_graph,
320324
&self.prepare_outputs,
321325
)
322-
.map_err(|_| ErrorReported)
326+
.map_err(|_| ErrorReported);
327+
let prof = self.sess.prof.clone();
328+
let dep_graph = self.dep_graph;
329+
prof.generic_activity("drop_dep_graph").run(move || drop(dep_graph));
330+
r
323331
}
324332
}
325333

@@ -328,6 +336,7 @@ impl Compiler {
328336
where
329337
F: for<'tcx> FnOnce(&'tcx Queries<'tcx>) -> T,
330338
{
339+
let mut _timer = None;
331340
let queries = Queries::new(&self);
332341
let ret = f(&queries);
333342

@@ -337,6 +346,8 @@ impl Compiler {
337346
}
338347
}
339348

349+
_timer = Some(self.session().timer("free_global_ctxt"));
350+
340351
ret
341352
}
342353

0 commit comments

Comments
 (0)