← 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:31:06 2016
Reported on Fri Jan 8 14:33:29 2016

Filename/usr/share/perl5/Moo.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111493µs560µsMoo::::BEGIN@5Moo::BEGIN@5
222352µs1.01msMoo::::importMoo::import
771124µs6.62msMoo::::hasMoo::has
822109µs1.57msMoo::::_constructor_maker_forMoo::_constructor_maker_for
124153µs215µsMoo::::_install_trackedMoo::_install_tracked
92150µs86µsMoo::::_accessor_maker_forMoo::_accessor_maker_for
11122µs80µsMoo::::BEGIN@3Moo::BEGIN@3
11115µs28µsMoo::::BEGIN@73Moo::BEGIN@73
11113µs30µsMoo::::BEGIN@108Moo::BEGIN@108
71112µs12µsMoo::::_maybe_reset_handlemooseMoo::_maybe_reset_handlemoose
11112µs61µsMoo::::BEGIN@4Moo::BEGIN@4
1115µs10µ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
33139µs
# spent 80µs (22+58) within Moo::BEGIN@3 which was called: # once (22µs+58µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 3
use strictures 1;
# spent 80µs making 1 call to Moo::BEGIN@3 # spent 33µs making 1 call to strictures::import # spent 26µs making 1 call to strictures::VERSION
42111µs
# spent 61µs (12+50) within Moo::BEGIN@4 which was called: # once (12µs+50µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 4
use Moo::_Utils;
# spent 61µs making 1 call to Moo::BEGIN@4 # spent 50µs making 1 call to Exporter::import
51560µs
# spent 560µs (493+67) within Moo::BEGIN@5 which was called: # once (493µs+67µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 5
use Import::Into;
# spent 560µ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 215µs (53+162) within Moo::_install_tracked which was called 12 times, avg 18µs/call: # 6 times (21µs+63µs) by Moo::import at line 65, avg 14µs/call # 2 times (18µs+44µs) by Moo::import at line 33, avg 31µs/call # 2 times (7µs+32µs) by Moo::import at line 59, avg 20µs/call # 2 times (8µs+23µs) by Moo::import at line 38, avg 15µs/call
sub _install_tracked {
15 my ($target, $name, $code) = @_;
16 $MAKERS{$target}{exports}{$name} = $code;
1712162µs _install_coderef "${target}::${name}" => "Moo::${name}" => $code;
# spent 162µs making 12 calls to Moo::_Utils::_install_coderef, avg 13µs/call
18}
19
20
# spent 1.01ms (352µs+656µs) within Moo::import which was called 2 times, avg 504µs/call: # once (278µs+375µs) by Method::Generate::Constructor::BEGIN@202 at line 202 of Method/Generate/Constructor.pm # once (74µs+281µ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;
23290µs _set_loaded(caller);
# spent 90µs making 2 calls to Moo::_Utils::_set_loaded, avg 45µs/call
242347µs strictures->import::into(1);
# spent 347µs making 2 calls to import::into, avg 173µ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;
33262µs };
# spent 62µs making 2 calls to Moo::_install_tracked, avg 31µ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 15µs/call
39
# spent 6.62ms (124µs+6.50) within Moo::has which was called 7 times, avg 946µs/call: # once (16µs+3.76ms) by DBIx::Class::Storage::BEGIN@16 at line 57 of DBIx/Class/Storage/BlockRunner.pm # once (29µs+1.55ms) by DBIx::Class::Storage::BEGIN@16 at line 46 of DBIx/Class/Storage/BlockRunner.pm # once (18µs+375µs) by DBIx::Class::Storage::BEGIN@16 at line 92 of DBIx/Class/Storage/BlockRunner.pm # once (18µs+311µs) by DBIx::Class::Storage::BEGIN@16 at line 66 of DBIx/Class/Storage/BlockRunner.pm # once (15µs+297µs) by DBIx::Class::Storage::BEGIN@16 at line 78 of DBIx/Class/Storage/BlockRunner.pm # once (14µs+110µs) by DBIx::Class::Storage::BEGIN@16 at line 73 of DBIx/Class/Storage/BlockRunner.pm # once (15µs+90µs) by DBIx::Class::Storage::BEGIN@16 at line 51 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.53ms $class->_constructor_maker_for($target)
# spent 1.36ms making 7 calls to Moo::_constructor_maker_for, avg 195µs/call # spent 167µs making 7 calls to Method::Generate::Constructor::register_attribute_specs, avg 24µs/call
53 ->register_attribute_specs($name, $spec_ref);
54144.95ms $class->_accessor_maker_for($target)
# spent 4.94ms making 7 calls to Method::Generate::Accessor::generate_method, avg 706µs/call # spent 14µs making 7 calls to Moo::_accessor_maker_for, avg 2µs/call
55 ->generate_method($target, $name, $spec_ref);
56712µs $class->_maybe_reset_handlemoose($target);
# spent 12µs making 7 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
57 }
58 return;
59239µs };
# spent 39µs making 2 calls to Moo::_install_tracked, avg 20µ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;
65683µs };
# spent 83µs making 6 calls to Moo::_install_tracked, avg 14µ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 {
73241µs
# spent 28µs (15+13) within Moo::BEGIN@73 which was called: # once (15µs+13µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 73
no strict 'refs';
# spent 28µs making 1 call to Moo::BEGIN@73 # spent 13µ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 }
108247µs
# spent 30µs (13+17) within Moo::BEGIN@108 which was called: # once (13µs+17µs) by DBIx::Class::Storage::BlockRunner::BEGIN@16 at line 108
no warnings 'once'; # piss off. -- mst
# spent 30µs making 1 call to Moo::BEGIN@108 # spent 17µ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 {
115 my ($class, $target) = @_;
116 if ($INC{"Moo/HandleMoose.pm"}) {
117 Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
118 }
119}
120
121
# spent 86µs (50+36) within Moo::_accessor_maker_for which was called 9 times, avg 10µs/call: # 7 times (14µs+0s) by Moo::has at line 54, avg 2µs/call # 2 times (35µs+36µs) by Moo::_constructor_maker_for at line 201, avg 36µ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;
12849µs if (my $defer_target =
# spent 6µs making 2 calls to Sub::Defer::defer_info, avg 3µ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 {
134 undef;
135 }
136 }) {
137 ref($m);
138 } else {
139 require Method::Generate::Accessor;
140 'Method::Generate::Accessor'
141 }
142 };
143228µs $maker_class->new;
# spent 28µs making 2 calls to Moo::Object::new, avg 14µs/call
144 }
145}
146
147
# spent 1.57ms (109µs+1.46) within Moo::_constructor_maker_for which was called 8 times, avg 196µs/call: # 7 times (50µs+1.31ms) by Moo::has at line 52, avg 195µs/call # once (59µs+147µ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
15524µs my $t_new = $target->can('new');
# spent 4µs making 2 calls to UNIVERSAL::can, avg 2µs/call
156 if ($t_new) {
15737µs if ($t_new == Moo::Object->can('new')) {
# spent 5µ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 10µ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 {
17914µ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
20181.40ms ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
# spent 1.21ms making 2 calls to Method::Generate::Constructor::new, avg 603µs/call # spent 109µs making 2 calls to Method::Generate::Constructor::install_delayed, avg 54µs/call # spent 72µs making 2 calls to Moo::_accessor_maker_for, avg 36µs/call # spent 12µ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__