Reorganisation of the source tree
[ghc-hetmet.git] / utils / stat2resid / stat2resid.prl
diff --git a/utils/stat2resid/stat2resid.prl b/utils/stat2resid/stat2resid.prl
new file mode 100644 (file)
index 0000000..bf0a262
--- /dev/null
@@ -0,0 +1,81 @@
+#
+# (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
+#
+# Perl script expect bindings for the following variables to be prepended
+#
+#   DEFAULT_TMPDIR libdir
+#
+# without them, not much success :-(
+#
+
+$debug = 0; # first line of script, builds confidence :-)
+$outsuffix = ".resid.ps";      # change as appropriate
+
+if ( $ENV{'TMPDIR'} ) { # where to make tmp file names
+    $tmpfile = $ENV{'TMPDIR'} . "/$$.resid.data";
+} else {
+    $tmpfile ="${DEFAULT_TMPDIR}/$$.resid.data";
+    $ENV{'TMPDIR'} = ${DEFAULT_TMPDIR}; # set the env var as well
+}
+
+@INC = ( ${libdir} );
+
+require('parse-gcstats.prl')   || die "Can't load parse-gcstats.prl!\n";
+require('process-gcstats.prl') || die "Can't load process-gcstats.prl!\n";
+
+if ($#ARGV < 0) {
+    $infile = "-";
+    $outfile = "";                             # gnuplot: set output
+} elsif ($#ARGV == 0) {
+    $infile = $ARGV[0];
+    if ($infile =~ /^(.*)\.stat$/) {
+       $base = $1;
+    } else {
+        $base = $infile;
+       $infile  = "$base.stat";
+    };
+    $outfile = "\"$base$outsuffix\"";          # gnuplot: set output "outfile"
+} elsif ($#ARGV == 1) {
+    $infile = $ARGV[0];
+    $outfile = "\"$ARGV[1]\"";
+} else {
+    die "Usage: command [infile[.stat] [outfile]]";
+};   
+
+%gcstats = &parse_stats($infile);
+
+&print_stats(">&STDERR", %gcstats) if $debug;
+
+if ($gcstats{"collector"} eq "APPEL") {
+    die "APPEL stats: no residency plot possible\n";
+}
+
+#
+# stats are now loaded into %gcstats -- write out info
+#
+
+open(DATAFILE, ">$tmpfile") || die "Cant open >$tmpfile \n";
+$i = -1;
+$user = 0;
+printf DATAFILE "%4.2f %d\n", $user, 0;
+while (++$i < $gcstats{"gc_no"}) {
+   $user += $gcstats{"mut_user_$i"};
+   printf DATAFILE "%4.2f %d\n", $user, $gcstats{"live_$i"}; 
+}; 
+printf DATAFILE "%4.2f %d\n", $gcstats{"mut_user_total"}, 0;
+close(DATAFILE);
+
+open(PLOTFILE, "|gnuplot") || die "Cant pipe into |gnuplot \n";
+print PLOTFILE "set data style linespoints\n";
+print PLOTFILE "set function style lines\n";
+print PLOTFILE "set nokey\n";
+print PLOTFILE "set xlabel \"Mutator Time (secs)\"\n";
+print PLOTFILE "set ylabel \"Heap Residency (bytes)\" 0,-1\n";
+print PLOTFILE "set term post eps \"Times-Roman\" 20\n";
+printf PLOTFILE "set title \"%s %s  (%s)\"\n", $gcstats{"command"}, $gcstats{"args"}, $infile;
+print PLOTFILE "set output $outfile\n" ;
+print PLOTFILE "plot \"$tmpfile\"\n";
+close(PLOTFILE);
+
+unlink($tmpfile);
+exit 0;