Blame scripts/benchmark-cpu.pl

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