← Index
NYTProf Performance Profile   « line view »
For fastest.pl
  Run on Fri Jan 31 20:48:16 2014
Reported on Fri Jan 31 20:49:40 2014

Filename/opt/perl-5.18.1/lib/site_perl/5.18.1/darwin-thread-multi-2level/Class/MOP/Method/Meta.pm
StatementsExecuted 486 statements in 2.66ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
2522441µs7.21msClass::MOP::Method::Meta::::wrapClass::MOP::Method::Meta::wrap
2511200µs222µsClass::MOP::Method::Meta::::_generate_meta_methodClass::MOP::Method::Meta::_generate_meta_method
11115µs15µsClass::MOP::Method::Meta::::BEGIN@3Class::MOP::Method::Meta::BEGIN@3
11114µs19µsClass::MOP::Method::Meta::::BEGIN@11Class::MOP::Method::Meta::BEGIN@11
11110µs25µsClass::MOP::Method::Meta::::BEGIN@10Class::MOP::Method::Meta::BEGIN@10
11110µs2.29msClass::MOP::Method::Meta::::BEGIN@18Class::MOP::Method::Meta::BEGIN@18
1119µs48µsClass::MOP::Method::Meta::::BEGIN@16Class::MOP::Method::Meta::BEGIN@16
1119µs41µsClass::MOP::Method::Meta::::BEGIN@14Class::MOP::Method::Meta::BEGIN@14
1119µs39µsClass::MOP::Method::Meta::::BEGIN@13Class::MOP::Method::Meta::BEGIN@13
0000s0sClass::MOP::Method::Meta::::__ANON__[:49]Class::MOP::Method::Meta::__ANON__[:49]
0000s0sClass::MOP::Method::Meta::::_is_caller_mop_internalClass::MOP::Method::Meta::_is_caller_mop_internal
0000s0sClass::MOP::Method::Meta::::_make_compatible_withClass::MOP::Method::Meta::_make_compatible_with
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::Meta;
3
# spent 15µs within Class::MOP::Method::Meta::BEGIN@3 which was called: # once (15µs+0s) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 5
BEGIN {
4110µs $Class::MOP::Method::Meta::AUTHORITY = 'cpan:STEVAN';
5141µs115µs}
# spent 15µs making 1 call to Class::MOP::Method::Meta::BEGIN@3
6{
721µs $Class::MOP::Method::Meta::VERSION = '2.1005';
8}
9
10234µs240µs
# spent 25µs (10+15) within Class::MOP::Method::Meta::BEGIN@10 which was called: # once (10µs+15µs) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 10
use strict;
# spent 25µs making 1 call to Class::MOP::Method::Meta::BEGIN@10 # spent 15µs making 1 call to strict::import
11233µs224µs
# spent 19µs (14+5) within Class::MOP::Method::Meta::BEGIN@11 which was called: # once (14µs+5µs) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 11
use warnings;
# spent 19µs making 1 call to Class::MOP::Method::Meta::BEGIN@11 # spent 5µs making 1 call to warnings::import
12
13235µs270µs
# spent 39µs (9+31) within Class::MOP::Method::Meta::BEGIN@13 which was called: # once (9µs+31µs) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 13
use Carp 'confess';
# spent 39µs making 1 call to Class::MOP::Method::Meta::BEGIN@13 # spent 31µs making 1 call to Exporter::import
14249µs274µs
# spent 41µs (9+32) within Class::MOP::Method::Meta::BEGIN@14 which was called: # once (9µs+32µs) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 14
use Scalar::Util 'blessed', 'weaken';
# spent 41µs making 1 call to Class::MOP::Method::Meta::BEGIN@14 # spent 32µs making 1 call to Exporter::import
15
16237µs288µs
# spent 48µs (9+39) within Class::MOP::Method::Meta::BEGIN@16 which was called: # once (9µs+39µs) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 16
use constant DEBUG_NO_META => $ENV{DEBUG_NO_META} ? 1 : 0;
# spent 48µs making 1 call to Class::MOP::Method::Meta::BEGIN@16 # spent 39µs making 1 call to constant::import
17
182392µs24.58ms
# spent 2.29ms (10µs+2.28) within Class::MOP::Method::Meta::BEGIN@18 which was called: # once (10µs+2.28ms) by Class::MOP::Mixin::HasMethods::BEGIN@12 at line 18
use base 'Class::MOP::Method';
# spent 2.29ms making 1 call to Class::MOP::Method::Meta::BEGIN@18 # spent 2.28ms making 1 call to base::import
19
20sub _is_caller_mop_internal {
21 my $self = shift;
22 my ($caller) = @_;
23 return $caller =~ /^(?:Class::MOP|metaclass)(?:::|$)/;
24}
25
26
# spent 222µs (200+22) within Class::MOP::Method::Meta::_generate_meta_method which was called 25 times, avg 9µs/call: # 25 times (200µs+22µs) by Class::MOP::Method::Meta::wrap at line 61, avg 9µs/call
sub _generate_meta_method {
27259µs my $method_self = shift;
28254µs my $metaclass = shift;
292571µs2522µs weaken($metaclass);
# spent 22µs making 25 calls to Scalar::Util::weaken, avg 864ns/call
30
31 sub {
32 # this will be compiled out if the env var wasn't set
33 if (DEBUG_NO_META) {
34 confess "'meta' method called by MOP internals"
35 # it's okay to call meta methods on metaclasses, since we
36 # explicitly ask for them
37 if !$_[0]->isa('Class::MOP::Object')
38 && !$_[0]->isa('Class::MOP::Mixin')
39 # it's okay if the test itself calls ->meta, we only care about
40 # if the mop internals call ->meta
41 && $method_self->_is_caller_mop_internal(scalar caller);
42 }
43 # we must re-initialize so that it
44 # works as expected in subclasses,
45 # since metaclass instances are
46 # singletons, this is not really a
47 # big deal anyway.
481951.41ms3905.46ms $metaclass->initialize(blessed($_[0]) || $_[0])
# spent 5.31ms making 195 calls to Class::MOP::Class::initialize, avg 27µs/call, recursion: max depth 1, sum of overlapping time 11µs # spent 163µs making 195 calls to Scalar::Util::blessed, avg 836ns/call
4925155µs };
50}
51
52
# spent 7.21ms (441µs+6.77) within Class::MOP::Method::Meta::wrap which was called 25 times, avg 288µs/call: # 23 times (388µs+5.33ms) by Class::MOP::Mixin::HasMethods::_add_meta_method at line 33 of Class/MOP/Mixin/HasMethods.pm, avg 249µs/call # 2 times (53µs+1.43ms) by Moose::Meta::Method::Meta::wrap at line 26 of Moose/Meta/Method/Meta.pm, avg 742µs/call
sub wrap {
532541µs my ($class, @args) = @_;
54
552517µs unshift @args, 'body' if @args % 2 == 1;
562544µs my %params = @args;
57257µs confess "Overriding the body of meta methods is not allowed"
58 if $params{body};
59
602543µs25317µs my $metaclass_class = $params{associated_metaclass}->meta;
# spent 317µs making 25 calls to Class::MOP::Object::meta, avg 13µs/call
612562µs25222µs $params{body} = $class->_generate_meta_method($metaclass_class);
# spent 222µs making 25 calls to Class::MOP::Method::Meta::_generate_meta_method, avg 9µs/call
6225164µs256.23ms return $class->SUPER::wrap(%params);
# spent 6.23ms making 25 calls to Class::MOP::Method::wrap, avg 249µs/call
63}
64
65sub _make_compatible_with {
66 my $self = shift;
67 my ($other) = @_;
68
69 # XXX: this is pretty gross. the issue here is that CMOP::Method::Meta
70 # objects are subclasses of CMOP::Method, but when we get to moose, they'll
71 # need to be compatible with Moose::Meta::Method, which isn't possible. the
72 # right solution here is to make ::Meta into a role that gets applied to
73 # whatever the method_metaclass happens to be and get rid of
74 # _meta_method_metaclass entirely, but that's not going to happen until
75 # we ditch cmop and get roles into the bootstrapping, so. i'm not
76 # maintaining the previous behavior of turning them into instances of the
77 # new method_metaclass because that's equally broken, and at least this way
78 # any issues will at least be detectable and potentially fixable. -doy
79 return $self unless $other->_is_compatible_with($self->_real_ref_name);
80
81 return $self->SUPER::_make_compatible_with(@_);
82}
83
8414µs1;
85
86# ABSTRACT: Method Meta Object for C<meta> methods
87
88__END__