Mouse::Util::does_role() respects $thing->does() method
[gitmo/Mouse.git] / author / pp-vs-xs-with-forking.pl
1 #!perl -w
2
3 use strict;
4 use Config; printf "Perl/%vd (%s)\n", $^V, $Config{archname};
5
6 use Benchmark qw(:hireswallclock);
7 use Benchmark::Forking qw(cmpthese);
8
9 use Encode (); # pre-load for Interface::Test
10 use HTTP::Request ();
11
12 sub new_he{
13     my($use_pp, $any_moose) = @_;
14     $ENV{MOUSE_PUREPERL} = $use_pp;
15     $ENV{ANY_MOOSE}      = $any_moose if defined $any_moose;
16
17     require HTTP::Engine;
18
19     return HTTP::Engine->new(
20         interface       => {
21             module => 'Test',
22             request_handler => sub {
23                 my($request) = @_;
24
25                 return HTTP::Engine::Response->new(body => "Hello, world!\n");
26             },
27         },
28     );
29 }
30
31 my $req = HTTP::Request->new(GET => 'http://localhost/');
32
33 print "load HTTP::Engine, new(), and run()\n";
34 cmpthese -2 => {
35      'XS' => sub {
36         my $he  = new_he(0);
37         $he->run($req, env => \%ENV);
38      },
39      'PP' => sub {
40         my $he  = new_he(1);
41         $he->run($req, env => \%ENV);
42      },
43      'Moose' => sub {
44         my $he  = new_he(0, 'Moose');
45         $he->run($req, env => \%ENV);
46      },
47 };
48
49 print "load HTTP::Engine, new(), and run() * 100\n";
50 cmpthese -2 => {
51      'XS' => sub {
52         my $he  = new_he(0);
53         $he->run($req, env => \%ENV) for 1 .. 100;
54      },
55      'PP' => sub {
56         my $he = new_he(1);
57         $he->run($req, env => \%ENV) for 1 .. 100;
58      },
59      'Moose' => sub {
60         my $he = new_he(0, 'Moose');
61         $he->run($req, env => \%ENV) for 1 .. 100;
62      },
63 };
64