File Coverage

blib/lib/Plack/Middleware/MemoryUsage.pm
Criterion Covered Total %
statement 36 36 100.0
branch 3 4 75.0
condition 2 2 100.0
subroutine 9 9 100.0
pod 1 2 50.0
total 51 53 96.2


line stmt bran cond sub pod time code
1             package Plack::Middleware::MemoryUsage;
2              
3 4     4   2303 use strict;
  4         8  
  4         146  
4 4     4   21 use warnings;
  4         9  
  4         138  
5              
6 4     4   2020 use parent qw( Plack::Middleware );
  4         2269  
  4         26  
7 4     4   46526 use Plack::Util::Accessor qw( callback packages);
  4         10  
  4         29  
8              
9             our $VERSION = '0.03';
10              
11 4     4   4200 use B::Size2::Terse;
  4         37868  
  4         138  
12 4     4   37 use Devel::Symdump;
  4         8  
  4         1166  
13              
14             sub call {
15 2     2 1 269967 my($self, $env) = @_;
16              
17 2         10 my $before = $self->memory_usage();
18 2         29 my $res = $self->app->($env);
19 2         145 my $after = $self->memory_usage();
20 2         5 my $diff = {};
21              
22 2         182 for my $pkg (keys %$after) {
23 255   100     956 $diff->{$pkg} = $after->{$pkg} - ($before->{$pkg} || 0);
24             }
25              
26             $self->response_cb($res, sub {
27 2     2   40 my $res = shift;
28 2 50       12 $self->callback->( $env, $res, $before, $after, $diff )
29             if $self->callback;
30 2         65 });
31             }
32              
33             sub memory_usage {
34 4     4 0 9 my $self = shift;
35 4 100       20 my @packages = $self->packages ? @{$self->packages} : Devel::Symdump->rnew("main")->packages;
  2         90  
36 4         98113 my $size;
37              
38 4         19 for my $package ("main", @packages) {
39 510         1749 my($subs, $opcount, $opsize) = B::Size2::Terse::package_size($package);
40 510         6153487 $size->{$package} = $opsize;
41             }
42 4         151 return $size;
43             }
44              
45             1;
46              
47             __END__