Auto merge of #15461 - lnicola:analysis-stats-memory, r=Veykril

internal: Always collect memory usage info in analysis-stats
This commit is contained in:
bors 2023-08-15 16:20:24 +00:00
commit 54c4125086
4 changed files with 11 additions and 24 deletions

View file

@ -10,13 +10,13 @@ pub struct StopWatch {
time: Instant,
#[cfg(target_os = "linux")]
counter: Option<perf_event::Counter>,
memory: Option<MemoryUsage>,
memory: MemoryUsage,
}
pub struct StopWatchSpan {
pub time: Duration,
pub instructions: Option<u64>,
pub memory: Option<MemoryUsage>,
pub memory: MemoryUsage,
}
impl StopWatch {
@ -45,20 +45,16 @@ impl StopWatch {
None
}
};
let memory = MemoryUsage::now();
let time = Instant::now();
StopWatch {
time,
#[cfg(target_os = "linux")]
counter,
memory: None,
memory,
}
}
pub fn memory(mut self, yes: bool) -> StopWatch {
if yes {
self.memory = Some(MemoryUsage::now());
}
self
}
pub fn elapsed(&mut self) -> StopWatchSpan {
let time = self.time.elapsed();
@ -69,7 +65,7 @@ impl StopWatch {
#[cfg(not(target_os = "linux"))]
let instructions = None;
let memory = self.memory.map(|it| MemoryUsage::now() - it);
let memory = MemoryUsage::now() - self.memory;
StopWatchSpan { time, instructions, memory }
}
}
@ -93,9 +89,7 @@ impl fmt::Display for StopWatchSpan {
}
write!(f, ", {instructions}{prefix}instr")?;
}
if let Some(memory) = self.memory {
write!(f, ", {memory}")?;
}
write!(f, ", {}", self.memory)?;
Ok(())
}
}

View file

@ -235,9 +235,7 @@ impl flags::AnalysisStats {
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");
}
report_metric("total memory", total_span.memory.allocated.megabytes() as u64, "MB");
if env::var("RA_COUNT").is_ok() {
eprintln!("{}", profile::countme::get_all());
@ -257,7 +255,7 @@ impl flags::AnalysisStats {
eprintln!("source files: {total_file_size}, macro files: {total_macro_file_size}");
}
if self.memory_usage && verbosity.is_verbose() {
if verbosity.is_verbose() {
print_memory_usage(host, vfs);
}
@ -814,7 +812,7 @@ impl flags::AnalysisStats {
}
fn stop_watch(&self) -> StopWatch {
StopWatch::start().memory(self.memory_usage)
StopWatch::start()
}
}

View file

@ -62,8 +62,6 @@ xflags::xflags! {
optional --randomize
/// Run type inference in parallel.
optional --parallel
/// Collect memory usage statistics.
optional --memory-usage
/// Print the total length of all source and macro files (whitespace is not counted).
optional --source-stats
@ -191,7 +189,6 @@ pub struct AnalysisStats {
pub output: Option<OutputFormat>,
pub randomize: bool,
pub parallel: bool,
pub memory_usage: bool,
pub source_stats: bool,
pub only: Option<String>,
pub with_deps: bool,

View file

@ -103,9 +103,7 @@ impl Metrics {
path: &str,
) -> anyhow::Result<()> {
eprintln!("\nMeasuring analysis-stats/{name}");
let output =
cmd!(sh, "./target/release/rust-analyzer -q analysis-stats --memory-usage {path}")
.read()?;
let output = cmd!(sh, "./target/release/rust-analyzer -q analysis-stats {path}").read()?;
for (metric, value, unit) in parse_metrics(&output) {
self.report(&format!("analysis-stats/{name}/{metric}"), value, unit.into());
}