#!/usr/bin/perl use warnings; use strict; use File::Spec::Functions qw(splitpath); my %procs; my %cmds; my %stats; do "parse-data.pl"; &parse_data(\%procs, \%cmds); &accumulate_stats(\%procs, \%stats, 1); my $proc = shift @ARGV; my @cmd = sort { $a <=> $b } keys %{$cmds{$proc}}; my $maxdepth = @ARGV ? shift @ARGV : 5; print "Start $proc $cmd[0]\n"; &dump_procs($cmd[0], 0, ""); sub dump_procs { my $pid = shift; my $depth = shift; my $indent = shift; my $proc = $procs{$pid}; my $cmd = $proc->{cmd}->[$#{$proc->{cmd}}]; my $time = $proc->{end} ? "run ". ($proc->{end}-$proc->{start}) . "ms" : "running"; print "$indent $pid $cmd $time\n"; foreach (sort { $a cmp $b } keys %{$proc->{read}}) { print "$indent read x", $proc->{read}->{$_}, " on ", $_, "\n"; } foreach (sort { $a cmp $b } keys %{$proc->{write}}) { print "$indent write x", $proc->{write}->{$_}, " on ", $_, "\n"; } if ($depth < $maxdepth) { foreach my $kid (sort { $a <=> $b } keys %{$proc->{kids}}) { &dump_procs($kid, $depth+1, "$indent "); } } }