X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FStats.pm;h=247e1bd8d03cefb0a6ca120ff4c04e8b7b77166d;hb=025703186d05624d36984961c75a1e138eaed850;hp=7b9c47ca2576fd188aaf4ebc34ea6cc77bc77695;hpb=2f3812528068bc1d9f7840067f0c03d36cd47e6d;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Stats.pm b/lib/Catalyst/Stats.pm index 7b9c47c..247e1bd 100644 --- a/lib/Catalyst/Stats.pm +++ b/lib/Catalyst/Stats.pm @@ -10,7 +10,8 @@ has enable => (is => 'rw', required => 1, default => sub{ 1 }); has tree => ( is => 'ro', required => 1, - default => sub{ Tree::Simple->new({t => [gettimeofday]}) } + default => sub{ Tree::Simple->new({t => [gettimeofday]}) }, + handles => [qw/ accept traverse /], ); has stack => ( is => 'ro', @@ -87,13 +88,9 @@ sub elapsed { sub report { my $self = shift; - # close any remaining open nodes - map { $self->profile(end => $_->getNodeValue->{action}) } - (reverse @{ $self->stack })[1 .. $#{$self->stack}]; - my $t = Text::SimpleTable->new( [ 62, 'Action' ], [ 9, 'Time' ] ); my @results; - $self->tree->traverse( + $self->traverse( sub { my $action = shift; my $stat = $action->getNodeValue; @@ -103,8 +100,10 @@ sub report { $stat->{elapsed}, $stat->{action} ? 1 : 0, ); + # Trim down any times >= 10 to avoid ugly Text::Simple line wrapping + my $elapsed = substr(sprintf("%f", $stat->{elapsed}), 0, 8) . "s"; $t->row( ( q{ } x $r[0] ) . $r[1], - defined $r[2] ? sprintf("%fs", $r[2]) : '??'); + defined $r[2] ? $elapsed : '??'); push(@results, \@r); } ); @@ -116,15 +115,10 @@ sub _get_uid { my $visitor = Tree::Simple::Visitor::FindByUID->new; $visitor->searchForUID($uid); - $self->tree->accept($visitor); + $self->accept($visitor); return $visitor->getResult; } -sub accept { - my $self = shift; - $self->{tree}->accept( @_ ); -} - sub addChild { my $self = shift; my $node = $_[ 0 ]; @@ -137,7 +131,7 @@ sub addChild { $stat->{ elapsed } =~ s{s$}{}; } - $self->{tree}->addChild( @_ ); + $self->tree->addChild( @_ ); } sub setNodeValue { @@ -150,17 +144,12 @@ sub setNodeValue { $stat->{ elapsed } =~ s{s$}{}; } - $self->{tree}->setNodeValue( @_ ); + $self->tree->setNodeValue( @_ ); } sub getNodeValue { my $self = shift; - $self->{tree}->getNodeValue( @_ )->{ t }; -} - -sub traverse { - my $self = shift; - $self->{tree}->traverse( @_ ); + $self->tree->getNodeValue( @_ )->{ t }; } no Moose;