Skip to content

Commit

Permalink
Merge #8333
Browse files Browse the repository at this point in the history
8333: analysis-stats: allow skipping type inference r=jonas-schievink a=jonas-schievink

This removes "noise" from memory profiles since it avoids lowering
function bodies and types

bors r+

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
  • Loading branch information
bors[bot] and jonas-schievink committed Apr 4, 2021
2 parents 4be4d29 + ab49f76 commit 19e09a4
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 22 deletions.
3 changes: 3 additions & 0 deletions crates/rust-analyzer/src/bin/flags.rs
Expand Up @@ -71,6 +71,8 @@ xflags::xflags! {
optional --load-output-dirs
/// Use proc-macro-srv for proc-macro expanding.
optional --with-proc-macro
/// Only resolve names, don't run type inference.
optional --skip-inference
}

cmd diagnostics
Expand Down Expand Up @@ -158,6 +160,7 @@ pub struct AnalysisStats {
pub no_sysroot: bool,
pub load_output_dirs: bool,
pub with_proc_macro: bool,
pub skip_inference: bool,
}

#[derive(Debug)]
Expand Down
1 change: 1 addition & 0 deletions crates/rust-analyzer/src/bin/main.rs
Expand Up @@ -78,6 +78,7 @@ fn try_main() -> Result<()> {
path: cmd.path,
load_output_dirs: cmd.load_output_dirs,
with_proc_macro: cmd.with_proc_macro,
skip_inference: cmd.skip_inference,
}
.run(verbosity)?,

Expand Down
60 changes: 38 additions & 22 deletions crates/rust-analyzer/src/cli/analysis_stats.rs
Expand Up @@ -9,10 +9,11 @@ use std::{

use hir::{
db::{AstDatabase, DefDatabase, HirDatabase},
AssocItem, Crate, HasSource, HirDisplay, ModuleDef,
AssocItem, Crate, Function, HasSource, HirDisplay, ModuleDef,
};
use hir_def::FunctionId;
use hir_ty::TypeWalk;
use ide::{AnalysisHost, RootDatabase};
use ide_db::base_db::{
salsa::{self, ParallelDatabase},
SourceDatabaseExt,
Expand All @@ -24,6 +25,7 @@ use rayon::prelude::*;
use rustc_hash::FxHashSet;
use stdx::format_to;
use syntax::AstNode;
use vfs::Vfs;

use crate::cli::{
load_cargo::{load_workspace_at, LoadCargoConfig},
Expand Down Expand Up @@ -51,6 +53,7 @@ pub struct AnalysisStatsCmd {
pub path: PathBuf,
pub load_output_dirs: bool,
pub with_proc_macro: bool,
pub skip_inference: bool,
}

impl AnalysisStatsCmd {
Expand Down Expand Up @@ -128,6 +131,39 @@ impl AnalysisStatsCmd {
shuffle(&mut rng, &mut funcs);
}

if !self.skip_inference {
self.run_inference(&host, db, &vfs, &funcs, verbosity);
}

let total_span = analysis_sw.elapsed();
eprintln!("{:<20} {}", "Total:", total_span);
report_metric("total time", total_span.time.as_millis() as u64, "ms");
if let Some(instructions) = total_span.instructions {
report_metric("total instructions", instructions, "#instr");
}
if let Some(memory) = total_span.memory {
report_metric("total memory", memory.allocated.megabytes() as u64, "MB");
}

if env::var("RA_COUNT").is_ok() {
eprintln!("{}", profile::countme::get_all());
}

if self.memory_usage && verbosity.is_verbose() {
print_memory_usage(host, vfs);
}

Ok(())
}

fn run_inference(
&self,
host: &AnalysisHost,
db: &RootDatabase,
vfs: &Vfs,
funcs: &[Function],
verbosity: Verbosity,
) {
let mut bar = match verbosity {
Verbosity::Quiet | Verbosity::Spammy => ProgressReport::hidden(),
_ if self.parallel => ProgressReport::hidden(),
Expand All @@ -154,7 +190,7 @@ impl AnalysisStatsCmd {
let mut num_exprs_unknown = 0;
let mut num_exprs_partially_unknown = 0;
let mut num_type_mismatches = 0;
for f in funcs {
for f in funcs.iter().copied() {
let name = f.name(db);
let full_name = f
.module(db)
Expand Down Expand Up @@ -296,26 +332,6 @@ impl AnalysisStatsCmd {
report_metric("type mismatches", num_type_mismatches, "#");

eprintln!("{:<20} {}", "Inference:", inference_sw.elapsed());

let total_span = analysis_sw.elapsed();
eprintln!("{:<20} {}", "Total:", total_span);
report_metric("total time", total_span.time.as_millis() as u64, "ms");
if let Some(instructions) = total_span.instructions {
report_metric("total instructions", instructions, "#instr");
}
if let Some(memory) = total_span.memory {
report_metric("total memory", memory.allocated.megabytes() as u64, "MB");
}

if env::var("RA_COUNT").is_ok() {
eprintln!("{}", profile::countme::get_all());
}

if self.memory_usage && verbosity.is_verbose() {
print_memory_usage(host, vfs);
}

Ok(())
}

fn stop_watch(&self) -> StopWatch {
Expand Down

0 comments on commit 19e09a4

Please sign in to comment.