The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Plack::Middleware::Debug::Memory;
use 5.008;
use strict;
use warnings;
use parent qw(Plack::Middleware::Debug::Base);
our $VERSION = '0.17';

sub run {
    my($self, $env, $panel) = @_;

    my $before = $self->current_memory;

    return sub {
        my $res = shift;

        my $after = $self->current_memory;
        $panel->nav_subtitle($self->format_memory($after));

        $panel->content(
            $self->render_list_pairs(
                [   Before => $self->format_memory($before),
                    After  => $self->format_memory($after),
                    Diff   => $self->format_memory($after - $before) ],
            ),
        );
    };
}

sub format_memory {
    my ($self, $memory) = @_;
    1 while $memory =~ s/^([-+]?\d+)(\d{3})/$1,$2/;
    return "$memory KB";
}

sub current_memory {
    my $self = shift;
    my $out  = `ps -o rss= -p $$`;
    $out =~ s/^\s*|\s*$//gs;
    $out;
}

1;
__END__

=head1 NAME

Plack::Middleware::Debug::Memory - Memory Panel

=head1 SEE ALSO

L<Plack::Middleware::Debug>

=cut