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 ) = =~ /^(\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 =head1 COPYRIGHT Copyright (c) 2000, 2001, 2002 Perforce Software, Inc. All rights reserved. See L (C) for the terms of use. =cut 1