X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FStats.pm;h=b22ad04dd40d86ba684237cd4ccefac88bc1d864;hb=f2e13bbd72d59b71fe8916aa802d2631217bd51d;hp=66e9a40ede27fee04eb898ec91ac261868831537;hpb=b01f0c69c9821968a297b36d64eed9193287455a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Stats.pm b/lib/Catalyst/Stats.pm index 66e9a40..b22ad04 100644 --- a/lib/Catalyst/Stats.pm +++ b/lib/Catalyst/Stats.pm @@ -4,6 +4,7 @@ use strict; use warnings; use Time::HiRes qw/gettimeofday tv_interval/; use Text::SimpleTable (); +use Catalyst::Utils; use Tree::Simple qw/use_weak_refs/; use Tree::Simple::Visitor::FindByUID; @@ -62,7 +63,7 @@ sub profile { } if ($params{parent}) { # parent is explicitly defined - $prev = $parent = $self->_get_uid($params{parent}) or return undef; + $prev = $parent = $self->_get_uid($params{parent}); } if (!$parent) { # Find previous node, which is either previous sibling or parent, for ref time. @@ -92,12 +93,8 @@ sub elapsed { sub report { my $self = shift; -# close any remaining open nodes - for (my $i = $#{$self->{stack}}; $i > 0; $i--) { - $self->profile(end => $self->{stack}->[$i]->getNodeValue->{action}); - } - - my $t = Text::SimpleTable->new( [ 62, 'Action' ], [ 9, 'Time' ] ); + my $column_width = Catalyst::Utils::term_width() - 9 - 13; + my $t = Text::SimpleTable->new( [ $column_width, 'Action' ], [ 9, 'Time' ] ); my @results; $self->{tree}->traverse( sub { @@ -126,6 +123,50 @@ sub _get_uid { return $visitor->getResult; } + +sub accept { + my $self = shift; + $self->{tree}->accept( @_ ); +} + +sub addChild { + my $self = shift; + my $node = $_[ 0 ]; + + my $stat = $node->getNodeValue; + + # do we need to fake $stat->{ t } ? + if( $stat->{ elapsed } ) { + # remove the "s" from elapsed time + $stat->{ elapsed } =~ s{s$}{}; + } + + $self->{tree}->addChild( @_ ); +} + +sub setNodeValue { + my $self = shift; + my $stat = $_[ 0 ]; + + # do we need to fake $stat->{ t } ? + if( $stat->{ elapsed } ) { + # remove the "s" from elapsed time + $stat->{ elapsed } =~ s{s$}{}; + } + + $self->{tree}->setNodeValue( @_ ); +} + +sub getNodeValue { + my $self = shift; + $self->{tree}->getNodeValue( @_ )->{ t }; +} + +sub traverse { + my $self = shift; + $self->{tree}->traverse( @_ ); +} + 1; __END__ @@ -293,14 +334,28 @@ from the previous profiling point. The 'rollup' flag indicates whether the reported time is the rolled up time for the block, or the elapsed time from the previous profiling point. +=head1 COMPATABILITY METHODS + +Some components might expect the stats object to be a regular Tree::Simple object. +We've added some compatability methods to handle this scenario: + +=head2 accept + +=head2 addChild + +=head2 setNodeValue + +=head2 getNodeValue + +=head2 traverse =head1 SEE ALSO -L. +L -=head1 AUTHOR +=head1 AUTHORS -Jon Schutz +Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT