← Index
NYTProf Performance Profile   « block view • line view • sub view »
For mentat.storage.mongo.pl
  Run on Tue Jun 24 10:04:38 2014
Reported on Tue Jun 24 10:05:28 2014

Filename/usr/local/lib/perl/5.14.2/Class/MOP/Method.pm
StatementsExecuted 3990 statements in 7.68ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
222443.22ms12.8msClass::MOP::Method::::wrapClass::MOP::Method::wrap
478111.60ms1.95msClass::MOP::Method::::attach_to_classClass::MOP::Method::attach_to_class
8511517µs4.88msClass::MOP::Method::::_newClass::MOP::Method::_new
2822360µs446µsClass::MOP::Method::::cloneClass::MOP::Method::clone
1119µs34µsClass::MOP::Method::::BEGIN@21Class::MOP::Method::BEGIN@21
1118µs8µsClass::MOP::Method::::BEGIN@3Class::MOP::Method::BEGIN@3
1117µs658µsClass::MOP::Method::::BEGIN@16Class::MOP::Method::BEGIN@16
1117µs10µsClass::MOP::Method::::BEGIN@10Class::MOP::Method::BEGIN@10
1117µs41µsClass::MOP::Method::::BEGIN@14Class::MOP::Method::BEGIN@14
1116µs33µsClass::MOP::Method::::BEGIN@13Class::MOP::Method::BEGIN@13
1116µs11µsClass::MOP::Method::::BEGIN@11Class::MOP::Method::BEGIN@11
1111µs1µsClass::MOP::Method::::is_stubClass::MOP::Method::is_stub (xsub)
0000s0sClass::MOP::Method::::__ANON__[:21]Class::MOP::Method::__ANON__[:21]
0000s0sClass::MOP::Method::::detach_from_classClass::MOP::Method::detach_from_class
0000s0sClass::MOP::Method::::executeClass::MOP::Method::execute
0000s0sClass::MOP::Method::::fully_qualified_nameClass::MOP::Method::fully_qualified_name
0000s0sClass::MOP::Method::::original_fully_qualified_nameClass::MOP::Method::original_fully_qualified_name
0000s0sClass::MOP::Method::::original_nameClass::MOP::Method::original_name
0000s0sClass::MOP::Method::::original_package_nameClass::MOP::Method::original_package_name
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package Class::MOP::Method;
3
# spent 8µs within Class::MOP::Method::BEGIN@3 which was called: # once (8µs+0s) by base::import at line 5
BEGIN {
415µs $Class::MOP::Method::AUTHORITY = 'cpan:STEVAN';
5130µs18µs}
# spent 8µs making 1 call to Class::MOP::Method::BEGIN@3
6{
721µs $Class::MOP::Method::VERSION = '2.1005';
8}
9
10220µs213µs
# spent 10µs (7+3) within Class::MOP::Method::BEGIN@10 which was called: # once (7µs+3µs) by base::import at line 10
use strict;
# spent 10µs making 1 call to Class::MOP::Method::BEGIN@10 # spent 3µs making 1 call to strict::import
11221µs215µs
# spent 11µs (6+4) within Class::MOP::Method::BEGIN@11 which was called: # once (6µs+4µs) by base::import at line 11
use warnings;
# spent 11µs making 1 call to Class::MOP::Method::BEGIN@11 # spent 4µs making 1 call to warnings::import
12
13228µs260µs
# spent 33µs (6+27) within Class::MOP::Method::BEGIN@13 which was called: # once (6µs+27µs) by base::import at line 13
use Carp 'confess';
# spent 33µs making 1 call to Class::MOP::Method::BEGIN@13 # spent 27µs making 1 call to Exporter::import
14224µs275µs
# spent 41µs (7+34) within Class::MOP::Method::BEGIN@14 which was called: # once (7µs+34µs) by base::import at line 14
use Scalar::Util 'weaken', 'reftype', 'blessed';
# spent 41µs making 1 call to Class::MOP::Method::BEGIN@14 # spent 34µs making 1 call to Exporter::import
15
16246µs2658µs
# spent 658µs (7+651) within Class::MOP::Method::BEGIN@16 which was called: # once (7µs+651µs) by base::import at line 16
use base 'Class::MOP::Object';
# spent 658µs making 1 call to Class::MOP::Method::BEGIN@16 # spent 651µs making 1 call to base::import, recursion: max depth 1, sum of overlapping time 651µs
17
18# NOTE:
19# if poked in the right way,
20# they should act like CODE refs.
212504µs260µs
# spent 34µs (9+25) within Class::MOP::Method::BEGIN@21 which was called: # once (9µs+25µs) by base::import at line 21
use overload '&{}' => sub { $_[0]->body }, fallback => 1;
# spent 34µs making 1 call to Class::MOP::Method::BEGIN@21 # spent 25µs making 1 call to overload::import
22
23# construction
24
25
# spent 12.8ms (3.22+9.61) within Class::MOP::Method::wrap which was called 222 times, avg 58µs/call: # 84 times (1.12ms+838µs) by Class::MOP::Mixin::HasMethods::wrap_method_body at line 48 of Class/MOP/Mixin/HasMethods.pm, avg 23µs/call # 57 times (930µs+1.41ms) by Class::MOP::Attribute::_process_accessors at line 372 of Class/MOP/Attribute.pm, avg 41µs/call # 46 times (648µs+576µs) by Class::MOP::Method::Wrapped::wrap at line 94 of Class/MOP/Method/Wrapped.pm, avg 27µs/call # 35 times (525µs+6.79ms) by Class::MOP::Method::Meta::wrap at line 62 of Class/MOP/Method/Meta.pm, avg 209µs/call
sub wrap {
26222408µs my ( $class, @args ) = @_;
27
28222195µs unshift @args, 'body' if @args % 2 == 1;
29
30222330µs my %params = @args;
3122272µs my $code = $params{body};
32
332221.04ms444273µs if (blessed($code) && $code->isa(__PACKAGE__)) {
# spent 145µs making 222 calls to Scalar::Util::blessed, avg 654ns/call # spent 127µs making 222 calls to Scalar::Util::reftype, avg 574ns/call
34 my $method = $code->clone;
35 delete $params{body};
36 Class::MOP::class_of($class)->rebless_instance($method, %params);
37 return $method;
38 }
39 elsif (!ref $code || 'CODE' ne reftype($code)) {
40 confess "You must supply a CODE reference to bless, not (" . ($code || 'undef') . ")";
41 }
42
4322267µs ($params{package_name} && $params{name})
44 || confess "You must supply the package_name and name parameters";
45
46222323µs2229.16ms my $self = $class->_new(\%params);
# spent 4.88ms making 85 calls to Class::MOP::Method::_new, avg 57µs/call # spent 2.47ms making 34 calls to Moose::Meta::Method::_new, avg 73µs/call # spent 1.28ms making 57 calls to Class::MOP::Method::Accessor::_new, avg 23µs/call # spent 524µs making 46 calls to Class::MOP::Method::Wrapped::_new, avg 11µs/call
47
48222569µs176178µs weaken($self->{associated_metaclass}) if $self->{associated_metaclass};
# spent 178µs making 176 calls to Scalar::Util::weaken, avg 1µs/call
49
50222632µs return $self;
51}
52
53
# spent 4.88ms (517µs+4.36) within Class::MOP::Method::_new which was called 85 times, avg 57µs/call: # 85 times (517µs+4.36ms) by Class::MOP::Method::wrap at line 46, avg 57µs/call
sub _new {
548525µs my $class = shift;
55
5685110µs484.36ms return Class::MOP::Class->initialize($class)->new_object(@_)
# spent 3.60ms making 24 calls to Class::MOP::Class::new_object, avg 150µs/call # spent 760µs making 24 calls to Class::MOP::Class::initialize, avg 32µs/call
57 if $class ne __PACKAGE__;
58
596126µs my $params = @_ == 1 ? $_[0] : {@_};
60
6161395µs return bless {
62 'body' => $params->{body},
63 'associated_metaclass' => $params->{associated_metaclass},
64 'package_name' => $params->{package_name},
65 'name' => $params->{name},
66 'original_method' => $params->{original_method},
67 } => $class;
68}
69
70## accessors
71
7254114µssub associated_metaclass { shift->{'associated_metaclass'} }
73
74
# spent 1.95ms (1.60+350µs) within Class::MOP::Method::attach_to_class which was called 478 times, avg 4µs/call: # 478 times (1.60ms+350µs) by Class::MOP::Mixin::HasMethods::add_method at line 71 of Class/MOP/Mixin/HasMethods.pm, avg 4µs/call
sub attach_to_class {
75478206µs my ( $self, $class ) = @_;
76478286µs $self->{associated_metaclass} = $class;
774781.73ms478350µs weaken($self->{associated_metaclass});
# spent 350µs making 478 calls to Scalar::Util::weaken, avg 733ns/call
78}
79
80sub detach_from_class {
81 my $self = shift;
82 delete $self->{associated_metaclass};
83}
84
85sub fully_qualified_name {
86 my $self = shift;
87 $self->package_name . '::' . $self->name;
88}
89
90sub original_method { (shift)->{'original_method'} }
91
922869µssub _set_original_method { $_[0]->{'original_method'} = $_[1] }
93
94# It's possible that this could cause a loop if there is a circular
95# reference in here. That shouldn't ever happen in normal
96# circumstances, since original method only gets set when clone is
97# called. We _could_ check for such a loop, but it'd involve some sort
98# of package-lexical variable, and wouldn't be terribly subclassable.
99sub original_package_name {
100 my $self = shift;
101
102 $self->original_method
103 ? $self->original_method->original_package_name
104 : $self->package_name;
105}
106
107sub original_name {
108 my $self = shift;
109
110 $self->original_method
111 ? $self->original_method->original_name
112 : $self->name;
113}
114
115sub original_fully_qualified_name {
116 my $self = shift;
117
118 $self->original_method
119 ? $self->original_method->original_fully_qualified_name
120 : $self->fully_qualified_name;
121}
122
123sub execute {
124 my $self = shift;
125 $self->body->(@_);
126}
127
128# We used to go through use Class::MOP::Class->clone_instance to do this, but
129# this was awfully slow. This method may be called a number of times when
130# classes are loaded (especially during Moose role application), so it is
131# worth optimizing. - DR
132
# spent 446µs (360+86) within Class::MOP::Method::clone which was called 28 times, avg 16µs/call: # 14 times (222µs+42µs) by Class::MOP::MiniTrait::apply at line 29 of Class/MOP/MiniTrait.pm, avg 19µs/call # 14 times (138µs+44µs) by Class::MOP::Mixin::HasMethods::add_method at line 65 of Class/MOP/Mixin/HasMethods.pm, avg 13µs/call
sub clone {
133287µs my $self = shift;
134
13556239µs2818µs my $clone = bless { %{$self}, @_ }, blessed($self);
# spent 18µs making 28 calls to Scalar::Util::blessed, avg 650ns/call
1362872µs2821µs weaken($clone->{associated_metaclass}) if $clone->{associated_metaclass};
# spent 21µs making 28 calls to Scalar::Util::weaken, avg 736ns/call
137
1382828µs2847µs $clone->_set_original_method($self);
# spent 47µs making 28 calls to Class::MOP::Method::_set_original_method, avg 2µs/call
139
1402849µs return $clone;
141}
142
14312µs1;
144
145# ABSTRACT: Method Meta Object
146
147__END__
 
# spent 1µs within Class::MOP::Method::is_stub which was called: # once (1µs+0s) by Moose::Meta::Attribute::_process_accessors at line 1057 of Moose/Meta/Attribute.pm
sub Class::MOP::Method::is_stub; # xsub