← 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:05 2013

Filename/usr/share/perl5/YAML/Base.pm
StatementsExecuted 1017 statements in 6.51ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
212123.63ms5.73msYAML::Base::::fieldYAML::Base::field
6421720µs720µsYAML::Base::::newYAML::Base::new
2111427µs427µsYAML::Base::::__ANON__[:162]YAML::Base::__ANON__[:162]
1711368µs1.67msYAML::Base::::__ANON__[:172]YAML::Base::__ANON__[:172]
3421130µs130µsYAML::Base::::CORE:substYAML::Base::CORE:subst (opcode)
11118µs42µsYAML::Base::::BEGIN@4YAML::Base::BEGIN@4
11118µs22µsYAML::Base::::BEGIN@3YAML::Base::BEGIN@3
11116µs41µsYAML::Base::::BEGIN@165YAML::Base::BEGIN@165
11115µs35µsYAML::Base::::BEGIN@75YAML::Base::BEGIN@75
1115µs5µsYAML::Base::::BEGIN@5YAML::Base::BEGIN@5
0000s0sYAML::Base::::XXXYAML::Base::XXX
0000s0sYAML::Base::::__ANON__[:124]YAML::Base::__ANON__[:124]
0000s0sYAML::Base::::__ANON__[:133]YAML::Base::__ANON__[:133]
0000s0sYAML::Base::::__ANON__[:146]YAML::Base::__ANON__[:146]
0000s0sYAML::Base::::dieYAML::Base::die
0000s0sYAML::Base::::node_infoYAML::Base::node_info
0000s0sYAML::Base::::warnYAML::Base::warn
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package YAML::Base;
2
3335µs226µs
# spent 22µs (18+4) within YAML::Base::BEGIN@3 which was called: # once (18µs+4µs) by YAML::BEGIN@6 at line 3
use strict;
# spent 22µs making 1 call to YAML::Base::BEGIN@3 # spent 4µs making 1 call to strict::import
4340µs266µs
# spent 42µs (18+24) within YAML::Base::BEGIN@4 which was called: # once (18µs+24µs) by YAML::BEGIN@6 at line 4
use warnings;
# spent 42µs making 1 call to YAML::Base::BEGIN@4 # spent 24µs making 1 call to warnings::import
53375µs15µs
# spent 5µs within YAML::Base::BEGIN@5 which was called: # once (5µs+0s) by YAML::BEGIN@6 at line 5
use Exporter ();
# spent 5µs making 1 call to YAML::Base::BEGIN@5
6
71600nsour $VERSION = '0.71';
8111µsour @ISA = 'Exporter';
91900nsour @EXPORT = qw(field XXX);
10
11
# spent 720µs within YAML::Base::new which was called 64 times, avg 11µs/call: # 32 times (451µs+0s) by YAML::Load at line 33 of YAML.pm, avg 14µs/call # 32 times (268µs+0s) by YAML::init_action_object at line 87 of YAML.pm, avg 8µs/call
sub new {
12320775µs my $class = shift;
13 $class = ref($class) || $class;
14 my $self = bless {}, $class;
15 while (@_) {
16 my $method = shift;
17 $self->$method(shift);
18 }
19 return $self;
20}
21
22# Use lexical subs to reduce pollution of private methods by base class.
231500nsmy ($_new_error, $_info, $_scalar_info, $parse_arguments, $default_as_code);
24
25sub XXX {
26 require Data::Dumper;
27 CORE::die(Data::Dumper::Dumper(@_));
28}
29
3016µsmy %code = (
31 sub_start =>
32 "sub {\n",
33 set_default =>
34 " \$_[0]->{%s} = %s\n unless exists \$_[0]->{%s};\n",
35 init =>
36 " return \$_[0]->{%s} = do { my \$self = \$_[0]; %s }\n" .
37 " unless \$#_ > 0 or defined \$_[0]->{%s};\n",
38 return_if_get =>
39 " return \$_[0]->{%s} unless \$#_ > 0;\n",
40 set =>
41 " \$_[0]->{%s} = \$_[1];\n",
42 sub_end =>
43 " return \$_[0]->{%s};\n}\n",
44);
45
46
# spent 5.73ms (3.63+2.09) within YAML::Base::field which was called 21 times, avg 273µs/call: # once (229µs+191µs) by YAML::Loader::BEGIN@6 at line 10 of YAML/Loader/Base.pm # once (203µs+171µs) by YAML::Loader::BEGIN@6 at line 19 of YAML/Loader/Base.pm # once (231µs+124µs) by YAML::Loader::BEGIN@6 at line 23 of YAML/Loader/Base.pm # once (177µs+154µs) by YAML::Loader::BEGIN@6 at line 22 of YAML/Loader/Base.pm # once (131µs+185µs) by C4::Search::BEGIN@34 at line 18 of YAML.pm # once (196µs+116µs) by YAML::Loader::BEGIN@6 at line 25 of YAML/Loader/Base.pm # once (188µs+123µs) by YAML::Loader::BEGIN@6 at line 24 of YAML/Loader/Base.pm # once (191µs+116µs) by YAML::Loader::BEGIN@6 at line 26 of YAML/Loader/Base.pm # once (182µs+118µs) by YAML::Loader::BEGIN@6 at line 11 of YAML/Loader/Base.pm # once (182µs+116µs) by YAML::Loader::BEGIN@6 at line 21 of YAML/Loader/Base.pm # once (175µs+108µs) by YAML::Loader::BEGIN@6 at line 17 of YAML/Loader/Base.pm # once (157µs+117µs) by YAML::Loader::BEGIN@6 at line 13 of YAML/Loader/Base.pm # once (177µs+91µs) by YAML::Loader::BEGIN@6 at line 16 of YAML/Loader/Base.pm # once (241µs+22µs) by YAML::Loader::BEGIN@6 at line 18 of YAML/Loader/Base.pm # once (209µs+26µs) by YAML::Loader::BEGIN@6 at line 20 of YAML/Loader/Base.pm # once (158µs+69µs) by C4::Search::BEGIN@34 at line 20 of YAML.pm # once (147µs+70µs) by C4::Search::BEGIN@34 at line 19 of YAML.pm # once (141µs+69µs) by C4::Search::BEGIN@34 at line 22 of YAML.pm # once (123µs+81µs) by YAML::Loader::BEGIN@6 at line 12 of YAML/Loader/Base.pm # once (100µs+14µs) by YAML::Loader::BEGIN@6 at line 14 of YAML/Loader/Base.pm # once (95µs+12µs) by YAML::Loader::BEGIN@6 at line 15 of YAML/Loader/Base.pm
sub field {
473363.50ms my $package = caller;
4821427µs my ($args, @values) = &$parse_arguments(
# spent 427µs making 21 calls to YAML::Base::__ANON__[YAML/Base.pm:162], avg 20µs/call
49 [ qw(-package -init) ],
50 @_,
51 );
52 my ($field, $default) = @values;
53 $package = $args->{-package} if defined $args->{-package};
54 return if defined &{"${package}::$field"};
55171.67ms my $default_string =
# spent 1.67ms making 17 calls to YAML::Base::__ANON__[YAML/Base.pm:172], avg 98µs/call
56 ( ref($default) eq 'ARRAY' and not @$default )
57 ? '[]'
58 : (ref($default) eq 'HASH' and not keys %$default )
59 ? '{}'
60 : &$default_as_code($default);
61
62 my $code = $code{sub_start};
63410µs if ($args->{-init}) {
64 my $fragment = $code{init};
65 $code .= sprintf $fragment, $field, $args->{-init}, ($field) x 4;
66 }
67 $code .= sprintf $code{set_default}, $field, $default_string, $field
68 if defined $default;
69 $code .= sprintf $code{return_if_get}, $field;
70 $code .= sprintf $code{set}, $field;
71 $code .= sprintf $code{sub_end}, $field;
72
73 my $sub = eval $code;
# spent 1.59ms executing statements in string eval
# includes 1.39ms spent executing 288 calls to 1 sub defined therein. # spent 913µs executing statements in string eval
# includes 706µs spent executing 128 calls to 1 sub defined therein. # spent 779µs executing statements in string eval
# includes 607µs spent executing 64 calls to 1 sub defined therein. # spent 665µs executing statements in string eval
# includes 551µs spent executing 96 calls to 1 sub defined therein. # spent 595µs executing statements in string eval
# includes 598µs spent executing 32 calls to 1 sub defined therein. # spent 566µs executing statements in string eval
# includes 489µs spent executing 64 calls to 1 sub defined therein. # spent 518µs executing statements in string eval
# includes 442µs spent executing 64 calls to 1 sub defined therein. # spent 407µs executing statements in string eval
# includes 353µs spent executing 32 calls to 1 sub defined therein. # spent 22µs executing statements in string eval # spent 19µs executing statements in string eval # spent 15µs executing statements in string eval # spent 11µs executing statements in string eval # spent 10µs executing statements in string eval # spent 10µs executing statements in string eval # spent 9µs executing statements in string eval # spent 9µs executing statements in string eval # spent 9µs executing statements in string eval # spent 9µs executing statements in string eval # spent 8µs executing statements in string eval # spent 6µs executing statements in string eval # spent 6µs executing statements in string eval
74 die $@ if $@;
753636µs255µs
# spent 35µs (15+20) within YAML::Base::BEGIN@75 which was called: # once (15µs+20µs) by YAML::BEGIN@6 at line 75
no strict 'refs';
# spent 35µs making 1 call to YAML::Base::BEGIN@75 # spent 20µs making 1 call to strict::unimport
76 *{"${package}::$field"} = $sub;
77 return $code if defined wantarray;
78}
79
80sub die {
81 my $self = shift;
82 my $error = $self->$_new_error(@_);
83 $error->type('Error');
84 Carp::croak($error->format_message);
85}
86
87sub warn {
88 my $self = shift;
89 return unless $^W;
90 my $error = $self->$_new_error(@_);
91 $error->type('Warning');
92 Carp::cluck($error->format_message);
93}
94
95# This code needs to be refactored to be simpler and more precise, and no,
96# Scalar::Util doesn't DWIM.
97#
98# Can't handle:
99# * blessed regexp
100sub node_info {
101 my $self = shift;
102 my $stringify = $_[1] || 0;
103 my ($class, $type, $id) =
104 ref($_[0])
105 ? $stringify
106 ? &$_info("$_[0]")
107 : do {
108 require overload;
109 my @info = &$_info(overload::StrVal($_[0]));
110 if (ref($_[0]) eq 'Regexp') {
111 @info[0, 1] = (undef, 'REGEXP');
112 }
113 @info;
114 }
115 : &$_scalar_info($_[0]);
116 ($class, $type, $id) = &$_scalar_info("$_[0]")
117 unless $id;
118 return wantarray ? ($class, $type, $id) : $id;
119}
120
121#-------------------------------------------------------------------------------
122$_info = sub {
123 return (($_[0]) =~ qr{^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$}o);
12412µs};
125
126$_scalar_info = sub {
127 my $id = 'undef';
128 if (defined $_[0]) {
129 \$_[0] =~ /\((\w+)\)$/o or CORE::die();
130 $id = "$1-S";
131 }
132 return (undef, undef, $id);
13312µs};
134
135$_new_error = sub {
136 require Carp;
137 my $self = shift;
138 require YAML::Error;
139
140 my $code = shift || 'unknown error';
141 my $error = YAML::Error->new(code => $code);
142 $error->line($self->line) if $self->can('line');
143 $error->document($self->document) if $self->can('document');
144 $error->arguments([@_]);
145 return $error;
14612µs};
147
148
# spent 427µs within YAML::Base::__ANON__[/usr/share/perl5/YAML/Base.pm:162] which was called 21 times, avg 20µs/call: # 21 times (427µs+0s) by YAML::Base::field at line 48, avg 20µs/call
$parse_arguments = sub {
149105330µs my $paired_arguments = shift || [];
150 my ($args, @values) = ({}, ());
151 my %pairs = map { ($_, 1) } @$paired_arguments;
152 while (@_) {
15384110µs my $elem = shift;
1544042µs if (defined $elem and defined $pairs{$elem} and @_) {
155 $args->{$elem} = shift;
156 }
157 else {
158 push @values, $elem;
159 }
160 }
161 return wantarray ? ($args, @values) : $args;
16216µs};
163
164
# spent 1.67ms (368µs+1.30) within YAML::Base::__ANON__[/usr/share/perl5/YAML/Base.pm:172] which was called 17 times, avg 98µs/call: # 17 times (368µs+1.30ms) by YAML::Base::field at line 55, avg 98µs/call
$default_as_code = sub {
1653103µs266µs
# spent 41µs (16+25) within YAML::Base::BEGIN@165 which was called: # once (16µs+25µs) by YAML::BEGIN@6 at line 165
no warnings 'once';
# spent 41µs making 1 call to YAML::Base::BEGIN@165 # spent 25µs making 1 call to warnings::unimport
166102510µs require Data::Dumper;
167 local $Data::Dumper::Sortkeys = 1;
168171.17ms my $code = Data::Dumper::Dumper(shift);
# spent 1.17ms making 17 calls to Data::Dumper::Dumper, avg 69µs/call
1691789µs $code =~ s/^\$VAR1 = //;
# spent 89µs making 17 calls to YAML::Base::CORE:subst, avg 5µs/call
1701741µs $code =~ s/;$//;
# spent 41µs making 17 calls to YAML::Base::CORE:subst, avg 2µs/call
171 return $code;
17215µs};
173
17419µs1;
175
176__END__
 
# spent 130µs within YAML::Base::CORE:subst which was called 34 times, avg 4µs/call: # 17 times (89µs+0s) by YAML::Base::__ANON__[/usr/share/perl5/YAML/Base.pm:172] at line 169, avg 5µs/call # 17 times (41µs+0s) by YAML::Base::__ANON__[/usr/share/perl5/YAML/Base.pm:172] at line 170, avg 2µs/call
sub YAML::Base::CORE:subst; # opcode