diff options
Diffstat (limited to 't/090-memory-usage.pl')
-rw-r--r-- | t/090-memory-usage.pl | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/t/090-memory-usage.pl b/t/090-memory-usage.pl new file mode 100644 index 0000000..f3eaef8 --- /dev/null +++ b/t/090-memory-usage.pl @@ -0,0 +1,59 @@ +#! perl +use strict; +use 5.006002; +use Compress::Bzip2; +use File::Spec; +use Memory::Usage; +# Note that Test::LeakTrace does not find the XS leaks here. Always use Memory::Usage also. + +use constant MAX => 5; # MAX times all files in t => 125MB with 75, 15MB with 5, 43MB with 25 +use constant MAX_5 => MAX >= 5 ? MAX / 5 : 1; +my $bigfile = File::Spec->catfile('t', '090-tmp-bigfile.bz2'); + +sub t_compress { + warn "Creating $bigfile ...\n"; + my $buf; + my $mu = Memory::Usage->new(); + $mu->record("Before bzopen"); + my $bz = Compress::Bzip2::bzopen($bigfile, "w"); + for (0 .. MAX) { + $mu->record("Before bzwrite: $_") unless $_ % MAX_5; + for my $infile (glob "t/*") { + next if $infile eq $bigfile; + open(my $fh, "<", $infile); + while ( read( $fh, $buf, 65335 ) ) { + $bz->bzwrite( $buf ); + } + close $fh; + } + $mu->record("After bzwrite: $_") unless $_ % MAX_5; + } + $bz->bzclose; + $mu->record("After bzclose"); + $mu->dump(); + system("bunzip2", "-tv", $bigfile); + warn(" size: ", -s $bigfile, "\n"); +} + +sub t_uncompress { + warn "Uncompressing $bigfile 5x ...\n"; + my $buf; + my $mu = Memory::Usage->new(); + for ( 1 .. 5 ) { + my $bz = Compress::Bzip2::bzinflateInit( -verbosity => 0 ); + $mu->record("Before bunzip: $_"); + open( my $fh, '<', $bigfile ); + while ( read( $fh, $buf, 65335 ) ) { + my ( $output, $status ) = $bz->bzinflate( $buf ); + } + close($fh); + $bz->bzclose(); + $mu->record("After bunzip: $_"); + } + $mu->dump(); +} + +t_compress() unless -f $bigfile; +t_uncompress(); + +unlink $bigfile; |