← Index
NYTProf Performance Profile   « block view • line view • sub view »
For /usr/share/koha/opac/cgi-bin/opac/opac-search.pl
  Run on Tue Oct 15 17:10:45 2013
Reported on Tue Oct 15 17:12:25 2013

Filename/usr/share/perl5/Class/Accessor.pm
StatementsExecuted 514 statements in 2.86ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
411567µs832µsClass::Accessor::::_mk_accessorsClass::Accessor::_mk_accessors
181198µs98µsClass::Accessor::::make_accessorClass::Accessor::make_accessor
44473µs905µsClass::Accessor::::mk_accessorsClass::Accessor::mk_accessors
181153µs53µsClass::Accessor::::accessor_name_forClass::Accessor::accessor_name_for
44446µs46µsClass::Accessor::::importClass::Accessor::import
71140µs40µsClass::Accessor::::getClass::Accessor::get
181138µs38µsClass::Accessor::::mutator_name_forClass::Accessor::mutator_name_for
71125µs25µsClass::Accessor::::setClass::Accessor::set
11121µs27µsClass::Accessor::::BEGIN@3Class::Accessor::BEGIN@3
11111µs11µsClass::Accessor::::BEGIN@218Class::Accessor::BEGIN@218
11110µs30µsClass::Accessor::::BEGIN@27Class::Accessor::BEGIN@27
0000s0sClass::Accessor::::__ANON__[:182]Class::Accessor::__ANON__[:182]
0000s0sClass::Accessor::::__ANON__[:198]Class::Accessor::__ANON__[:198]
0000s0sClass::Accessor::::__ANON__[:214]Class::Accessor::__ANON__[:214]
0000s0sClass::Accessor::::__ANON__[:37]Class::Accessor::__ANON__[:37]
0000s0sClass::Accessor::::__ANON__[:43]Class::Accessor::__ANON__[:43]
0000s0sClass::Accessor::::_carpClass::Accessor::_carp
0000s0sClass::Accessor::::_croakClass::Accessor::_croak
0000s0sClass::Accessor::::best_practice_accessor_name_forClass::Accessor::best_practice_accessor_name_for
0000s0sClass::Accessor::::best_practice_mutator_name_forClass::Accessor::best_practice_mutator_name_for
0000s0sClass::Accessor::::follow_best_practiceClass::Accessor::follow_best_practice
0000s0sClass::Accessor::::make_ro_accessorClass::Accessor::make_ro_accessor
0000s0sClass::Accessor::::make_wo_accessorClass::Accessor::make_wo_accessor
0000s0sClass::Accessor::::mk_ro_accessorsClass::Accessor::mk_ro_accessors
0000s0sClass::Accessor::::mk_wo_accessorsClass::Accessor::mk_wo_accessors
0000s0sClass::Accessor::::newClass::Accessor::new
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Class::Accessor;
2126µsrequire 5.00502;
33136µs234µs
# spent 27µs (21+7) within Class::Accessor::BEGIN@3 which was called: # once (21µs+7µs) by base::import at line 3
use strict;
# spent 27µs making 1 call to Class::Accessor::BEGIN@3 # spent 7µs making 1 call to strict::import
41800ns$Class::Accessor::VERSION = '0.34';
5
6sub new {
7 my($proto, $fields) = @_;
8 my($class) = ref $proto || $proto;
9
10 $fields = {} unless defined $fields;
11
12 # make a copy of $fields.
13 bless {%$fields}, $class;
14}
15
16
# spent 905µs (73+832) within Class::Accessor::mk_accessors which was called 4 times, avg 226µs/call: # once (18µs+306µs) by C4::Output::BEGIN@36 at line 39 of /usr/share/koha/lib/C4/Templates.pm # once (17µs+298µs) by MARC::Charset::Table::BEGIN@38 at line 10 of MARC/Charset/Code.pm # once (18µs+216µs) by C4::Search::parseQuery at line 51 of /usr/share/koha/lib/Koha/QueryParser/Driver/PQF.pm # once (20µs+12µs) by C4::Biblio::BEGIN@38 at line 52 of /usr/share/koha/lib/C4/Linker.pm
sub mk_accessors {
17416µs my($self, @fields) = @_;
18
19450µs4832µs $self->_mk_accessors('rw', @fields);
# spent 832µs making 4 calls to Class::Accessor::_mk_accessors, avg 208µs/call
20}
21
222110µs151µsif (eval { require Sub::Name }) {
# spent 51µs making 1 call to Exporter::import
23 Sub::Name->import;
24}
25
26{
2741.26ms251µs
# spent 30µs (10+21) within Class::Accessor::BEGIN@27 which was called: # once (10µs+21µs) by base::import at line 27
no strict 'refs';
# spent 30µs making 1 call to Class::Accessor::BEGIN@27 # spent 21µs making 1 call to strict::unimport
28
29
# spent 46µs within Class::Accessor::import which was called 4 times, avg 12µs/call: # once (13µs+0s) by C4::Output::BEGIN@36 at line 36 of /usr/share/koha/lib/C4/Output.pm # once (12µs+0s) by C4::Auth::BEGIN@29 at line 29 of /usr/share/koha/lib/C4/Auth.pm # once (12µs+0s) by C4::Biblio::BEGIN@38 at line 38 of /usr/share/koha/lib/C4/Biblio.pm # once (9µs+0s) by MARC::Charset::Table::BEGIN@38 at line 38 of MARC/Charset/Table.pm
sub import {
30414µs my ($class, @what) = @_;
3148µs my $caller = caller;
32448µs for (@what) {
33 if (/^(?:antlers|moose-?like)$/i) {
34 *{"${caller}::has"} = sub {
35 my ($f, %args) = @_;
36 $caller->_mk_accessors(($args{is}||"rw"), $f);
37 };
38 *{"${caller}::extends"} = sub {
39 @{"${caller}::ISA"} = @_;
40 unless (grep $_->can("_mk_accessors"), @_) {
41 push @{"${caller}::ISA"}, $class;
42 }
43 };
44 # we'll use their @ISA as a default, in case it happens to be
45 # set already
46 &{"${caller}::extends"}(@{"${caller}::ISA"});
47 }
48 }
49 }
50
51 sub follow_best_practice {
52 my($self) = @_;
53 my $class = ref $self || $self;
54 *{"${class}::accessor_name_for"} = \&best_practice_accessor_name_for;
55 *{"${class}::mutator_name_for"} = \&best_practice_mutator_name_for;
56 }
57
58
# spent 832µs (567+265) within Class::Accessor::_mk_accessors which was called 4 times, avg 208µs/call: # 4 times (567µs+265µs) by Class::Accessor::mk_accessors at line 19, avg 208µs/call
sub _mk_accessors {
59412µs my($self, $access, @fields) = @_;
6047µs my $class = ref $self || $self;
6148µs my $ra = $access eq 'rw' || $access eq 'ro';
6246µs my $wa = $access eq 'rw' || $access eq 'wo';
63
64431µs foreach my $field (@fields) {
651857µs1853µs my $accessor_name = $self->accessor_name_for($field);
# spent 53µs making 18 calls to Class::Accessor::accessor_name_for, avg 3µs/call
661848µs1838µs my $mutator_name = $self->mutator_name_for($field);
# spent 38µs making 18 calls to Class::Accessor::mutator_name_for, avg 2µs/call
671811µs if( $accessor_name eq 'DESTROY' or $mutator_name eq 'DESTROY' ) {
68 $self->_carp("Having a data accessor named DESTROY in '$class' is unwise.");
69 }
701820µs if ($accessor_name eq $mutator_name) {
71184µs my $accessor;
721850µs1898µs if ($ra && $wa) {
# spent 98µs making 18 calls to Class::Accessor::make_accessor, avg 5µs/call
73 $accessor = $self->make_accessor($field);
74 } elsif ($ra) {
75 $accessor = $self->make_ro_accessor($field);
76 } else {
77 $accessor = $self->make_wo_accessor($field);
78 }
791816µs my $fullname = "${class}::$accessor_name";
80186µs my $subnamed = 0;
811829µs unless (defined &{$fullname}) {
8218125µs1877µs subname($fullname, $accessor) if defined &subname;
# spent 77µs making 18 calls to Sub::Name::subname, avg 4µs/call
831810µs $subnamed = 1;
841844µs *{$fullname} = $accessor;
85 }
861818µs if ($accessor_name eq $field) {
87 # the old behaviour
881819µs my $alias = "${class}::_${field}_accessor";
89189µs subname($alias, $accessor) if defined &subname and not $subnamed;
901854µs *{$alias} = $accessor unless defined &{$alias};
91 }
92 } else {
93 my $fullaccname = "${class}::$accessor_name";
94 my $fullmutname = "${class}::$mutator_name";
95 if ($ra and not defined &{$fullaccname}) {
96 my $accessor = $self->make_ro_accessor($field);
97 subname($fullaccname, $accessor) if defined &subname;
98 *{$fullaccname} = $accessor;
99 }
100 if ($wa and not defined &{$fullmutname}) {
101 my $mutator = $self->make_wo_accessor($field);
102 subname($fullmutname, $mutator) if defined &subname;
103 *{$fullmutname} = $mutator;
104 }
105 }
106 }
107 }
108
109}
110
111sub mk_ro_accessors {
112 my($self, @fields) = @_;
113
114 $self->_mk_accessors('ro', @fields);
115}
116
117sub mk_wo_accessors {
118 my($self, @fields) = @_;
119
120 $self->_mk_accessors('wo', @fields);
121}
122
123sub best_practice_accessor_name_for {
124 my ($class, $field) = @_;
125 return "get_$field";
126}
127
128sub best_practice_mutator_name_for {
129 my ($class, $field) = @_;
130 return "set_$field";
131}
132
133
# spent 53µs within Class::Accessor::accessor_name_for which was called 18 times, avg 3µs/call: # 18 times (53µs+0s) by Class::Accessor::_mk_accessors at line 65, avg 3µs/call
sub accessor_name_for {
1341817µs my ($class, $field) = @_;
1351871µs return $field;
136}
137
138
# spent 38µs within Class::Accessor::mutator_name_for which was called 18 times, avg 2µs/call: # 18 times (38µs+0s) by Class::Accessor::_mk_accessors at line 66, avg 2µs/call
sub mutator_name_for {
1391812µs my ($class, $field) = @_;
1401842µs return $field;
141}
142
143
# spent 25µs within Class::Accessor::set which was called 7 times, avg 4µs/call: # 7 times (25µs+0s) by C4::Templates::activethemes or C4::Templates::filename or C4::Templates::htdocs or C4::Templates::interface or C4::Templates::lang or C4::Templates::preferredtheme or C4::Templates::theme at line 177, avg 4µs/call
sub set {
14478µs my($self, $key) = splice(@_, 0, 2);
145
146734µs if(@_ == 1) {
147 $self->{$key} = $_[0];
148 }
149 elsif(@_ > 1) {
150 $self->{$key} = [@_];
151 }
152 else {
153 $self->_croak("Wrong number of arguments received");
154 }
155}
156
157
# spent 40µs within Class::Accessor::get which was called 7 times, avg 6µs/call: # 7 times (40µs+0s) by C4::Templates::filename or C4::Templates::interface or C4::Templates::lang or C4::Templates::preferredtheme or C4::Templates::theme at line 180, avg 6µs/call
sub get {
15874µs my $self = shift;
159
160758µs if(@_ == 1) {
161 return $self->{$_[0]};
162 }
163 elsif( @_ > 1 ) {
164 return @{$self}{@_};
165 }
166 else {
167 $self->_croak("Wrong number of arguments received");
168 }
169}
170
171
# spent 98µs within Class::Accessor::make_accessor which was called 18 times, avg 5µs/call: # 18 times (98µs+0s) by Class::Accessor::_mk_accessors at line 72, avg 5µs/call
sub make_accessor {
1721814µs my ($class, $field) = @_;
173
174 return sub {
175148µs my $self = shift;
176
1771458µs725µs if(@_) {
# spent 25µs making 7 calls to Class::Accessor::set, avg 4µs/call
178 return $self->set($field, @_);
179 } else {
180769µs740µs return $self->get($field);
# spent 40µs making 7 calls to Class::Accessor::get, avg 6µs/call
181 }
18218105µs };
183}
184
185sub make_ro_accessor {
186 my($class, $field) = @_;
187
188 return sub {
189 my $self = shift;
190
191 if (@_) {
192 my $caller = caller;
193 $self->_croak("'$caller' cannot alter the value of '$field' on objects of class '$class'");
194 }
195 else {
196 return $self->get($field);
197 }
198 };
199}
200
201sub make_wo_accessor {
202 my($class, $field) = @_;
203
204 return sub {
205 my $self = shift;
206
207 unless (@_) {
208 my $caller = caller;
209 $self->_croak("'$caller' cannot access the value of '$field' on objects of class '$class'");
210 }
211 else {
212 return $self->set($field, @_);
213 }
214 };
215}
216
217
218398µs111µs
# spent 11µs within Class::Accessor::BEGIN@218 which was called: # once (11µs+0s) by base::import at line 218
use Carp ();
# spent 11µs making 1 call to Class::Accessor::BEGIN@218
219
220sub _carp {
221 my ($self, $msg) = @_;
222 Carp::carp($msg || $self);
223 return;
224}
225
226sub _croak {
227 my ($self, $msg) = @_;
228 Carp::croak($msg || $self);
229 return;
230}
231
23217µs1;
233
234__END__