1
0
mirror of http://mpg123.de/trunk/.git synced 2025-10-26 15:31:15 +03:00
Files
mpg123/scripts/benchmark-cpu.pl
thor 22bff788a0 update the CPU benchmark... producing some formatted text output (for plotting, for example)
git-svn-id: svn://scm.orgis.org/mpg123/trunk@2001 35dc7657-300d-0410-a2e5-dc2837fedb53
2009-05-01 00:06:45 +00:00

57 lines
1.4 KiB
Perl
Executable File

#!/usr/bin/perl
#
# benchmark-cpu.pl: benchmark CPU optimisations of mpg123
#
# initially written by Nicholas J Humfrey <njh@aelius.com>, placed in the public domain
#
use strict;
#use Time::HiRes qw/time/;
my $MPG123_CMD = shift @ARGV;
my @TEST_FILES = @ARGV;
die "Please specify full path to mpg123 >= 1.7.0 and a test MP3 file to decode" if (scalar(@ARGV) < 1);
die "mpg123 command does not exist" unless (-e $MPG123_CMD);
die "mpg123 command is not executable" unless (-x $MPG123_CMD);
for(@TEST_FILES)
{
die "test MP3 file does not exist" unless (-e $_);
}
# Force unbuffed output on STDOUT
#$|=1; # why?
# Check the CPUs available
my $cpulist = `$MPG123_CMD --test-cpu`;
chomp( $cpulist );
die "Failed to get list of available CPU optimisations" unless ($cpulist =~ s/^Supported decoders: //);
my @cpus = split( / /, $cpulist );
my @encs = qw(s16 f32);
printf STDERR ("Found %d CPU optimisations to test...\n\n", scalar(@cpus) );
print "#mpg123 benchmark (user CPU time in seconds for decoding)\n";
print "#decoder";
for(@encs){ print " t_$_/s"; }
print "\n";
foreach my $cpu (@cpus)
{
print "$cpu";
foreach my $e (@encs)
{
# using user CPU time
my @start_time = times();
system($MPG123_CMD, '-q', '--cpu', $cpu, '-e', $e, '-t', @TEST_FILES );
my @end_time = times();
# third entry is child user time
printf(" %4.2f", $end_time[2] - $start_time[2]);
}
print("\n");
}