Auto merge of #15461 - lnicola:analysis-stats-memory, r=Veykril
internal: Always collect memory usage info in analysis-stats
This commit is contained in:
commit
54c4125086
@ -10,13 +10,13 @@ pub struct StopWatch {
|
|||||||
time: Instant,
|
time: Instant,
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
counter: Option<perf_event::Counter>,
|
counter: Option<perf_event::Counter>,
|
||||||
memory: Option<MemoryUsage>,
|
memory: MemoryUsage,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct StopWatchSpan {
|
pub struct StopWatchSpan {
|
||||||
pub time: Duration,
|
pub time: Duration,
|
||||||
pub instructions: Option<u64>,
|
pub instructions: Option<u64>,
|
||||||
pub memory: Option<MemoryUsage>,
|
pub memory: MemoryUsage,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StopWatch {
|
impl StopWatch {
|
||||||
@ -45,20 +45,16 @@ pub fn start() -> StopWatch {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let memory = MemoryUsage::now();
|
||||||
let time = Instant::now();
|
let time = Instant::now();
|
||||||
StopWatch {
|
StopWatch {
|
||||||
time,
|
time,
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
counter,
|
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 {
|
pub fn elapsed(&mut self) -> StopWatchSpan {
|
||||||
let time = self.time.elapsed();
|
let time = self.time.elapsed();
|
||||||
|
|
||||||
@ -69,7 +65,7 @@ pub fn elapsed(&mut self) -> StopWatchSpan {
|
|||||||
#[cfg(not(target_os = "linux"))]
|
#[cfg(not(target_os = "linux"))]
|
||||||
let instructions = None;
|
let instructions = None;
|
||||||
|
|
||||||
let memory = self.memory.map(|it| MemoryUsage::now() - it);
|
let memory = MemoryUsage::now() - self.memory;
|
||||||
StopWatchSpan { time, instructions, memory }
|
StopWatchSpan { time, instructions, memory }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,9 +89,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|||||||
}
|
}
|
||||||
write!(f, ", {instructions}{prefix}instr")?;
|
write!(f, ", {instructions}{prefix}instr")?;
|
||||||
}
|
}
|
||||||
if let Some(memory) = self.memory {
|
write!(f, ", {}", self.memory)?;
|
||||||
write!(f, ", {memory}")?;
|
|
||||||
}
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,9 +235,7 @@ pub fn run(self, verbosity: Verbosity) -> anyhow::Result<()> {
|
|||||||
if let Some(instructions) = total_span.instructions {
|
if let Some(instructions) = total_span.instructions {
|
||||||
report_metric("total instructions", instructions, "#instr");
|
report_metric("total instructions", instructions, "#instr");
|
||||||
}
|
}
|
||||||
if let Some(memory) = total_span.memory {
|
report_metric("total memory", total_span.memory.allocated.megabytes() as u64, "MB");
|
||||||
report_metric("total memory", memory.allocated.megabytes() as u64, "MB");
|
|
||||||
}
|
|
||||||
|
|
||||||
if env::var("RA_COUNT").is_ok() {
|
if env::var("RA_COUNT").is_ok() {
|
||||||
eprintln!("{}", profile::countme::get_all());
|
eprintln!("{}", profile::countme::get_all());
|
||||||
@ -257,7 +255,7 @@ pub fn run(self, verbosity: Verbosity) -> anyhow::Result<()> {
|
|||||||
eprintln!("source files: {total_file_size}, macro files: {total_macro_file_size}");
|
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);
|
print_memory_usage(host, vfs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,7 +812,7 @@ fn run_ide_things(&self, analysis: Analysis, mut file_ids: Vec<FileId>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn stop_watch(&self) -> StopWatch {
|
fn stop_watch(&self) -> StopWatch {
|
||||||
StopWatch::start().memory(self.memory_usage)
|
StopWatch::start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,8 +62,6 @@
|
|||||||
optional --randomize
|
optional --randomize
|
||||||
/// Run type inference in parallel.
|
/// Run type inference in parallel.
|
||||||
optional --parallel
|
optional --parallel
|
||||||
/// Collect memory usage statistics.
|
|
||||||
optional --memory-usage
|
|
||||||
/// Print the total length of all source and macro files (whitespace is not counted).
|
/// Print the total length of all source and macro files (whitespace is not counted).
|
||||||
optional --source-stats
|
optional --source-stats
|
||||||
|
|
||||||
@ -191,7 +189,6 @@ pub struct AnalysisStats {
|
|||||||
pub output: Option<OutputFormat>,
|
pub output: Option<OutputFormat>,
|
||||||
pub randomize: bool,
|
pub randomize: bool,
|
||||||
pub parallel: bool,
|
pub parallel: bool,
|
||||||
pub memory_usage: bool,
|
|
||||||
pub source_stats: bool,
|
pub source_stats: bool,
|
||||||
pub only: Option<String>,
|
pub only: Option<String>,
|
||||||
pub with_deps: bool,
|
pub with_deps: bool,
|
||||||
|
@ -103,9 +103,7 @@ fn measure_analysis_stats_path(
|
|||||||
path: &str,
|
path: &str,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
eprintln!("\nMeasuring analysis-stats/{name}");
|
eprintln!("\nMeasuring analysis-stats/{name}");
|
||||||
let output =
|
let output = cmd!(sh, "./target/release/rust-analyzer -q analysis-stats {path}").read()?;
|
||||||
cmd!(sh, "./target/release/rust-analyzer -q analysis-stats --memory-usage {path}")
|
|
||||||
.read()?;
|
|
||||||
for (metric, value, unit) in parse_metrics(&output) {
|
for (metric, value, unit) in parse_metrics(&output) {
|
||||||
self.report(&format!("analysis-stats/{name}/{metric}"), value, unit.into());
|
self.report(&format!("analysis-stats/{name}/{metric}"), value, unit.into());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user