mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 10:58:58 +00:00
Include memory usage in performance test output
This commit is contained in:
parent
ceeb25f3c8
commit
4e7d5f190a
@ -253,6 +253,14 @@ For a detailed list of changes, please see the file
|
|||||||
some additional caching to reduce the overhead of repeatedly
|
some additional caching to reduce the overhead of repeatedly
|
||||||
reading environment variables at runtime.
|
reading environment variables at runtime.
|
||||||
|
|
||||||
|
- The test files used by the ``performance_check`` script at the
|
||||||
|
top of the repository are now available in the
|
||||||
|
`qpdf/performance-test-files github repository
|
||||||
|
<https://github.com/qpdf/performance-test-files>`__. In addition
|
||||||
|
to running time, memory usage is also included in performance
|
||||||
|
test results. The ``performance_check`` tool has only been
|
||||||
|
tested on Linux.
|
||||||
|
|
||||||
- Lots of code cleanup and refactoring work was contributed in
|
- Lots of code cleanup and refactoring work was contributed in
|
||||||
multiple pull requests by M. Holger.
|
multiple pull requests by M. Holger.
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ use strict;
|
|||||||
use File::Basename;
|
use File::Basename;
|
||||||
use Time::HiRes qw(gettimeofday tv_interval);
|
use Time::HiRes qw(gettimeofday tv_interval);
|
||||||
use File::Path qw(make_path);
|
use File::Path qw(make_path);
|
||||||
|
use IPC::Open3;
|
||||||
|
use IO::Pipe;
|
||||||
|
|
||||||
my $whoami = basename($0);
|
my $whoami = basename($0);
|
||||||
$| = 1;
|
$| = 1;
|
||||||
@ -29,6 +31,7 @@ my %arg_compat = (
|
|||||||
'--remove-unreferenced-resources=no' => '--preserve-unreferenced-resources',
|
'--remove-unreferenced-resources=no' => '--preserve-unreferenced-resources',
|
||||||
'--remove-unreferenced-resources=yes' => '',
|
'--remove-unreferenced-resources=yes' => '',
|
||||||
'--remove-unreferenced-resources=auto' => undef,
|
'--remove-unreferenced-resources=auto' => undef,
|
||||||
|
'--report-memory-usage' => '',
|
||||||
);
|
);
|
||||||
|
|
||||||
my $executable = undef;
|
my $executable = undef;
|
||||||
@ -172,6 +175,20 @@ Repository URL: https://github.com/qpdf/performance-test-files
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $report_mem = filter_args(["--report-memory-usage"]);
|
||||||
|
{
|
||||||
|
my ($r, $mem) = run_cmd($executable, @$report_mem,
|
||||||
|
"--empty", File::Spec->devnull());
|
||||||
|
if ($r != 0)
|
||||||
|
{
|
||||||
|
die "$whoami: $executable doesn't seem to work\n";
|
||||||
|
}
|
||||||
|
if ($mem == 0)
|
||||||
|
{
|
||||||
|
print "** Note: memory information is not available **\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
run_tests();
|
run_tests();
|
||||||
print "\n";
|
print "\n";
|
||||||
|
|
||||||
@ -211,6 +228,7 @@ sub run_tests
|
|||||||
|
|
||||||
chomp(my $commit = `git describe @`);
|
chomp(my $commit = `git describe @`);
|
||||||
print "commit: $commit\n";
|
print "commit: $commit\n";
|
||||||
|
print "Format: time-in-seconds RAM-in-MiB filename\n";
|
||||||
make_path($workdir);
|
make_path($workdir);
|
||||||
foreach my $test (@tests)
|
foreach my $test (@tests)
|
||||||
{
|
{
|
||||||
@ -259,16 +277,17 @@ sub run_test
|
|||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my @cmd = ($executable, @$args, $file, "$workdir/$outfile");
|
my @cmd = ($executable, @$args, @$report_mem, $file, "$workdir/$outfile");
|
||||||
# Run once and discard to update caches
|
# Run once and discard to update caches
|
||||||
system("sync");
|
system("sync");
|
||||||
system(@cmd);
|
run_cmd(@cmd);
|
||||||
my $i = 0;
|
my $i = 0;
|
||||||
my $total = 0;
|
my $total = 0;
|
||||||
|
my $max_mem = 0;
|
||||||
while ($i < $iterations)
|
while ($i < $iterations)
|
||||||
{
|
{
|
||||||
my $start = [gettimeofday];
|
my $start = [gettimeofday];
|
||||||
my $r = system(@cmd);
|
my ($r, $mem) = run_cmd(@cmd);
|
||||||
if ($r == 2)
|
if ($r == 2)
|
||||||
{
|
{
|
||||||
# interrupt
|
# interrupt
|
||||||
@ -280,6 +299,7 @@ sub run_test
|
|||||||
print " command failed; ignoring results\n";
|
print " command failed; ignoring results\n";
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
$max_mem = $mem > $max_mem ? $mem : $max_mem;
|
||||||
my $elapsed = tv_interval($start, $end);
|
my $elapsed = tv_interval($start, $end);
|
||||||
$total += $elapsed;
|
$total += $elapsed;
|
||||||
++$i;
|
++$i;
|
||||||
@ -289,5 +309,28 @@ sub run_test
|
|||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sprintf("%0.4f", $total / $i);
|
return sprintf("%8.4f %8.4f", $total / $i, $max_mem / 1048576);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub run_cmd
|
||||||
|
{
|
||||||
|
my @cmd = @_;
|
||||||
|
my $pipe = IO::Pipe->new();
|
||||||
|
my $pid = open3(my $child_in, '>&STDOUT', $pipe->writer(), @cmd);
|
||||||
|
$child_in->close();
|
||||||
|
waitpid($pid, 0);
|
||||||
|
my $r = $?;
|
||||||
|
my $mem = 0;
|
||||||
|
while (<$pipe>)
|
||||||
|
{
|
||||||
|
if (m/qpdf-max-memory-usage (\d+)/)
|
||||||
|
{
|
||||||
|
$mem = $1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
warn $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
($r, $mem);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user