Make stats code nicer.
Taking inspiration from `-Zmacro-stats`:
- Use "{prefix}" consistently.
- Use names for column widths.
- Write output in a single `eprint!` call, in an attempt to minimize
interleaving of output from different rustc processes.
- Use `repeat` for the long `---` banners.
This commit is contained in:
@@ -762,6 +762,8 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
||||
assert_eq!(total_bytes, computed_total_bytes);
|
||||
|
||||
if tcx.sess.opts.unstable_opts.meta_stats {
|
||||
use std::fmt::Write;
|
||||
|
||||
self.opaque.flush();
|
||||
|
||||
// Rewind and re-read all the metadata to count the zero bytes we wrote.
|
||||
@@ -781,27 +783,38 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
||||
let prefix = "meta-stats";
|
||||
let perc = |bytes| (bytes * 100) as f64 / total_bytes as f64;
|
||||
|
||||
eprintln!("{prefix} METADATA STATS");
|
||||
eprintln!("{} {:<23}{:>10}", prefix, "Section", "Size");
|
||||
eprintln!("{prefix} ----------------------------------------------------------------");
|
||||
let section_w = 23;
|
||||
let size_w = 10;
|
||||
let banner_w = 64;
|
||||
|
||||
// We write all the text into a string and print it with a single
|
||||
// `eprint!`. This is an attempt to minimize interleaved text if multiple
|
||||
// rustc processes are printing macro-stats at the same time (e.g. with
|
||||
// `RUSTFLAGS='-Zmeta-stats' cargo build`). It still doesn't guarantee
|
||||
// non-interleaving, though.
|
||||
let mut s = String::new();
|
||||
_ = writeln!(s, "{prefix} METADATA STATS");
|
||||
_ = writeln!(s, "{prefix} {:<section_w$}{:>size_w$}", "Section", "Size");
|
||||
_ = writeln!(s, "{prefix} {}", "-".repeat(banner_w));
|
||||
for (label, size) in stats {
|
||||
eprintln!(
|
||||
"{} {:<23}{:>10} ({:4.1}%)",
|
||||
prefix,
|
||||
_ = writeln!(
|
||||
s,
|
||||
"{prefix} {:<section_w$}{:>size_w$} ({:4.1}%)",
|
||||
label,
|
||||
usize_with_underscores(size),
|
||||
perc(size)
|
||||
);
|
||||
}
|
||||
eprintln!("{prefix} ----------------------------------------------------------------");
|
||||
eprintln!(
|
||||
"{} {:<23}{:>10} (of which {:.1}% are zero bytes)",
|
||||
prefix,
|
||||
_ = writeln!(s, "{prefix} {}", "-".repeat(banner_w));
|
||||
_ = writeln!(
|
||||
s,
|
||||
"{prefix} {:<section_w$}{:>size_w$} (of which {:.1}% are zero bytes)",
|
||||
"Total",
|
||||
usize_with_underscores(total_bytes),
|
||||
perc(zero_bytes)
|
||||
);
|
||||
eprintln!("{prefix}");
|
||||
_ = writeln!(s, "{prefix}");
|
||||
eprint!("{s}");
|
||||
}
|
||||
|
||||
root
|
||||
|
||||
Reference in New Issue
Block a user