first pass at benchmarking loading many classes
[gitmo/Moose.git] / benchmarks / lotsa-classes.pl
CommitLineData
d9c47a0e 1#!/usr/bin/env perl
2
3use warnings FATAL => 'all';
4use strict;
5use File::Temp;
6use Path::Class;
7use String::TT qw(tt strip);
8
9my $number_of_classes = shift || 1500;
10my $t = shift || File::Temp->newdir;
11my $tmp = dir($t);
12$tmp->rmtree;
13$tmp->mkpath;
14(-d $tmp) or die "not a dir: $tmp";
15#print "$tmp\n";
16
17my %class_writer = (
18 'Moose' => sub {
19 my $name = shift;
20 return strip tt q{
21 package [% name %];
22 use Moose;
23 has 'x' => ( is => 'ro', isa => 'Str' );
24 __PACKAGE__->meta->make_immutable;
25 1;
26 __END__
27 };
28 },
29 'Moo' => sub {
30 my $name = shift;
31 return strip tt q{
32 package [% name %];
33 use Moo;
34 has 'x' => ( is => 'ro', isa => 'Str' );
35 1;
36 __END__
37 };
38 },
39 'Mo' => sub {
40 my $name = shift;
41 return strip tt q{
42 package [% name %];
43 use Mo;
44 has 'x' => ( is => 'ro', isa => 'Str' );
45 1;
46 __END__
47 };
48 },
49 'Mouse' => sub {
50 my $name = shift;
51 return strip tt q{
52 package [% name %];
53 use Mouse;
54 has 'x' => ( is => 'ro', isa => 'Str' );
55 __PACKAGE__->meta->make_immutable;
56 1;
57 __END__
58 };
59 },
60 'plain-package' => sub {
61 my $name = shift;
62 return strip tt q{
63 package [% name %];
64 sub x {}
65 1;
66 __END__
67 };
68 },
69);
70
71my $class_prefix = 'TmpClassThingy';
72my %lib_map;
73for my $module (sort keys %class_writer) {
74 my $lib = $tmp->subdir($module . '-lib');
75 $lib->mkpath;
76 my $all_fh = $lib->file('All.pm')->openw;
77 for my $n (1 .. $number_of_classes) {
78 my $class_name = $class_prefix . $n;
79 my $fh = $lib->file($class_name . '.pm')->openw;
80 $fh->say($class_writer{$module}->($class_name)) or die;
81 $fh->close or die;
82 $all_fh->say("use $class_name;");
83 }
84 $all_fh->say('1;');
85 $all_fh->close or die;
86 $lib_map{$module} = $lib;
87}
88
89#$DB::single = 1;
90for my $module (sort keys %lib_map) {
91 my $lib = $lib_map{$module};
92 print "$module\n";
93 my $cmd = "time -p $^X -I$lib -MAll -e '1'";
94 `$cmd > /dev/null 2>&1`; # to cache
95# print "$cmd\n";
96 system($cmd);
97 print "\n";
98}
99