logmemsize.pm #3

  • //
  • guest/
  • perforce_software/
  • revml/
  • lib/
  • VCP/
  • Filter/
  • logmemsize.pm
  • View
  • Commits
  • Open Download .zip Download (2 KB)
package VCP::Filter::logmemsize ;

=head1 NAME

VCP::Filter::logmemsize - developement logging filter

=head1 DESCRIPTION

Watches memory size.  Only works on linux for now.

Not a supported module, API and behavior may change without warning.

=cut

$VERSION = 0.1 ;

use strict ;

my $start_size;


sub get_size {
    open F, "/proc/$$/statm" or return 0;
    my ( $s ) = <F> =~ /^(\d+)/;
    close F;

    return $s * 4;
}

sub get_sizes {
    my $s = get_size;

    return ( $s - $start_size, "KB (", $s, "KB)" );
}

BEGIN {
    $start_size = get_size;
}

use base qw( VCP::Filter );
#use fields qw( LogString );

use VCP::Utils  qw( empty );
use VCP::Logger qw( pr lg );

END {
   lg "memsize: ", get_sizes;
}

sub new {
   my $class = shift ;
   $class = ref $class || $class ;

   my ( $spec, $options ) = @_;

   my $self = $class->SUPER::new( @_ );
   $self->{LogString} = shift @$options if $options;
   $self->{LogString} = "" unless defined $self->{LogString};
   $self->{LogString} .= " " unless empty $self->{LogString};

   lg $self->{LogString}, "starting memsize: (${start_size}KB)";
   lg $self->{LogString}, "memsize: ", get_sizes;

   return $self;
}


sub handle_header {
   my VCP::Filter::logmemsize $self = shift ;

   lg $self->{LogString}, "memsize: ", get_sizes;

   $self->SUPER::handle_header( @_ );
}

sub handle_rev {
   my VCP::Filter::logmemsize $self = shift ;

   lg $self->{LogString}, "memsize: ", get_sizes;
   $self->SUPER::handle_rev( @_ );
}


sub handle_footer {
   my VCP::Filter::logmemsize $self = shift ;

   lg $self->{LogString}, "memsize: ", get_sizes;
   $self->SUPER::handle_footer ( @_ );
   lg $self->{LogString}, "memsize: ", get_sizes;
}

=head1 AUTHOR

Barrie Slaymaker <barries@slaysys.com>

=head1 COPYRIGHT

Copyright (c) 2000, 2001, 2002 Perforce Software, Inc.
All rights reserved.

See L<VCP::License|VCP::License> (C<vcp help license>) for the terms of use.

=cut

1
# Change User Description Committed
#3 4496 Barrie Slaymaker - minor POD cleanups to prevent nags when building VCP::Help
#2 4490 Barrie Slaymaker - Minor code cleanups
#1 4472 Barrie Slaymaker - VCP::Filter::logmemsize added