Cache-Profile
view release on metacpan or search on metacpan
lib/Cache/Profile.pm view on Meta::CPAN
package Cache::Profile; # git description: v0.05-2-gd123baf
# ABSTRACT: Measure the performance of a cache
our $VERSION = '0.06';
use Moose;
use Carp;
use Time::HiRes 1.84 qw(tv_interval gettimeofday time clock);
use Try::Tiny;
use Class::MOP;
use namespace::autoclean;
has cache => (
isa => "Object",
is => "ro",
required => 1,
);
sub AUTOLOAD {
my $self = shift;
my ( $method ) = ( our $AUTOLOAD =~ /([^:]+)$/ );
$self->cache->$method(@_);
}
sub isa {
my ( $self, $class ) = @_;
$self->SUPER::isa($class) or $self->cache->isa($class);
}
my @timer_names = qw(hit get set miss);
sub timer_names { @timer_names }
foreach my $method ( "all", @timer_names ) {
my $count = "call_count_$method";
has $count => (
traits => [qw(Counter)],
isa => "Num",
is => "ro",
default => sub { 0 },
handles => {
"_inc_call_count_$method" => "inc",
"reset_call_count_$method" => [ set => 0 ],
},
);
foreach my $measure ( qw(real cpu) ) {
my $time = "total_${measure}_time_${method}";
has $time => (
traits => [qw(Number)],
isa => "Num",
is => "ro",
default => sub { 0 },
handles => {
"_add_${method}_${measure}" => "add",
"reset_${method}_${measure}" => [ set => 0 ],
},
);
__PACKAGE__->meta->add_method( "average_${method}_time_${measure}" => sub {
my $self = shift;
try { $self->$time / $self->$count } # undef if no count;
});
__PACKAGE__->meta->add_method( "${method}_call_rate" => sub {
my $self = shift;
( run in 0.985 second using v1.01-cache-2.11-cpan-39bf76dae61 )