File: profile

package info (click to toggle)
libxml-dumper-perl 0.81-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 240 kB
  • sloc: perl: 535; xml: 12; makefile: 8
file content (90 lines) | stat: -rwxr-xr-x 1,830 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#! /usr/bin/perl

use XML::Dumper;
use Benchmark qw( timeit timestr );

print
	"This is a test to see how quickly XML::Dumper runs on your system. \n",
	"This will take a few minutes\n\n";

my $count = 100;
my $data = [];
my $timemax = 0;
my $timemin = 100;

for my $size ( qw( 1 10 20 50 100 200 500 1000 ))  {
	my $perl = [ map {{ id => $_, data => rand( 1000 ), uncertainty => rand( 100 ) }} ( 0 .. $size ) ];

	print "Testing XML of size: $size...";
	my $t = timeit( $count, sub {
			$xml	= pl2xml( $perl );
			$pl		= xml2pl( $xml );
		}
	);
	my $time = int( timestr( $t ))/$count;

	print timestr( $t ), " ($time each)\n";
	
	$timemax = $time > $timemax ? $time : $timemax;
	$timemin = $time < $timemin ? $time : $timemin;

	push @$data, {
		size	=> $size,
		time	=> $time,
		count	=> $count
	};
}

print "\n\n";

($timemax, $timemin) = ( log10( $timemax ), log10( $timemin ) );

my $range = $timemax - $timemin;
my $v_size = $range/20;
my $v_span = $timemax;

print "time (log s)\n";
while( $v_span >= $timemin ) {
	printf( "%8.4f (%4.2f) |", $v_span, 10**$v_span );
	foreach( @$data ) {
		print log10( $_->{ time } ) >= $v_span ? "*    " : "     ";
	}
	print "\n";
	$v_span -= $v_size;
}
print '-' x 80, "\n";
print "                 ";
foreach( @$data ) {
	printf( "%-4d ", $_->{ size } );
}
print "\n\n";

my @stats = reverse @$data;
my $first = shift @stats;
my $sum = $first->{ time }/$first->{ size };
my $count = 1;

foreach( @stats ) { 
	$time = $_->{ time } / $_->{ size };

	# Skip outliers
	next if( $time <= $sum * 0.5 || $time >= $sum * 2 );

	$sum += $time;
	$count++;
}

printf( "%-02.6f seconds per XML record size.\n\n", $sum/$count );

sub log10 {
	my $num = shift;
	return -2 if $num == 0;
	return log($num)/log(10);
}

__END__

=head1 NAME

profile.pl - test how quickly XML::Dumper runs on your system