mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-28 17:20:47 +08:00
Add tools/parseTimings.pl.
A script to help pin down which modules take the most time and memory to compile.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# Breaks down compilation time and memory usage by module.
|
||||
# To use this script, do
|
||||
#
|
||||
# stack clean
|
||||
# stack build --ghc-options='-dshow-passes' 2>output.txt
|
||||
# perl parseTimings.pl output.txt
|
||||
|
||||
while (<>) {
|
||||
if (/!!! (.*) \[(.*)\]: finished in (.*) milliseconds, allocated (.*) megabytes/) {
|
||||
$phase = $1;
|
||||
$module = $2;
|
||||
$milliseconds = $3;
|
||||
$megabytes = $4;
|
||||
if (!$timings{$module}) {
|
||||
$timings{$module} = {'milliseconds' => 0, 'megabytes' => 0};
|
||||
};
|
||||
$timings{$module}{'milliseconds'} += $milliseconds;
|
||||
$timings{$module}{'megabytes'} += $megabytes;
|
||||
}
|
||||
}
|
||||
printf("%10s %10s %s\n", "Time (ms)", "Alloc (Mb)", "LOC", "Module");
|
||||
for (keys %timings) {
|
||||
$path = $_;
|
||||
$path =~ s/\./\//g;
|
||||
$path = "src/$path.hs";
|
||||
$loc = `wc -l $path 2>/dev/null`;
|
||||
if ($loc) {
|
||||
$loc =~ s/^\s*(\d+).*/\1/;
|
||||
printf("%10d %10d %6d %s\n", $timings{$_}{'milliseconds'}, $timings{$_}{'megabytes'}, $loc, $_);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user