← 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 13:01:18 2016
Reported on Fri Jan 8 13:01:36 2016

Filename/usr/share/perl5/Moo.pm
StatementsExecuted 264 statements in 2.32ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111419µs470µsMoo::::BEGIN@5Moo::BEGIN@5
222180µs717µsMoo::::importMoo::import
771126µs2.82msMoo::::hasMoo::has
82294µs1.35msMoo::::_constructor_maker_forMoo::_constructor_maker_for
124152µs210µsMoo::::_install_trackedMoo::_install_tracked
92141µs80µsMoo::::_accessor_maker_forMoo::_accessor_maker_for
11119µs70µsMoo::::BEGIN@3Moo::BEGIN@3
71112µs12µsMoo::::_maybe_reset_handlemooseMoo::_maybe_reset_handlemoose
11111µs18µsMoo::::BEGIN@73Moo::BEGIN@73
11110µs24µsMoo::::BEGIN@108Moo::BEGIN@108
1119µs55µsMoo::::BEGIN@4Moo::BEGIN@4
1115µs9µ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
3336µs3121µs
# spent 70µs (19+51) within Moo::BEGIN@3 which was called: # once (19µs+51µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 3
use strictures 1;
# spent 70µs making 1 call to Moo::BEGIN@3 # spent 28µs making 1 call to strictures::import # spent 23µs making 1 call to strictures::VERSION
4272µs2100µs
# spent 55µs (9+46) within Moo::BEGIN@4 which was called: # once (9µs+46µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 4
use Moo::_Utils;
# spent 55µs making 1 call to Moo::BEGIN@4 # spent 46µs making 1 call to Exporter::import
52626µs1470µs
# spent 470µs (419+50) within Moo::BEGIN@5 which was called: # once (419µs+50µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 5
use Import::Into;
# spent 470µs making 1 call to Moo::BEGIN@5
6
71400nsour $VERSION = '1.006001';
8115µs$VERSION = eval $VERSION;
# spent 2µs executing statements in string eval
9
101104µsrequire Moo::sification;
11
121200nsour %MAKERS;
13
14
# spent 210µs (52+157) within Moo::_install_tracked which was called 12 times, avg 17µs/call: # 6 times (21µs+70µs) by Moo::import at line 65, avg 15µs/call # 2 times (13µs+40µs) by Moo::import at line 33, avg 27µs/call # 2 times (11µs+24µs) by Moo::import at line 59, avg 17µs/call # 2 times (7µs+24µs) by Moo::import at line 38, avg 15µs/call
sub _install_tracked {
15126µs my ($target, $name, $code) = @_;
161215µs $MAKERS{$target}{exports}{$name} = $code;
171234µs12157µs _install_coderef "${target}::${name}" => "Moo::${name}" => $code;
# spent 157µs making 12 calls to Moo::_Utils::_install_coderef, avg 13µs/call
18}
19
20
# spent 717µs (180+537) within Moo::import which was called 2 times, avg 358µs/call: # once (116µs+302µs) by Method::Generate::Constructor::BEGIN@202 at line 202 of Method/Generate/Constructor.pm # once (64µs+234µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 29 of DBIx/Class/Storage/BlockRunner.pm
sub import {
2122µs my $target = caller;
222800ns my $class = shift;
2324µs243µs _set_loaded(caller);
# spent 43µs making 2 calls to Moo::_Utils::_set_loaded, avg 22µs/call
24213µs2279µs strictures->import::into(1);
# spent 279µs making 2 calls to import::into, avg 140µs/call
2521µs if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) {
26 die "Cannot import Moo into a role";
27 }
2822µs $MAKERS{$target} ||= {};
29 _install_tracked $target => extends => sub {
30 $class->_set_superclasses($target, @_);
31 $class->_maybe_reset_handlemoose($target);
32 return;
3328µs253µs };
# spent 53µs making 2 calls to Moo::_install_tracked, avg 27µ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);
3826µs231µs };
# spent 31µs making 2 calls to Moo::_install_tracked, avg 15µs/call
39
# spent 2.82ms (126µs+2.70) within Moo::has which was called 7 times, avg 403µs/call: # once (26µs+1.32ms) by DBIx::Class::Storage::BEGIN@16 at line 46 of DBIx/Class/Storage/BlockRunner.pm # once (16µs+407µs) by DBIx::Class::Storage::BEGIN@16 at line 66 of DBIx/Class/Storage/BlockRunner.pm # once (18µs+392µs) by DBIx::Class::Storage::BEGIN@16 at line 78 of DBIx/Class/Storage/BlockRunner.pm # once (23µs+268µs) by DBIx::Class::Storage::BEGIN@16 at line 92 of DBIx/Class/Storage/BlockRunner.pm # once (14µs+120µs) by DBIx::Class::Storage::BEGIN@16 at line 57 of DBIx/Class/Storage/BlockRunner.pm # once (14µs+99µs) by DBIx::Class::Storage::BEGIN@16 at line 73 of DBIx/Class/Storage/BlockRunner.pm # once (14µs+93µs) by DBIx::Class::Storage::BEGIN@16 at line 51 of DBIx/Class/Storage/BlockRunner.pm
_install_tracked $target => has => sub {
4072µs my $name_proto = shift;
4176µs my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
4274µs 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 }
47715µs my %spec = @_;
4874µs foreach my $name (@name_proto) {
49 # Note that when multiple attributes specified, each attribute
50 # needs a separate \%specs hashref
5175µs my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
52716µs141.23ms $class->_constructor_maker_for($target)
# spent 1.18ms making 7 calls to Moo::_constructor_maker_for, avg 168µs/call # spent 56µs making 7 calls to Method::Generate::Constructor::register_attribute_specs, avg 8µs/call
53 ->register_attribute_specs($name, $spec_ref);
54717µs141.45ms $class->_accessor_maker_for($target)
# spent 1.44ms making 7 calls to Method::Generate::Accessor::generate_method, avg 206µs/call # spent 12µs making 7 calls to Moo::_accessor_maker_for, avg 2µs/call
55 ->generate_method($target, $name, $spec_ref);
56718µs712µs $class->_maybe_reset_handlemoose($target);
# spent 12µs making 7 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
57 }
58721µs return;
5929µs234µs };
# spent 34µs making 2 calls to Moo::_install_tracked, avg 17µs/call
6022µs 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;
65628µs691µs };
# spent 91µs making 6 calls to Moo::_install_tracked, avg 15µs/call
66 }
6721µs return if $MAKERS{$target}{is_class}; # already exported into this package
6822µs24µs my $stash = _getstash($target);
# spent 4µs making 2 calls to Moo::_Utils::_getstash, avg 2µs/call
69225µs my @not_methods = map { *$_{CODE}||() } grep !ref($_), values %$stash;
70231µs @{$MAKERS{$target}{not_methods}={}}{@not_methods} = @not_methods;
7121µs $MAKERS{$target}{is_class} = 1;
72 {
734268µs225µs
# spent 18µs (11+7) within Moo::BEGIN@73 which was called: # once (11µs+7µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 73
no strict 'refs';
# spent 18µs making 1 call to Moo::BEGIN@73 # spent 7µs making 1 call to strict::unimport
74 @{"${target}::ISA"} = do {
7542µs require Moo::Object; ('Moo::Object');
76218µs } unless @{"${target}::ISA"};
77 }
78210µs 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 }
1082698µs238µs
# spent 24µs (10+14) within Moo::BEGIN@108 which was called: # once (10µs+14µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 108
no warnings 'once'; # piss off. -- mst
# spent 24µs making 1 call to Moo::BEGIN@108 # spent 14µ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 12µs within Moo::_maybe_reset_handlemoose which was called 7 times, avg 2µs/call: # 7 times (12µs+0s) by Moo::has at line 56, avg 2µs/call
sub _maybe_reset_handlemoose {
11573µs my ($class, $target) = @_;
116714µs if ($INC{"Moo/HandleMoose.pm"}) {
117 Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
118 }
119}
120
121
# spent 80µs (41+38) within Moo::_accessor_maker_for which was called 9 times, avg 9µs/call: # 7 times (12µs+0s) by Moo::has at line 54, avg 2µs/call # 2 times (30µs+38µs) by Moo::_constructor_maker_for at line 201, avg 34µs/call
sub _accessor_maker_for {
12293µs my ($class, $target) = @_;
12393µs return unless $MAKERS{$target};
124919µs $MAKERS{$target}{accessor} ||= do {
1252800ns my $maker_class = do {
1262800ns if (my $m = do {
1272500ns require Sub::Defer;
128212µs47µs if (my $defer_target =
# spent 4µs making 2 calls to Sub::Defer::defer_info, avg 2µs/call # spent 3µs making 2 calls to UNIVERSAL::can, avg 1µ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 {
1342300ns undef;
135 }
136 }) {
137 ref($m);
138 } else {
1392900ns require Method::Generate::Accessor;
1402700ns 'Method::Generate::Accessor'
141 }
142 };
14326µs232µs $maker_class->new;
# spent 32µs making 2 calls to Moo::Object::new, avg 16µs/call
144 }
145}
146
147
# spent 1.35ms (94µs+1.26) within Moo::_constructor_maker_for which was called 8 times, avg 169µs/call: # 7 times (42µs+1.14ms) by Moo::has at line 52, avg 168µs/call # once (53µs+120µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 208 of Method/Generate/Constructor.pm
sub _constructor_maker_for {
14883µs my ($class, $target) = @_;
14983µs return unless $MAKERS{$target};
150821µs $MAKERS{$target}{constructor} ||= do {
15121µs require Method::Generate::Constructor;
1522700ns require Sub::Defer;
1532300ns my ($moo_constructor, $con);
154
155222µs24µs my $t_new = $target->can('new');
# spent 4µs making 2 calls to UNIVERSAL::can, avg 2µs/call
15621µs if ($t_new) {
157213µs36µs if ($t_new == Moo::Object->can('new')) {
# spent 4µs making 1 call to Sub::Defer::defer_info # spent 2µs making 2 calls to UNIVERSAL::can, avg 1µ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 9µs (5+4) within Moo::__ANON__[/usr/share/perl5/Moo.pm:183] which was called: # once (5µs+4µs) by Method::Generate::Constructor::_build_construction_string at line 68 of Method/Generate/Constructor.pm
construction_builder => sub {
179111µs14µs '$class->next::method('
# spent 4µ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
201228µs81.20ms ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
# spent 1.05ms making 2 calls to Method::Generate::Constructor::new, avg 526µs/call # spent 74µs making 2 calls to Method::Generate::Constructor::install_delayed, avg 37µs/call # spent 68µs making 2 calls to Moo::_accessor_maker_for, avg 34µs/call # spent 10µs making 2 calls to Method::Generate::Constructor::register_attribute_specs, avg 5µ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
22212µs1;
223__END__