Attribute::Profiled - Profiles specific methods in class


Attribute-Profiled documentation Contained in the Attribute-Profiled distribution.

Index


Code Index:

NAME

Top

Attribute::Profiled - Profiles specific methods in class

SYNOPSIS

Top

  package SomeClass;
  use Attribute::Profiled;

  sub long_running_method : Profiled { }

DESCRIPTION

Top

Attribute::Profiled provides a way to profile specific methods with attributes. This module uses Benchmark::Timer to profile elapsed times for your calls to the methods with Profiled attribute on.

Profiling report will be printed to STDERR at the end of program execution.

TODO

Top

AUTHOR

Top

Tatsuhiko Miyagawa <miyagawa@bulknews.net>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Top

Attribute::Handlers, Benchmark::Timer


Attribute-Profiled documentation Contained in the Attribute-Profiled distribution.

package Attribute::Profiled;

use 5.006;
use strict;
use warnings;

our $VERSION = '0.03';

use Attribute::Handlers;
use Hook::LexWrap;

our $_Profiler;

sub UNIVERSAL::Profiled : ATTR(CODE) {
    my($package, $symbol, $referent, $attr, $data, $phase) = @_;
    my $meth = *{$symbol}{NAME};
    no warnings 'redefine';

    wrap $symbol,
	pre  => sub {
	    unless ($_Profiler) {
		$_Profiler = Benchmark::Timer::ReportOnDestroy->new;
	    }
	    $_Profiler->start("$package\::$meth");
	},
	post => sub {
	    $_Profiler->stop("$package\::$meth");
	};
}

package Benchmark::Timer::ReportOnDestroy;
use base qw(Benchmark::Timer);

sub DESTROY {
    my $self = shift;
    $self->report;
}


1;
__END__