← Index
NYTProf Performance Profile   « line view »
For starman worker -M FindBin --max-requests 50 --workers 2 --user=kohadev-koha --group kohadev-koha --pid /var/run/koha/kohadev/plack.pid --daemonize --access-log /var/log/koha/kohadev/plack.log --error-log /var/log/koha/kohadev/plack-error.log -E deployment --socket /var/run/koha/kohadev/plack.sock /etc/koha/sites/kohadev/plack.psgi
  Run on Fri Jan 8 14:16:49 2016
Reported on Fri Jan 8 14:23:09 2016

Filename/usr/share/perl5/Moo.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11110.2ms10.3msMoo::::BEGIN@3Moo::BEGIN@3
111540µs602µsMoo::::BEGIN@5Moo::BEGIN@5
222188µs784µsMoo::::importMoo::import
771161µs7.53msMoo::::hasMoo::has
822134µs1.76msMoo::::_constructor_maker_forMoo::_constructor_maker_for
92159µs107µsMoo::::_accessor_maker_forMoo::_accessor_maker_for
124154µs211µsMoo::::_install_trackedMoo::_install_tracked
11115µs84µsMoo::::BEGIN@4Moo::BEGIN@4
71113µs13µsMoo::::_maybe_reset_handlemooseMoo::_maybe_reset_handlemoose
11112µs21µsMoo::::BEGIN@73Moo::BEGIN@73
11111µs26µsMoo::::BEGIN@108Moo::BEGIN@108
1119µs16µsMoo::::__ANON__[:183]Moo::__ANON__[:183]
0000s0sMoo::::__ANON__[:33]Moo::__ANON__[:33]
0000s0sMoo::::__ANON__[:38]Moo::__ANON__[:38]
0000s0sMoo::::__ANON__[:59]Moo::__ANON__[:59]
0000s0sMoo::::__ANON__[:65]Moo::__ANON__[:65]
0000s0sMoo::::_concrete_methods_ofMoo::_concrete_methods_of
0000s0sMoo::::_set_superclassesMoo::_set_superclasses
0000s0sMoo::::afterMoo::after
0000s0sMoo::::aroundMoo::around
0000s0sMoo::::beforeMoo::before
0000s0sMoo::::extendsMoo::extends
0000s0sMoo::::unimportMoo::unimport
0000s0sMoo::::withMoo::with
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Moo;
2
3310.3ms
# spent 10.3ms (10.2+82µs) within Moo::BEGIN@3 which was called: # once (10.2ms+82µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 3
use strictures 1;
# spent 10.3ms making 1 call to Moo::BEGIN@3 # spent 58µs making 1 call to strictures::import # spent 25µs making 1 call to strictures::VERSION
42152µs
# spent 84µs (15+69) within Moo::BEGIN@4 which was called: # once (15µs+69µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 4
use Moo::_Utils;
# spent 84µs making 1 call to Moo::BEGIN@4 # spent 69µs making 1 call to Exporter::import
51602µs
# spent 602µs (540+62) within Moo::BEGIN@5 which was called: # once (540µs+62µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 5
use Import::Into;
# spent 602µs making 1 call to Moo::BEGIN@5
6
7our $VERSION = '1.006001';
8$VERSION = eval $VERSION;
# spent 0s executing statements in string eval
9
10require Moo::sification;
11
12our %MAKERS;
13
14
# spent 211µs (54+156) within Moo::_install_tracked which was called 12 times, avg 18µs/call: # 6 times (21µs+66µs) by Moo::import at line 65, avg 15µs/call # 2 times (16µs+44µs) by Moo::import at line 33, avg 30µs/call # 2 times (10µs+22µs) by Moo::import at line 59, avg 16µs/call # 2 times (7µs+24µs) by Moo::import at line 38, avg 16µs/call
sub _install_tracked {
15 my ($target, $name, $code) = @_;
16 $MAKERS{$target}{exports}{$name} = $code;
1712156µs _install_coderef "${target}::${name}" => "Moo::${name}" => $code;
# spent 156µs making 12 calls to Moo::_Utils::_install_coderef, avg 13µs/call
18}
19
20
# spent 784µs (188+595) within Moo::import which was called 2 times, avg 392µs/call: # once (114µs+307µs) by Method::Generate::Constructor::BEGIN@202 at line 202 of Method/Generate/Constructor.pm # once (74µs+288µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 29 of DBIx/Class/Storage/BlockRunner.pm
sub import {
21 my $target = caller;
22 my $class = shift;
23248µs _set_loaded(caller);
# spent 48µs making 2 calls to Moo::_Utils::_set_loaded, avg 24µs/call
242332µs strictures->import::into(1);
# spent 332µs making 2 calls to import::into, avg 166µs/call
25 if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) {
26 die "Cannot import Moo into a role";
27 }
28 $MAKERS{$target} ||= {};
29 _install_tracked $target => extends => sub {
30 $class->_set_superclasses($target, @_);
31 $class->_maybe_reset_handlemoose($target);
32 return;
33260µs };
# spent 60µs making 2 calls to Moo::_install_tracked, avg 30µs/call
34 _install_tracked $target => with => sub {
35 require Moo::Role;
36 Moo::Role->apply_roles_to_package($target, @_);
37 $class->_maybe_reset_handlemoose($target);
38231µs };
# spent 31µs making 2 calls to Moo::_install_tracked, avg 16µs/call
39
# spent 7.53ms (161µs+7.37) within Moo::has which was called 7 times, avg 1.08ms/call: # once (23µs+4.53ms) by DBIx::Class::Storage::BEGIN@16 at line 78 of DBIx/Class/Storage/BlockRunner.pm # once (39µs+1.78ms) by DBIx::Class::Storage::BEGIN@16 at line 46 of DBIx/Class/Storage/BlockRunner.pm # once (31µs+455µs) by DBIx::Class::Storage::BEGIN@16 at line 92 of DBIx/Class/Storage/BlockRunner.pm # once (15µs+292µs) by DBIx::Class::Storage::BEGIN@16 at line 66 of DBIx/Class/Storage/BlockRunner.pm # once (21µs+117µs) by DBIx::Class::Storage::BEGIN@16 at line 57 of DBIx/Class/Storage/BlockRunner.pm # once (18µs+98µs) by DBIx::Class::Storage::BEGIN@16 at line 51 of DBIx/Class/Storage/BlockRunner.pm # once (14µs+100µs) by DBIx::Class::Storage::BEGIN@16 at line 73 of DBIx/Class/Storage/BlockRunner.pm
_install_tracked $target => has => sub {
40 my $name_proto = shift;
41 my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
42 if (@_ % 2 != 0) {
43 require Carp;
44 Carp::croak("Invalid options for " . join(', ', map "'$_'", @name_proto)
45 . " attribute(s): even number of arguments expected, got " . scalar @_)
46 }
47 my %spec = @_;
48 foreach my $name (@name_proto) {
49 # Note that when multiple attributes specified, each attribute
50 # needs a separate \%specs hashref
51 my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
52141.64ms $class->_constructor_maker_for($target)
# spent 1.58ms making 7 calls to Moo::_constructor_maker_for, avg 225µs/call # spent 66µs making 7 calls to Method::Generate::Constructor::register_attribute_specs, avg 9µs/call
53 ->register_attribute_specs($name, $spec_ref);
54145.72ms $class->_accessor_maker_for($target)
# spent 5.70ms making 7 calls to Method::Generate::Accessor::generate_method, avg 815µs/call # spent 14µs making 7 calls to Moo::_accessor_maker_for, avg 2µs/call
55 ->generate_method($target, $name, $spec_ref);
56713µs $class->_maybe_reset_handlemoose($target);
# spent 13µs making 7 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
57 }
58 return;
59232µs };
# spent 32µs making 2 calls to Moo::_install_tracked, avg 16µs/call
60 foreach my $type (qw(before after around)) {
61 _install_tracked $target => $type => sub {
62 require Class::Method::Modifiers;
63 _install_modifier($target, $type, @_);
64 return;
65688µs };
# spent 88µs making 6 calls to Moo::_install_tracked, avg 15µs/call
66 }
67 return if $MAKERS{$target}{is_class}; # already exported into this package
6825µs my $stash = _getstash($target);
# spent 5µs making 2 calls to Moo::_Utils::_getstash, avg 2µs/call
69 my @not_methods = map { *$_{CODE}||() } grep !ref($_), values %$stash;
70 @{$MAKERS{$target}{not_methods}={}}{@not_methods} = @not_methods;
71 $MAKERS{$target}{is_class} = 1;
72 {
73230µs
# spent 21µs (12+9) within Moo::BEGIN@73 which was called: # once (12µs+9µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 73
no strict 'refs';
# spent 21µs making 1 call to Moo::BEGIN@73 # spent 9µs making 1 call to strict::unimport
74 @{"${target}::ISA"} = do {
75 require Moo::Object; ('Moo::Object');
76 } unless @{"${target}::ISA"};
77 }
78 if ($INC{'Moo/HandleMoose.pm'}) {
79 Moo::HandleMoose::inject_fake_metaclass_for($target);
80 }
81}
82
83sub unimport {
84 my $target = caller;
85 _unimport_coderefs($target, $MAKERS{$target});
86}
87
88sub _set_superclasses {
89 my $class = shift;
90 my $target = shift;
91 foreach my $superclass (@_) {
92 _load_module($superclass);
93 if ($INC{'Role/Tiny.pm'} && Role::Tiny->is_role($superclass)) {
94 require Carp;
95 Carp::croak("Can't extend role '$superclass'");
96 }
97 }
98 # Can't do *{...} = \@_ or 5.10.0's mro.pm stops seeing @ISA
99 @{*{_getglob("${target}::ISA")}{ARRAY}} = @_;
100 if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
101 delete _getstash($target)->{new};
102 Moo->_constructor_maker_for($target)
103 ->register_attribute_specs(%{$old->all_attribute_specs});
104 }
105 elsif (!$target->isa('Moo::Object')) {
106 Moo->_constructor_maker_for($target);
107 }
108241µs
# spent 26µs (11+15) within Moo::BEGIN@108 which was called: # once (11µs+15µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 108
no warnings 'once'; # piss off. -- mst
# spent 26µs making 1 call to Moo::BEGIN@108 # spent 15µs making 1 call to warnings::unimport
109 $Moo::HandleMoose::MOUSE{$target} = [
110 grep defined, map Mouse::Util::find_meta($_), @_
111 ] if Mouse::Util->can('find_meta');
112}
113
114
# spent 13µs within Moo::_maybe_reset_handlemoose which was called 7 times, avg 2µs/call: # 7 times (13µs+0s) by Moo::has at line 56, avg 2µs/call
sub _maybe_reset_handlemoose {
115 my ($class, $target) = @_;
116 if ($INC{"Moo/HandleMoose.pm"}) {
117 Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
118 }
119}
120
121
# spent 107µs (59+47) within Moo::_accessor_maker_for which was called 9 times, avg 12µs/call: # 7 times (14µs+0s) by Moo::has at line 54, avg 2µs/call # 2 times (46µs+47µs) by Moo::_constructor_maker_for at line 201, avg 47µs/call
sub _accessor_maker_for {
122 my ($class, $target) = @_;
123 return unless $MAKERS{$target};
124 $MAKERS{$target}{accessor} ||= do {
125 my $maker_class = do {
126 if (my $m = do {
127 require Sub::Defer;
128412µs if (my $defer_target =
# spent 8µs making 2 calls to Sub::Defer::defer_info, avg 4µs/call # spent 4µs making 2 calls to UNIVERSAL::can, avg 2µs/call
129 (Sub::Defer::defer_info($target->can('new'))||[])->[0]
130 ) {
131 my ($pkg) = ($defer_target =~ /^(.*)::[^:]+$/);
132 $MAKERS{$pkg} && $MAKERS{$pkg}{accessor};
133 } else {
134 undef;
135 }
136 }) {
137 ref($m);
138 } else {
139 require Method::Generate::Accessor;
140 'Method::Generate::Accessor'
141 }
142 };
143236µs $maker_class->new;
# spent 36µs making 2 calls to Moo::Object::new, avg 18µs/call
144 }
145}
146
147
# spent 1.76ms (134µs+1.63) within Moo::_constructor_maker_for which was called 8 times, avg 220µs/call: # 7 times (77µs+1.50ms) by Moo::has at line 52, avg 225µs/call # once (57µs+128µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 208 of Method/Generate/Constructor.pm
sub _constructor_maker_for {
148 my ($class, $target) = @_;
149 return unless $MAKERS{$target};
150 $MAKERS{$target}{constructor} ||= do {
151 require Method::Generate::Constructor;
152 require Sub::Defer;
153 my ($moo_constructor, $con);
154
15528µs my $t_new = $target->can('new');
# spent 8µs making 2 calls to UNIVERSAL::can, avg 4µs/call
156 if ($t_new) {
15738µs if ($t_new == Moo::Object->can('new')) {
# spent 4µs making 1 call to Sub::Defer::defer_info # spent 4µs making 2 calls to UNIVERSAL::can, avg 2µs/call
158 $moo_constructor = 1;
159 }
160 elsif (my $defer_target = (Sub::Defer::defer_info($t_new)||[])->[0]) {
161 my ($pkg) = ($defer_target =~ /^(.*)::[^:]+$/);
162 if ($MAKERS{$pkg}) {
163 $moo_constructor = 1;
164 $con = $MAKERS{$pkg}{constructor};
165 }
166 }
167 }
168 else {
169 $moo_constructor = 1; # no other constructor, make a Moo one
170 }
171 ($con ? ref($con) : 'Method::Generate::Constructor')
172 ->new(
173 package => $target,
174 accessor_generator => $class->_accessor_maker_for($target),
175 $moo_constructor ? (
176 $con ? (construction_string => $con->construction_string) : ()
177 ) : (
178
# spent 16µs (9+7) within Moo::__ANON__[/usr/share/perl5/Moo.pm:183] which was called: # once (9µs+7µs) by Method::Generate::Constructor::_build_construction_string at line 68 of Method/Generate/Constructor.pm
construction_builder => sub {
17917µs '$class->next::method('
# spent 7µs making 1 call to UNIVERSAL::can
180 .($target->can('FOREIGNBUILDARGS') ?
181 '$class->FOREIGNBUILDARGS(@_)' : '@_')
182 .')'
183 },
184 ),
185 subconstructor_handler => (
186 ' if ($Moo::MAKERS{$class}) {'."\n"
187 .' if ($Moo::MAKERS{$class}{constructor}) {'."\n"
188 .' return $class->'.$target.'::SUPER::new(@_);'."\n"
189 .' }'."\n"
190 .' '.$class.'->_constructor_maker_for($class);'."\n"
191 .' return $class->new(@_)'.";\n"
192 .' } elsif ($INC{"Moose.pm"} and my $meta = Class::MOP::get_metaclass_by_name($class)) {'."\n"
193 .' return $meta->new_object('."\n"
194 .' $class->can("BUILDARGS") ? $class->BUILDARGS(@_)'."\n"
195 .' : $class->Moo::Object::BUILDARGS(@_)'."\n"
196 .' );'."\n"
197 .' }'."\n"
198 ),
199 )
200 ->install_delayed
20181.56ms ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
# spent 1.36ms making 2 calls to Method::Generate::Constructor::new, avg 682µs/call # spent 93µs making 2 calls to Moo::_accessor_maker_for, avg 47µs/call # spent 92µs making 2 calls to Method::Generate::Constructor::install_delayed, avg 46µs/call # spent 13µs making 2 calls to Method::Generate::Constructor::register_attribute_specs, avg 6µs/call
202 }
203}
204
205sub _concrete_methods_of {
206 my ($me, $role) = @_;
207 my $makers = $MAKERS{$role};
208 # grab role symbol table
209 my $stash = _getstash($role);
210 # reverse so our keys become the values (captured coderefs) in case
211 # they got copied or re-used since
212 my $not_methods = { reverse %{$makers->{not_methods}||{}} };
213 +{
214 # grab all code entries that aren't in the not_methods list
215 map {
216 my $code = *{$stash->{$_}}{CODE};
217 ( ! $code or exists $not_methods->{$code} ) ? () : ($_ => $code)
218 } grep !ref($stash->{$_}), keys %$stash
219 };
220}
221
2221;
223__END__