X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FStats.pm;h=7b9c47ca2576fd188aaf4ebc34ea6cc77bc77695;hb=88eee38e25dd1a991008fb5f61b848fcecb97ad0;hp=5fadca6ec58ca8ff9ed63a9539fc67ceec672570;hpb=e5ecd5bc38bac3e2fcfaf643ea2a4c6ab46d7e57;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Stats.pm b/lib/Catalyst/Stats.pm index 5fadca6..7b9c47c 100644 --- a/lib/Catalyst/Stats.pm +++ b/lib/Catalyst/Stats.pm @@ -118,8 +118,54 @@ sub _get_uid { $visitor->searchForUID($uid); $self->tree->accept($visitor); 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( @_ ); } +no Moose; +__PACKAGE__->meta->make_immutable(); + 1; __END__ @@ -168,7 +214,7 @@ be like this: $c->stats->profile("completed second part of critical bit"); # more code ... - $c->stats->profile(end => "mysub"); + $c->stats->profile(end => "mysub"); } Supposing mysub was called from the action "process" inside a Catalyst @@ -195,7 +241,7 @@ part 0.111s. =head2 new -Constructor. +Constructor. $stats = Catalyst::Stats->new; @@ -214,7 +260,7 @@ Enable or disable stats collection. By default, stats are enabled after object Marks a profiling point. These can appear in pairs, to time the block of code between the begin/end pairs, or by themselves, in which case the time of -execution to the previous profiling point will be reported. +execution to the previous profiling point will be reported. The argument may be either a single comment string or a list of name-value pairs. Thus the following are equivalent: @@ -287,14 +333,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