← Index
NYTProf Performance Profile   « block view • line view • sub view »
For -e
  Run on Wed Nov 17 21:45:08 2010
Reported on Wed Nov 17 22:13:06 2010

Filename/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm
StatementsExecuted 28431 statements in 369ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
84199678.0ms78.0msClass::MOP::::get_metaclass_by_nameClass::MOP::get_metaclass_by_name
371176.5ms7.20sClass::MOP::::__ANON__[:118]Class::MOP::__ANON__[:118]
7092259.1ms5.94sClass::MOP::::load_first_existing_classClass::MOP::load_first_existing_class (recurses: max depth 4, inclusive time 1.42s)
157817941.6ms49.9msClass::MOP::::class_ofClass::MOP::class_of
49384340.6ms40.6msClass::MOP::::get_code_infoClass::MOP::get_code_info (xsub)
7852222.9ms38.5msClass::MOP::::_is_valid_class_nameClass::MOP::_is_valid_class_name
11122.9ms88.1msClass::MOP::::BEGIN@19Class::MOP::BEGIN@19
699111018.9ms5.94sClass::MOP::::load_classClass::MOP::load_class (recurses: max depth 4, inclusive time 1.43s)
8175315.6ms15.6msClass::MOP::::is_class_loadedClass::MOP::is_class_loaded (xsub)
7902115.6ms15.6msClass::MOP::::CORE:matchClass::MOP::CORE:match (opcode)
5133210.0ms13.1msClass::MOP::::metaclass_is_weakClass::MOP::metaclass_is_weak
1118.16ms9.48msClass::MOP::::BEGIN@20Class::MOP::BEGIN@20
1114.99ms7.40msClass::MOP::::BEGIN@9Class::MOP::BEGIN@9
1114.28ms22.3msClass::MOP::::BEGIN@18Class::MOP::BEGIN@18
306224.27ms4.27msClass::MOP::::store_metaclass_by_nameClass::MOP::store_metaclass_by_name
1113.82ms4.11msClass::MOP::::BEGIN@11Class::MOP::BEGIN@11
1112.85ms4.90msClass::MOP::::BEGIN@12Class::MOP::BEGIN@12
1112.77ms4.93msClass::MOP::::BEGIN@16Class::MOP::BEGIN@16
244322.52ms2.52msClass::MOP::::__ANON__[:302]Class::MOP::__ANON__[:302]
244322.45ms2.45msClass::MOP::::__ANON__[:321]Class::MOP::__ANON__[:321]
244322.43ms2.43msClass::MOP::::__ANON__[:234]Class::MOP::__ANON__[:234]
1112.35ms3.30msClass::MOP::::BEGIN@17Class::MOP::BEGIN@17
244322.34ms2.34msClass::MOP::::__ANON__[:276]Class::MOP::__ANON__[:276]
235222.33ms2.33msClass::MOP::::__ANON__[:192]Class::MOP::__ANON__[:192]
1112.29ms37.7msClass::MOP::::BEGIN@13Class::MOP::BEGIN@13
1112.24ms3.20msClass::MOP::::BEGIN@14Class::MOP::BEGIN@14
295111.58ms1.58msClass::MOP::::__ANON__Class::MOP::__ANON__ (xsub)
110111.17ms1.17msClass::MOP::::__ANON__[:337]Class::MOP::__ANON__[:337]
37111.09ms1.58msClass::MOP::::_class_to_pmfileClass::MOP::_class_to_pmfile
4422955µs1.41msClass::MOP::::weaken_metaclassClass::MOP::weaken_metaclass
7233794µs794µsClass::MOP::::__ANON__[:510]Class::MOP::__ANON__[:510]
4211519µs519µsClass::MOP::::remove_metaclass_by_nameClass::MOP::remove_metaclass_by_name
3711487µs487µsClass::MOP::::CORE:substClass::MOP::CORE:subst (opcode)
511238µs238µsClass::MOP::::CORE:regcompClass::MOP::CORE:regcomp (opcode)
511200µs478µsClass::MOP::::__ANON__[:125]Class::MOP::__ANON__[:125]
11180µs80µsClass::MOP::::BEGIN@7Class::MOP::BEGIN@7
11162µs78µsClass::MOP::::BEGIN@4Class::MOP::BEGIN@4
11135µs96µsClass::MOP::::BEGIN@5Class::MOP::BEGIN@5
11134µs34µsClass::MOP::::BEGIN@21Class::MOP::BEGIN@21
11130µs30µsClass::MOP::::BEGIN@23Class::MOP::BEGIN@23
0000s0sClass::MOP::::__ANON__[:517]Class::MOP::__ANON__[:517]
0000s0sClass::MOP::::__ANON__[:615]Class::MOP::__ANON__[:615]
0000s0sClass::MOP::::does_metaclass_existClass::MOP::does_metaclass_exist
0000s0sClass::MOP::::get_all_metaclass_instancesClass::MOP::get_all_metaclass_instances
0000s0sClass::MOP::::get_all_metaclass_namesClass::MOP::get_all_metaclass_names
0000s0sClass::MOP::::get_all_metaclassesClass::MOP::get_all_metaclasses
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;
3
43104µs293µs
# spent 78µs (62+16) within Class::MOP::BEGIN@4 which was called: # once (62µs+16µs) by MooseX::Types::Combine::BEGIN@12 at line 4
use strict;
# spent 78µs making 1 call to Class::MOP::BEGIN@4 # spent 16µs making 1 call to strict::import
5384µs2157µs
# spent 96µs (35+61) within Class::MOP::BEGIN@5 which was called: # once (35µs+61µs) by MooseX::Types::Combine::BEGIN@12 at line 5
use warnings;
# spent 96µs making 1 call to Class::MOP::BEGIN@5 # spent 61µs making 1 call to warnings::import
6
73143µs180µs
# spent 80µs within Class::MOP::BEGIN@7 which was called: # once (80µs+0s) by MooseX::Types::Combine::BEGIN@12 at line 7
use 5.008;
# spent 80µs making 1 call to Class::MOP::BEGIN@7
8
93449µs17.40ms
# spent 7.40ms (4.99+2.42) within Class::MOP::BEGIN@9 which was called: # once (4.99ms+2.42ms) by MooseX::Types::Combine::BEGIN@12 at line 9
use MRO::Compat;
# spent 7.40ms making 1 call to Class::MOP::BEGIN@9
10
1131.56ms24.40ms
# spent 4.11ms (3.82+292µs) within Class::MOP::BEGIN@11 which was called: # once (3.82ms+292µs) by MooseX::Types::Combine::BEGIN@12 at line 11
use Carp 'confess';
# spent 4.11ms making 1 call to Class::MOP::BEGIN@11 # spent 292µs making 1 call to Exporter::import
123440µs25.32ms
# spent 4.90ms (2.85+2.05) within Class::MOP::BEGIN@12 which was called: # once (2.85ms+2.05ms) by MooseX::Types::Combine::BEGIN@12 at line 12
use Scalar::Util 'weaken', 'isweak', 'reftype', 'blessed';
# spent 4.90ms making 1 call to Class::MOP::BEGIN@12 # spent 413µs making 1 call to Exporter::import
133454µs237.8ms
# spent 37.7ms (2.29+35.4) within Class::MOP::BEGIN@13 which was called: # once (2.29ms+35.4ms) by MooseX::Types::Combine::BEGIN@12 at line 13
use Data::OptList;
# spent 37.7ms making 1 call to Class::MOP::BEGIN@13 # spent 24µs making 1 call to Sub::Install::__ANON__[Sub/Install.pm:284]
143514µs23.42ms
# spent 3.20ms (2.24+960µs) within Class::MOP::BEGIN@14 which was called: # once (2.24ms+960µs) by MooseX::Types::Combine::BEGIN@12 at line 14
use Try::Tiny;
# spent 3.20ms making 1 call to Class::MOP::BEGIN@14 # spent 222µs making 1 call to Exporter::import
15
163507µs14.93ms
# spent 4.93ms (2.77+2.16) within Class::MOP::BEGIN@16 which was called: # once (2.77ms+2.16ms) by MooseX::Types::Combine::BEGIN@12 at line 16
use Class::MOP::Mixin::AttributeCore;
# spent 4.93ms making 1 call to Class::MOP::BEGIN@16
173453µs13.30ms
# spent 3.30ms (2.35+948µs) within Class::MOP::BEGIN@17 which was called: # once (2.35ms+948µs) by MooseX::Types::Combine::BEGIN@12 at line 17
use Class::MOP::Mixin::HasAttributes;
# spent 3.30ms making 1 call to Class::MOP::BEGIN@17
183462µs122.3ms
# spent 22.3ms (4.28+18.0) within Class::MOP::BEGIN@18 which was called: # once (4.28ms+18.0ms) by MooseX::Types::Combine::BEGIN@12 at line 18
use Class::MOP::Mixin::HasMethods;
# spent 22.3ms making 1 call to Class::MOP::BEGIN@18
193515µs188.1ms
# spent 88.1ms (22.9+65.2) within Class::MOP::BEGIN@19 which was called: # once (22.9ms+65.2ms) by MooseX::Types::Combine::BEGIN@12 at line 19
use Class::MOP::Class;
# spent 88.1ms making 1 call to Class::MOP::BEGIN@19
203487µs19.48ms
# spent 9.48ms (8.16+1.31) within Class::MOP::BEGIN@20 which was called: # once (8.16ms+1.31ms) by MooseX::Types::Combine::BEGIN@12 at line 20
use Class::MOP::Attribute;
# spent 9.48ms making 1 call to Class::MOP::BEGIN@20
213282µs134µs
# spent 34µs within Class::MOP::BEGIN@21 which was called: # once (34µs+0s) by MooseX::Types::Combine::BEGIN@12 at line 21
use Class::MOP::Method;
# spent 34µs making 1 call to Class::MOP::BEGIN@21
22
23
# spent 30µs within Class::MOP::BEGIN@23 which was called: # once (30µs+0s) by MooseX::Types::Combine::BEGIN@12 at line 30
BEGIN {
24 *IS_RUNNING_ON_5_10 = ($] < 5.009_005)
25 ? sub () { 0 }
2618µs : sub () { 1 };
27
28 # this is either part of core or set up appropriately by MRO::Compat
29123µs *check_package_cache_flag = \&mro::get_pkg_gen;
3018.08ms130µs}
# spent 30µs making 1 call to Class::MOP::BEGIN@23
31
3215µsour $VERSION = '1.11';
3313µsour $XS_VERSION = $VERSION;
34185µs$VERSION = eval $VERSION;
# spent 14µs executing statements in string eval
3514µsour $AUTHORITY = 'cpan:STEVAN';
36
3715µsrequire XSLoader;
381965µs1934µsXSLoader::load( __PACKAGE__, $XS_VERSION );
# spent 934µs making 1 call to XSLoader::load
39
40{
41 # Metaclasses are singletons, so we cache them here.
42 # there is no need to worry about destruction though
43 # because they should die only when the program dies.
44 # After all, do package definitions even get reaped?
45 # Anonymous classes manage their own destruction.
4629µs my %METAS;
47
48 sub get_all_metaclasses { %METAS }
49 sub get_all_metaclass_instances { values %METAS }
50 sub get_all_metaclass_names { keys %METAS }
518419110ms
# spent 78.0ms within Class::MOP::get_metaclass_by_name which was called 8419 times, avg 9µs/call: # 6454 times (60.5ms+0s) by Class::MOP::Class::initialize at line 45 of Class/MOP/Class.pm, avg 9µs/call # 1134 times (9.51ms+0s) by Class::MOP::Class::_single_metaclass_is_compatible at line 292 of Class/MOP/Class.pm, avg 8µs/call # 174 times (1.42ms+0s) by Class::MOP::Class::_construct_class_instance at line 86 of Class/MOP/Class.pm, avg 8µs/call # 162 times (1.73ms+0s) by Class::MOP::Class::_class_metaclass_is_compatible at line 262 of Class/MOP/Class.pm, avg 11µs/call # 132 times (1.09ms+0s) by Class::MOP::Package::initialize at line 30 of Class/MOP/Package.pm, avg 8µs/call # 125 times (1.03ms+0s) by Moose::Meta::Role::initialize at line 165 of Moose/Meta/Role.pm, avg 8µs/call # 110 times (1.02ms+0s) by Moose::Meta::Class::initialize at line 68 of Moose/Meta/Class.pm, avg 9µs/call # 83 times (1.11ms+0s) by Moose::Role::init_meta at line 120 of Moose/Role.pm, avg 13µs/call # 45 times (541µs+0s) by Moose::init_meta at line 167 of Moose.pm, avg 12µs/call
sub get_metaclass_by_name { $METAS{$_[0]} }
523065.07ms
# spent 4.27ms within Class::MOP::store_metaclass_by_name which was called 306 times, avg 14µs/call: # 174 times (2.36ms+0s) by Class::MOP::Class::_construct_class_instance at line 111 of Class/MOP/Class.pm, avg 14µs/call # 132 times (1.91ms+0s) by Class::MOP::Package::initialize at line 37 of Class/MOP/Package.pm, avg 14µs/call
sub store_metaclass_by_name { $METAS{$_[0]} = $_[1] }
53441.47ms44450µs
# spent 1.41ms (955µs+450µs) within Class::MOP::weaken_metaclass which was called 44 times, avg 32µs/call: # 42 times (913µs+432µs) by Moose::Meta::Role::initialize at line 177 of Moose/Meta/Role.pm, avg 32µs/call # 2 times (43µs+18µs) by Class::MOP::Class::_construct_class_instance at line 116 of Class/MOP/Class.pm, avg 30µs/call
sub weaken_metaclass { weaken($METAS{$_[0]}) }
# spent 450µs making 44 calls to Scalar::Util::weaken, avg 10µs/call
5451313.9ms5133.08ms
# spent 13.1ms (10.0+3.08) within Class::MOP::metaclass_is_weak which was called 513 times, avg 26µs/call: # 440 times (8.56ms+2.67ms) by Class::MOP::Class::_construct_instance at line 605 of Class/MOP/Class.pm, avg 26µs/call # 42 times (856µs+223µs) by Class::MOP::Class::reinitialize at line 56 of Class/MOP/Class.pm, avg 26µs/call # 31 times (616µs+189µs) by Class::MOP::Method::Constructor::_generate_constructor_method_inline at line 117 of Class/MOP/Method/Constructor.pm, avg 26µs/call
sub metaclass_is_weak { isweak($METAS{$_[0]}) }
# spent 3.08ms making 513 calls to Scalar::Util::isweak, avg 6µs/call
55 sub does_metaclass_exist { exists $METAS{$_[0]} && defined $METAS{$_[0]} }
5684668µs
# spent 519µs within Class::MOP::remove_metaclass_by_name which was called 42 times, avg 12µs/call: # 42 times (519µs+0s) by Class::MOP::Package::reinitialize at line 58 of Class/MOP/Package.pm, avg 12µs/call
sub remove_metaclass_by_name { delete $METAS{$_[0]}; return }
57
58 # This handles instances as well as class names
59
# spent 49.9ms (41.6+8.29) within Class::MOP::class_of which was called 1578 times, avg 32µs/call: # 427 times (9.99ms+1.92ms) by Moose::Meta::Class::excludes_role at line 240 of Moose/Meta/Class.pm, avg 28µs/call # 217 times (6.79ms+1.26ms) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:321] at line 321 of Moose/Exporter.pm, avg 37µs/call # 180 times (5.43ms+1.17ms) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:125] at line 96 of Moose/Exporter.pm, avg 37µs/call # 153 times (3.90ms+738µs) by Moose::Util::_apply_all_roles at line 114 of Moose/Util.pm, avg 30µs/call # 130 times (3.08ms+599µs) by Moose::Meta::Class::does_role at line 220 of Moose/Meta/Class.pm, avg 28µs/call # 122 times (3.41ms+793µs) by Class::MOP::Class::_superclasses_updated at line 869 of Class/MOP/Class.pm, avg 34µs/call # 120 times (3.19ms+681µs) by Moose::Meta::Class::superclasses at line 289 of Moose/Meta/Class.pm, avg 32µs/call # 42 times (1.26ms+269µs) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:643] at line 625 of Moose/Exporter.pm, avg 36µs/call # 42 times (1.22ms+224µs) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:643] at line 636 of Moose/Exporter.pm, avg 34µs/call # 42 times (988µs+182µs) by Moose::Exporter::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Moose/Exporter.pm:643] at line 642 of Moose/Exporter.pm, avg 28µs/call # 42 times (952µs+180µs) by Moose::Util::MetaRole::apply_base_class_roles at line 138 of Moose/Util/MetaRole.pm, avg 27µs/call # 42 times (908µs+167µs) by Moose::Util::MetaRole::apply_metaroles at line 30 of Moose/Util/MetaRole.pm, avg 26µs/call # 9 times (211µs+39µs) by Moose::Meta::Attribute::BEGIN@20 at line 693 of Moose/Util/TypeConstraints.pm, avg 28µs/call # 6 times (164µs+38µs) by Moose::Object::does at line 122 of Moose/Object.pm, avg 34µs/call # 2 times (59µs+11µs) by MooseX::Role::Parameterized::role at line 41 of MooseX/Role/Parameterized.pm, avg 35µs/call # once (28µs+5µs) by Class::MOP::Object::_new at line 22 of Class/MOP/Object.pm # once (28µs+5µs) by MooseX::Role::Parameterized::parameter at line 28 of MooseX/Role/Parameterized.pm
sub class_of {
6015783.78ms return unless defined $_[0];
61157829.4ms15788.29ms my $class = blessed($_[0]) || $_[0];
# spent 8.29ms making 1578 calls to Scalar::Util::blessed, avg 5µs/call
62157821.0ms return $METAS{$class};
63 }
64
65 # NOTE:
66 # We only cache metaclasses, meaning instances of
67 # Class::MOP::Class. We do not cache instance of
68 # Class::MOP::Package or Class::MOP::Module. Mostly
69 # because I don't yet see a good reason to do so.
70}
71
72
# spent 1.58ms (1.09+487µs) within Class::MOP::_class_to_pmfile which was called 37 times, avg 43µs/call: # 37 times (1.09ms+487µs) by Class::MOP::load_first_existing_class at line 111, avg 43µs/call
sub _class_to_pmfile {
7337134µs my $class = shift;
74
7537160µs my $file = $class . '.pm';
7637902µs37487µs $file =~ s{::}{/}g;
# spent 487µs making 37 calls to Class::MOP::CORE:subst, avg 13µs/call
77
7837439µs return $file;
79}
80
81
# spent 5.94s (59.1ms+5.88) within Class::MOP::load_first_existing_class which was called 709 times, avg 8.38ms/call: # 699 times (57.6ms+5.87s) by Class::MOP::load_class at line 137, avg 8.49ms/call # 10 times (1.50ms+4.71ms) by Moose::Util::resolve_metaclass_alias at line 202 of Moose/Util.pm, avg 621µs/call
sub load_first_existing_class {
827098.55ms70943.5ms my $classes = Data::OptList::mkopt(\@_)
# spent 43.5ms making 709 calls to Data::OptList::mkopt, avg 61µs/call
83 or return;
84
857094.44ms foreach my $class (@{ $classes }) {
867192.59ms my $name = $class->[0];
8771911.5ms71934.9ms unless ( _is_valid_class_name($name) ) {
# spent 34.9ms making 719 calls to Class::MOP::_is_valid_class_name, avg 49µs/call
88 my $display = defined($name) ? $name : 'undef';
89 confess "Invalid class name ($display)";
90 }
91 }
92
937091.41ms my $found;
947091.52ms my %exceptions;
95
967092.45ms for my $class (@{ $classes }) {
977143.05ms my ($name, $options) = @{ $class };
98
997141.70ms if ($options) {
100653.36ms651.55ms return $name if is_class_loaded($name, $options);
# spent 1.55ms making 65 calls to Class::MOP::is_class_loaded, avg 24µs/call
1018162µs873µs if (is_class_loaded($name)) {
# spent 73µs making 8 calls to Class::MOP::is_class_loaded, avg 9µs/call
102 # we already know it's loaded and too old, but we call
103 # ->VERSION anyway to generate the exception for us
104 $name->VERSION($options->{-version});
105 }
106 }
107 else {
10864928.5ms64912.3ms return $name if is_class_loaded($name);
# spent 12.3ms making 649 calls to Class::MOP::is_class_loaded, avg 19µs/call
109 }
110
11137412µs371.58ms my $file = _class_to_pmfile($name);
# spent 1.58ms making 37 calls to Class::MOP::_class_to_pmfile, avg 43µs/call
112
# spent 7.20s (76.5ms+7.13) within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:118] which was called 37 times, avg 195ms/call: # 37 times (76.5ms+7.13s) by Try::Tiny::try at line 71 of Try/Tiny.pm, avg 195ms/call
return $name if try {
11337711µs local $SIG{__DIE__};
1143714.5ms require $file;
11532266µs $name->VERSION($options->{-version})
116 if defined $options->{-version};
11732689µs return 1;
118 }
119
# spent 478µs (200+278) within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:125] which was called 5 times, avg 96µs/call: # 5 times (200µs+278µs) by Try::Tiny::try at line 100 of Try/Tiny.pm, avg 96µs/call
catch {
1205429µs10279µs unless (/^Can't locate \Q$file\E in \@INC/) {
# spent 238µs making 5 calls to Class::MOP::CORE:regcomp, avg 48µs/call # spent 40µs making 5 calls to Class::MOP::CORE:match, avg 8µs/call
121 confess "Couldn't load class ($name) because: $_";
122 }
123
124563µs return;
125372.07ms745.83s };
# spent 7.21s making 37 calls to Try::Tiny::try, avg 195ms/call, recursion: max depth 4, sum of overlapping time 1.38s # spent 800µs making 37 calls to Try::Tiny::catch, avg 22µs/call
126 }
127
128 if ( @{ $classes } > 1 ) {
129 my @list = map { $_->[0] } @{ $classes };
130 confess "Can't locate any of @list in \@INC (\@INC contains: @INC).";
131 } else {
132 confess "Can't locate " . _class_to_pmfile($classes->[0]->[0]) . " in \@INC (\@INC contains: @INC).";
133 }
134}
135
136
# spent 5.94s (18.9ms+5.93) within Class::MOP::load_class which was called 699 times, avg 8.50ms/call: # 184 times (4.59ms+22.4ms) by Moose::Meta::Role::apply at line 450 of Moose/Meta/Role.pm, avg 147µs/call # 153 times (4.49ms+992ms) by Moose::Util::_apply_all_roles at line 113 of Moose/Util.pm, avg 6.52ms/call # 120 times (3.26ms+21.5ms) by Moose::Meta::Class::superclasses at line 288 of Moose/Meta/Class.pm, avg 206µs/call # 73 times (1.99ms+7.61ms) by Class::MOP::Class::_inline_constructor at line 1328 of Class/MOP/Class.pm, avg 132µs/call # 56 times (1.49ms+1.52s) by MooseX::Types::Combine::import at line 40 of MooseX/Types/Combine.pm, avg 27.1ms/call # 42 times (1.02ms+9.06ms) by MooseX::Role::Parameterized::Meta::Role::Parameterizable::generate_role at line 83 of MooseX/Role/Parameterized/Meta/Role/Parameterizable.pm, avg 240µs/call # 42 times (1.18ms+8.41ms) by Class::MOP::Class::_inline_destructor at line 1360 of Class/MOP/Class.pm, avg 228µs/call # 14 times (411µs+4.00ms) by Class::MOP::MiniTrait::apply at line 14 of Class/MOP/MiniTrait.pm, avg 315µs/call # 9 times (227µs+-227µs) by Moose::Meta::Role::Composite::apply_params at line 122 of Moose/Meta/Role/Composite.pm, avg 0s/call # 5 times (215µs+3.34s) by Moose::Meta::Attribute::Custom::Trait::Array::register_implementation or Moose::Meta::Attribute::Custom::Trait::Bool::register_implementation or Moose::Meta::Attribute::Custom::Trait::Counter::register_implementation or Moose::Meta::Attribute::Custom::Trait::Hash::register_implementation or Moose::Meta::Attribute::Custom::Trait::String::register_implementation at line 24 of Moose/Meta/Attribute/Native.pm, avg 669ms/call # once (27µs+-27µs) by metaclass::import at line 29 of metaclass.pm
sub load_class {
1376999.20ms6995.93s load_first_existing_class($_[0], ref $_[1] ? $_[1] : ());
# spent 7.36s making 699 calls to Class::MOP::load_first_existing_class, avg 10.5ms/call, recursion: max depth 4, sum of overlapping time 1.42s
138
139 # This is done to avoid breaking code which checked the return value. Said
140 # code is dumb. The return value was _always_ true, since it dies on
141 # failure!
1426997.95ms return 1;
143}
144
145
# spent 38.5ms (22.9+15.6) within Class::MOP::_is_valid_class_name which was called 785 times, avg 49µs/call: # 719 times (21.0ms+13.9ms) by Class::MOP::load_first_existing_class at line 87, avg 49µs/call # 66 times (1.95ms+1.67ms) by Class::MOP::Module::_instantiate_module at line 61 of Class/MOP/Module.pm, avg 55µs/call
sub _is_valid_class_name {
1467852.64ms my $class = shift;
147
1487851.57ms return 0 if ref($class);
1497851.70ms return 0 unless defined($class);
1507851.79ms return 0 unless length($class);
151
15278531.4ms78515.6ms return 1 if $class =~ /^\w+(?:::\w+)*$/;
# spent 15.6ms making 785 calls to Class::MOP::CORE:match, avg 20µs/call
153
154 return 0;
155}
156
157## ----------------------------------------------------------------------------
158## Setting up our environment ...
159## ----------------------------------------------------------------------------
160## Class::MOP needs to have a few things in the global perl environment so
161## that it can operate effectively. Those things are done here.
162## ----------------------------------------------------------------------------
163
164# ... nothing yet actually ;)
165
166## ----------------------------------------------------------------------------
167## Bootstrapping
168## ----------------------------------------------------------------------------
169## The code below here is to bootstrap our MOP with itself. This is also
170## sometimes called "tying the knot". By doing this, we make it much easier
171## to extend the MOP through subclassing and such since now you can use the
172## MOP itself to extend itself.
173##
174## Yes, I know, thats weird and insane, but it's a good thing, trust me :)
175## ----------------------------------------------------------------------------
176
177# We need to add in the meta-attributes here so that
178# any subclass of Class::MOP::* will be able to
179# inherit them using _construct_instance
180
181## --------------------------------------------------------
182## Class::MOP::Mixin::HasMethods
183
184Class::MOP::Mixin::HasMethods->meta->add_attribute(
185 Class::MOP::Attribute->new('_methods' => (
186 reader => {
187 # NOTE:
188 # we just alias the original method
189 # rather than re-produce it here
190 '_full_method_map' => \&Class::MOP::Mixin::HasMethods::_full_method_map
191 },
1922353.02ms
# spent 2.33ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:192] which was called 235 times, avg 10µs/call: # 154 times (1.54ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 10µs/call # 81 times (797µs+0s) by Moose::Meta::Role::_new at line 41 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call
default => sub { {} }
193183µs36.01ms ))
# spent 3.23ms making 1 call to Class::MOP::Mixin::meta # spent 2.54ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 242µs making 1 call to Class::MOP::Attribute::new
194);
195
196145µs31.69msClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 1.49ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 120µs making 1 call to Class::MOP::Attribute::new # spent 86µs making 1 call to Class::MOP::Mixin::meta
197 Class::MOP::Attribute->new('method_metaclass' => (
198 reader => {
199 # NOTE:
200 # we just alias the original method
201 # rather than re-produce it here
202 'method_metaclass' => \&Class::MOP::Mixin::HasMethods::method_metaclass
203 },
204 default => 'Class::MOP::Method',
205 ))
206);
207
208145µs31.64msClass::MOP::Mixin::HasMethods->meta->add_attribute(
# spent 1.43ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 121µs making 1 call to Class::MOP::Attribute::new # spent 85µs making 1 call to Class::MOP::Mixin::meta
209 Class::MOP::Attribute->new('wrapped_method_metaclass' => (
210 reader => {
211 # NOTE:
212 # we just alias the original method
213 # rather than re-produce it here
214 'wrapped_method_metaclass' => \&Class::MOP::Mixin::HasMethods::wrapped_method_metaclass
215 },
216 default => 'Class::MOP::Method::Wrapped',
217 ))
218);
219
220## --------------------------------------------------------
221## Class::MOP::Mixin::HasMethods
222
223Class::MOP::Mixin::HasAttributes->meta->add_attribute(
224 Class::MOP::Attribute->new('attributes' => (
225 reader => {
226 # NOTE: we need to do this in order
227 # for the instance meta-object to
228 # not fall into meta-circular death
229 #
230 # we just alias the original method
231 # rather than re-produce it here
232 '_attribute_map' => \&Class::MOP::Mixin::HasAttributes::_attribute_map
233 },
2342443.06ms
# spent 2.43ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:234] which was called 244 times, avg 10µs/call: # 154 times (1.54ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 10µs/call # 81 times (809µs+0s) by Moose::Meta::Role::_new at line 100 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call # 9 times (86µs+0s) by Moose::Meta::Role::Composite::_new at line 108 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call
default => sub { {} }
235161µs33.68ms ))
# spent 1.98ms making 1 call to Class::MOP::Mixin::meta # spent 1.52ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 171µs making 1 call to Class::MOP::Attribute::new
236);
237
238143µs31.63msClass::MOP::Mixin::HasAttributes->meta->add_attribute(
# spent 1.43ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 115µs making 1 call to Class::MOP::Attribute::new # spent 81µs making 1 call to Class::MOP::Mixin::meta
239 Class::MOP::Attribute->new('attribute_metaclass' => (
240 reader => {
241 # NOTE:
242 # we just alias the original method
243 # rather than re-produce it here
244 'attribute_metaclass' => \&Class::MOP::Mixin::HasAttributes::attribute_metaclass
245 },
246 default => 'Class::MOP::Attribute',
247 ))
248);
249
250## --------------------------------------------------------
251## Class::MOP::Package
252
253158µs34.22msClass::MOP::Package->meta->add_attribute(
# spent 2.54ms making 1 call to Class::MOP::Object::meta # spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 143µs making 1 call to Class::MOP::Attribute::new
254 Class::MOP::Attribute->new('package' => (
255 reader => {
256 # NOTE: we need to do this in order
257 # for the instance meta-object to
258 # not fall into meta-circular death
259 #
260 # we just alias the original method
261 # rather than re-produce it here
262 'name' => \&Class::MOP::Package::name
263 },
264 ))
265);
266
267Class::MOP::Package->meta->add_attribute(
268 Class::MOP::Attribute->new('namespace' => (
269 reader => {
270 # NOTE:
271 # we just alias the original method
272 # rather than re-produce it here
273 'namespace' => \&Class::MOP::Package::namespace
274 },
275 init_arg => undef,
2762443.16ms
# spent 2.34ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:276] which was called 244 times, avg 10µs/call: # 154 times (1.44ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 9µs/call # 81 times (814µs+0s) by Moose::Meta::Role::_new at line 43 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call # 9 times (86µs+0s) by Moose::Meta::Role::Composite::_new at line 48 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 10µs/call
default => sub { \undef }
277153µs31.71ms ))
# spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 149µs making 1 call to Class::MOP::Attribute::new # spent 84µs making 1 call to Class::MOP::Object::meta
278);
279
280## --------------------------------------------------------
281## Class::MOP::Module
282
283# NOTE:
284# yeah this is kind of stretching things a bit,
285# but truthfully the version should be an attribute
286# of the Module, the weirdness comes from having to
287# stick to Perl 5 convention and store it in the
288# $VERSION package variable. Basically if you just
289# squint at it, it will look how you want it to look.
290# Either as a package variable, or as a attribute of
291# the metaclass, isn't abstraction great :)
292
293Class::MOP::Module->meta->add_attribute(
294 Class::MOP::Attribute->new('version' => (
295 reader => {
296 # NOTE:
297 # we just alias the original method
298 # rather than re-produce it here
299 'version' => \&Class::MOP::Module::version
300 },
301 init_arg => undef,
3022442.98ms
# spent 2.52ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:302] which was called 244 times, avg 10µs/call: # 154 times (1.44ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 9µs/call # 81 times (1000µs+0s) by Moose::Meta::Role::_new at line 45 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 12µs/call # 9 times (79µs+0s) by Moose::Meta::Role::Composite::_new at line 50 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 9µs/call
default => sub { \undef }
303167µs33.65ms ))
# spent 1.95ms making 1 call to Class::MOP::Object::meta # spent 1.46ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 242µs making 1 call to Class::MOP::Attribute::new
304);
305
306# NOTE:
307# By following the same conventions as version here,
308# we are opening up the possibility that people can
309# use the $AUTHORITY in non-Class::MOP modules as
310# well.
311
312Class::MOP::Module->meta->add_attribute(
313 Class::MOP::Attribute->new('authority' => (
314 reader => {
315 # NOTE:
316 # we just alias the original method
317 # rather than re-produce it here
318 'authority' => \&Class::MOP::Module::authority
319 },
320 init_arg => undef,
3212442.96ms
# spent 2.45ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:321] which was called 244 times, avg 10µs/call: # 154 times (1.60ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 10µs/call # 81 times (768µs+0s) by Moose::Meta::Role::_new at line 95 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 9µs/call # 9 times (81µs+0s) by Moose::Meta::Role::Composite::_new at line 103 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 9µs/call
default => sub { \undef }
322152µs31.71ms ))
# spent 1.47ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 156µs making 1 call to Class::MOP::Attribute::new # spent 84µs making 1 call to Class::MOP::Object::meta
323);
324
325## --------------------------------------------------------
326## Class::MOP::Class
327
328Class::MOP::Class->meta->add_attribute(
329 Class::MOP::Attribute->new('superclasses' => (
330 accessor => {
331 # NOTE:
332 # we just alias the original method
333 # rather than re-produce it here
334 'superclasses' => \&Class::MOP::Class::superclasses
335 },
336 init_arg => undef,
3371101.56ms
# spent 1.17ms within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:337] which was called 110 times, avg 11µs/call: # 110 times (1.17ms+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 11µs/call
default => sub { \undef }
338176µs35.91ms ))
# spent 4.24ms making 1 call to Class::MOP::Object::meta # spent 1.52ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 152µs making 1 call to Class::MOP::Attribute::new
339);
340
341152µs31.72msClass::MOP::Class->meta->add_attribute(
# spent 1.50ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 134µs making 1 call to Class::MOP::Attribute::new # spent 89µs making 1 call to Class::MOP::Object::meta
342 Class::MOP::Attribute->new('instance_metaclass' => (
343 reader => {
344 # NOTE: we need to do this in order
345 # for the instance meta-object to
346 # not fall into meta-circular death
347 #
348 # we just alias the original method
349 # rather than re-produce it here
350 'instance_metaclass' => \&Class::MOP::Class::instance_metaclass
351 },
352 default => 'Class::MOP::Instance',
353 ))
354);
355
356144µs31.74msClass::MOP::Class->meta->add_attribute(
# spent 1.55ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 115µs making 1 call to Class::MOP::Attribute::new # spent 82µs making 1 call to Class::MOP::Object::meta
357 Class::MOP::Attribute->new('immutable_trait' => (
358 reader => {
359 'immutable_trait' => \&Class::MOP::Class::immutable_trait
360 },
361 default => "Class::MOP::Class::Immutable::Trait",
362 ))
363);
364
365145µs31.66msClass::MOP::Class->meta->add_attribute(
# spent 1.46ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 117µs making 1 call to Class::MOP::Attribute::new # spent 84µs making 1 call to Class::MOP::Object::meta
366 Class::MOP::Attribute->new('constructor_name' => (
367 reader => {
368 'constructor_name' => \&Class::MOP::Class::constructor_name,
369 },
370 default => "new",
371 ))
372);
373
374147µs31.73msClass::MOP::Class->meta->add_attribute(
# spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 115µs making 1 call to Class::MOP::Attribute::new # spent 85µs making 1 call to Class::MOP::Object::meta
375 Class::MOP::Attribute->new('constructor_class' => (
376 reader => {
377 'constructor_class' => \&Class::MOP::Class::constructor_class,
378 },
379 default => "Class::MOP::Method::Constructor",
380 ))
381);
382
383
384143µs31.68msClass::MOP::Class->meta->add_attribute(
# spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 110µs making 1 call to Class::MOP::Attribute::new # spent 82µs making 1 call to Class::MOP::Object::meta
385 Class::MOP::Attribute->new('destructor_class' => (
386 reader => {
387 'destructor_class' => \&Class::MOP::Class::destructor_class,
388 },
389 ))
390);
391
392# NOTE:
393# we don't actually need to tie the knot with
394# Class::MOP::Class here, it is actually handled
395# within Class::MOP::Class itself in the
396# _construct_class_instance method.
397
398## --------------------------------------------------------
399## Class::MOP::Mixin::AttributeCore
400174µs33.57msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 1.98ms making 1 call to Class::MOP::Mixin::meta # spent 1.44ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 144µs making 1 call to Class::MOP::Attribute::new
401 Class::MOP::Attribute->new('name' => (
402 reader => {
403 # NOTE: we need to do this in order
404 # for the instance meta-object to
405 # not fall into meta-circular death
406 #
407 # we just alias the original method
408 # rather than re-produce it here
409 'name' => \&Class::MOP::Mixin::AttributeCore::name
410 }
411 ))
412);
413
414146µs32.43msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.24ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 114µs making 1 call to Class::MOP::Attribute::new # spent 82µs making 1 call to Class::MOP::Mixin::meta
415 Class::MOP::Attribute->new('accessor' => (
416 reader => { 'accessor' => \&Class::MOP::Mixin::AttributeCore::accessor },
417 predicate => { 'has_accessor' => \&Class::MOP::Mixin::AttributeCore::has_accessor },
418 ))
419);
420
421147µs32.35msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.15ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 113µs making 1 call to Class::MOP::Attribute::new # spent 83µs making 1 call to Class::MOP::Mixin::meta
422 Class::MOP::Attribute->new('reader' => (
423 reader => { 'reader' => \&Class::MOP::Mixin::AttributeCore::reader },
424 predicate => { 'has_reader' => \&Class::MOP::Mixin::AttributeCore::has_reader },
425 ))
426);
427
428147µs32.30msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.11ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 113µs making 1 call to Class::MOP::Attribute::new # spent 82µs making 1 call to Class::MOP::Mixin::meta
429 Class::MOP::Attribute->new('initializer' => (
430 reader => { 'initializer' => \&Class::MOP::Mixin::AttributeCore::initializer },
431 predicate => { 'has_initializer' => \&Class::MOP::Mixin::AttributeCore::has_initializer },
432 ))
433);
434
435143µs31.69msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 134µs making 1 call to Class::MOP::Attribute::new # spent 81µs making 1 call to Class::MOP::Mixin::meta
436 Class::MOP::Attribute->new('definition_context' => (
437 reader => { 'definition_context' => \&Class::MOP::Mixin::AttributeCore::definition_context },
438 ))
439);
440
441147µs32.46msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.27ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 113µs making 1 call to Class::MOP::Attribute::new # spent 82µs making 1 call to Class::MOP::Mixin::meta
442 Class::MOP::Attribute->new('writer' => (
443 reader => { 'writer' => \&Class::MOP::Mixin::AttributeCore::writer },
444 predicate => { 'has_writer' => \&Class::MOP::Mixin::AttributeCore::has_writer },
445 ))
446);
447
448147µs32.35msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.15ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 114µs making 1 call to Class::MOP::Attribute::new # spent 83µs making 1 call to Class::MOP::Mixin::meta
449 Class::MOP::Attribute->new('predicate' => (
450 reader => { 'predicate' => \&Class::MOP::Mixin::AttributeCore::predicate },
451 predicate => { 'has_predicate' => \&Class::MOP::Mixin::AttributeCore::has_predicate },
452 ))
453);
454
455147µs32.32msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.13ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 114µs making 1 call to Class::MOP::Attribute::new # spent 81µs making 1 call to Class::MOP::Mixin::meta
456 Class::MOP::Attribute->new('clearer' => (
457 reader => { 'clearer' => \&Class::MOP::Mixin::AttributeCore::clearer },
458 predicate => { 'has_clearer' => \&Class::MOP::Mixin::AttributeCore::has_clearer },
459 ))
460);
461
462149µs32.36msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.17ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 111µs making 1 call to Class::MOP::Attribute::new # spent 83µs making 1 call to Class::MOP::Mixin::meta
463 Class::MOP::Attribute->new('builder' => (
464 reader => { 'builder' => \&Class::MOP::Mixin::AttributeCore::builder },
465 predicate => { 'has_builder' => \&Class::MOP::Mixin::AttributeCore::has_builder },
466 ))
467);
468
469149µs32.32msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.12ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 113µs making 1 call to Class::MOP::Attribute::new # spent 84µs making 1 call to Class::MOP::Mixin::meta
470 Class::MOP::Attribute->new('init_arg' => (
471 reader => { 'init_arg' => \&Class::MOP::Mixin::AttributeCore::init_arg },
472 predicate => { 'has_init_arg' => \&Class::MOP::Mixin::AttributeCore::has_init_arg },
473 ))
474);
475
476174µs31.61msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 1.42ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 113µs making 1 call to Class::MOP::Attribute::new # spent 81µs making 1 call to Class::MOP::Mixin::meta
477 Class::MOP::Attribute->new('default' => (
478 # default has a custom 'reader' method ...
479 predicate => { 'has_default' => \&Class::MOP::Mixin::AttributeCore::has_default },
480 ))
481);
482
483150µs33.07msClass::MOP::Mixin::AttributeCore->meta->add_attribute(
# spent 2.88ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 110µs making 1 call to Class::MOP::Attribute::new # spent 79µs making 1 call to Class::MOP::Mixin::meta
484 Class::MOP::Attribute->new('insertion_order' => (
485 reader => { 'insertion_order' => \&Class::MOP::Mixin::AttributeCore::insertion_order },
486 writer => { '_set_insertion_order' => \&Class::MOP::Mixin::AttributeCore::_set_insertion_order },
487 predicate => { 'has_insertion_order' => \&Class::MOP::Mixin::AttributeCore::has_insertion_order },
488 ))
489);
490
491## --------------------------------------------------------
492## Class::MOP::Attribute
493159µs34.72msClass::MOP::Attribute->meta->add_attribute(
# spent 3.13ms making 1 call to Class::MOP::Object::meta # spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 111µs making 1 call to Class::MOP::Attribute::new
494 Class::MOP::Attribute->new('associated_class' => (
495 reader => {
496 # NOTE: we need to do this in order
497 # for the instance meta-object to
498 # not fall into meta-circular death
499 #
500 # we just alias the original method
501 # rather than re-produce it here
502 'associated_class' => \&Class::MOP::Attribute::associated_class
503 }
504 ))
505);
506
507Class::MOP::Attribute->meta->add_attribute(
508 Class::MOP::Attribute->new('associated_methods' => (
509 reader => { 'associated_methods' => \&Class::MOP::Attribute::associated_methods },
510721.15ms
# spent 794µs within Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:510] which was called 72 times, avg 11µs/call: # 46 times (506µs+0s) by Moose::Meta::Attribute::_new at line 74 of (eval 76)[Class/MOP/Method/Generated.pm:53], avg 11µs/call # 25 times (276µs+0s) by Class::MOP::Mixin::AttributeCore::default at line 53 of Class/MOP/Mixin/AttributeCore.pm, avg 11µs/call # once (12µs+0s) by MooseX::Role::Parameterized::Meta::Parameter::_new at line 143 of generated method (unknown origin)
default => sub { [] }
511156µs31.78ms ))
# spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 152µs making 1 call to Class::MOP::Attribute::new # spent 100µs making 1 call to Class::MOP::Object::meta
512);
513
514Class::MOP::Attribute->meta->add_method('clone' => sub {
51514µs my $self = shift;
516145µs21.38ms $self->meta->clone_object($self, @_);
# spent 1.30ms making 1 call to Class::MOP::Class::clone_object # spent 81µs making 1 call to Class::MOP::Object::meta
517134µs2455µs});
# spent 372µs making 1 call to Class::MOP::Mixin::HasMethods::add_method # spent 84µs making 1 call to Class::MOP::Object::meta
518
519## --------------------------------------------------------
520## Class::MOP::Method
521152µs33.62msClass::MOP::Method->meta->add_attribute(
# spent 1.99ms making 1 call to Class::MOP::Object::meta # spent 1.51ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 128µs making 1 call to Class::MOP::Attribute::new
522 Class::MOP::Attribute->new('body' => (
523 reader => { 'body' => \&Class::MOP::Method::body },
524 ))
525);
526
527143µs31.62msClass::MOP::Method->meta->add_attribute(
# spent 1.43ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 111µs making 1 call to Class::MOP::Attribute::new # spent 85µs making 1 call to Class::MOP::Object::meta
528 Class::MOP::Attribute->new('associated_metaclass' => (
529 reader => { 'associated_metaclass' => \&Class::MOP::Method::associated_metaclass },
530 ))
531);
532
533145µs31.70msClass::MOP::Method->meta->add_attribute(
# spent 1.50ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 110µs making 1 call to Class::MOP::Attribute::new # spent 85µs making 1 call to Class::MOP::Object::meta
534 Class::MOP::Attribute->new('package_name' => (
535 reader => { 'package_name' => \&Class::MOP::Method::package_name },
536 ))
537);
538
539143µs31.74msClass::MOP::Method->meta->add_attribute(
# spent 1.54ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 109µs making 1 call to Class::MOP::Attribute::new # spent 84µs making 1 call to Class::MOP::Object::meta
540 Class::MOP::Attribute->new('name' => (
541 reader => { 'name' => \&Class::MOP::Method::name },
542 ))
543);
544
545148µs32.36msClass::MOP::Method->meta->add_attribute(
# spent 2.17ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 112µs making 1 call to Class::MOP::Attribute::new # spent 85µs making 1 call to Class::MOP::Object::meta
546 Class::MOP::Attribute->new('original_method' => (
547 reader => { 'original_method' => \&Class::MOP::Method::original_method },
548 writer => { '_set_original_method' => \&Class::MOP::Method::_set_original_method },
549 ))
550);
551
552## --------------------------------------------------------
553## Class::MOP::Method::Wrapped
554
555# NOTE:
556# the way this item is initialized, this
557# really does not follow the standard
558# practices of attributes, but we put
559# it here for completeness
560153µs32.86msClass::MOP::Method::Wrapped->meta->add_attribute(
# spent 1.97ms making 1 call to Class::MOP::Object::meta # spent 783µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 110µs making 1 call to Class::MOP::Attribute::new
561 Class::MOP::Attribute->new('modifier_table')
562);
563
564## --------------------------------------------------------
565## Class::MOP::Method::Generated
566
567162µs33.60msClass::MOP::Method::Generated->meta->add_attribute(
# spent 2.01ms making 1 call to Class::MOP::Object::meta # spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 116µs making 1 call to Class::MOP::Attribute::new
568 Class::MOP::Attribute->new('is_inline' => (
569 reader => { 'is_inline' => \&Class::MOP::Method::Generated::is_inline },
570 default => 0,
571 ))
572);
573
574144µs31.69msClass::MOP::Method::Generated->meta->add_attribute(
# spent 1.48ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 112µs making 1 call to Class::MOP::Attribute::new # spent 94µs making 1 call to Class::MOP::Object::meta
575 Class::MOP::Attribute->new('definition_context' => (
576 reader => { 'definition_context' => \&Class::MOP::Method::Generated::definition_context },
577 ))
578);
579
580
581## --------------------------------------------------------
582## Class::MOP::Method::Inlined
583
584163µs33.73msClass::MOP::Method::Inlined->meta->add_attribute(
# spent 2.11ms making 1 call to Class::MOP::Object::meta # spent 1.51ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 111µs making 1 call to Class::MOP::Attribute::new
585 Class::MOP::Attribute->new('_expected_method_class' => (
586 reader => { '_expected_method_class' => \&Class::MOP::Method::Inlined::_expected_method_class },
587 ))
588);
589
590## --------------------------------------------------------
591## Class::MOP::Method::Accessor
592
593164µs33.56msClass::MOP::Method::Accessor->meta->add_attribute(
# spent 1.98ms making 1 call to Class::MOP::Object::meta # spent 1.46ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 124µs making 1 call to Class::MOP::Attribute::new
594 Class::MOP::Attribute->new('attribute' => (
595 reader => {
596 'associated_attribute' => \&Class::MOP::Method::Accessor::associated_attribute
597 },
598 ))
599);
600
601144µs31.68msClass::MOP::Method::Accessor->meta->add_attribute(
# spent 1.49ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 109µs making 1 call to Class::MOP::Attribute::new # spent 83µs making 1 call to Class::MOP::Object::meta
602 Class::MOP::Attribute->new('accessor_type' => (
603 reader => { 'accessor_type' => \&Class::MOP::Method::Accessor::accessor_type },
604 ))
605);
606
607## --------------------------------------------------------
608## Class::MOP::Method::Constructor
609
610Class::MOP::Method::Constructor->meta->add_attribute(
611 Class::MOP::Attribute->new('options' => (
612 reader => {
613 'options' => \&Class::MOP::Method::Constructor::options
614 },
615 default => sub { +{} }
616175µs33.65ms ))
# spent 1.96ms making 1 call to Class::MOP::Object::meta # spent 1.54ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 154µs making 1 call to Class::MOP::Attribute::new
617);
618
619144µs31.64msClass::MOP::Method::Constructor->meta->add_attribute(
# spent 1.45ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 111µs making 1 call to Class::MOP::Attribute::new # spent 84µs making 1 call to Class::MOP::Object::meta
620 Class::MOP::Attribute->new('associated_metaclass' => (
621 init_arg => "metaclass", # FIXME alias and rename
622 reader => {
623 'associated_metaclass' => \&Class::MOP::Method::Constructor::associated_metaclass
624 },
625 ))
626);
627
628## --------------------------------------------------------
629## Class::MOP::Instance
630
631# NOTE:
632# these don't yet do much of anything, but are just
633# included for completeness
634
635157µs33.65msClass::MOP::Instance->meta->add_attribute(
# spent 1.96ms making 1 call to Class::MOP::Object::meta # spent 1.51ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 179µs making 1 call to Class::MOP::Attribute::new
636 Class::MOP::Attribute->new('associated_metaclass',
637 reader => { associated_metaclass => \&Class::MOP::Instance::associated_metaclass },
638 ),
639);
640
641144µs31.73msClass::MOP::Instance->meta->add_attribute(
# spent 1.53ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 109µs making 1 call to Class::MOP::Attribute::new # spent 86µs making 1 call to Class::MOP::Object::meta
642 Class::MOP::Attribute->new('_class_name',
643 init_arg => undef,
644 reader => { _class_name => \&Class::MOP::Instance::_class_name },
645 #lazy => 1, # not yet supported by Class::MOP but out our version does it anyway
646 #default => sub { $_[0]->associated_metaclass->name },
647 ),
648);
649
650145µs31.67msClass::MOP::Instance->meta->add_attribute(
# spent 1.47ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 109µs making 1 call to Class::MOP::Attribute::new # spent 83µs making 1 call to Class::MOP::Object::meta
651 Class::MOP::Attribute->new('attributes',
652 reader => { attributes => \&Class::MOP::Instance::get_all_attributes },
653 ),
654);
655
656163µs31.75msClass::MOP::Instance->meta->add_attribute(
# spent 1.55ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 111µs making 1 call to Class::MOP::Attribute::new # spent 86µs making 1 call to Class::MOP::Object::meta
657 Class::MOP::Attribute->new('slots',
658 reader => { slots => \&Class::MOP::Instance::slots },
659 ),
660);
661
662172µs31.73msClass::MOP::Instance->meta->add_attribute(
# spent 1.52ms making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 119µs making 1 call to Class::MOP::Attribute::new # spent 88µs making 1 call to Class::MOP::Object::meta
663 Class::MOP::Attribute->new('slot_hash',
664 reader => { slot_hash => \&Class::MOP::Instance::slot_hash },
665 ),
666);
667
668## --------------------------------------------------------
669## Class::MOP::Object
670
671# need to replace the meta method there with a real meta method object
672156µs26.90msClass::MOP::Object->meta->_add_meta_method('meta');
# spent 6.81ms making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 83µs making 1 call to Class::MOP::Object::meta
673
674## --------------------------------------------------------
675## Class::MOP::Mixin
676
677# need to replace the meta method there with a real meta method object
678149µs23.41msClass::MOP::Mixin->meta->_add_meta_method('meta');
# spent 3.33ms making 1 call to Class::MOP::Mixin::HasMethods::_add_meta_method # spent 83µs making 1 call to Class::MOP::Mixin::meta
679
6801364µsrequire Class::MOP::Deprecated unless our $no_deprecated;
681
682# we need the meta instance of the meta instance to be created now, in order
683# for the constructor to be able to use it
684137µs2890µsClass::MOP::Instance->meta->get_meta_instance;
# spent 783µs making 1 call to Class::MOP::Class::get_meta_instance # spent 107µs making 1 call to Class::MOP::Object::meta
685
686# pretend the add_method never happenned. it hasn't yet affected anything
687114µs175µsundef Class::MOP::Instance->meta->{_package_cache_flag};
# spent 75µs making 1 call to Class::MOP::Object::meta
688
689## --------------------------------------------------------
690## Now close all the Class::MOP::* classes
691
692# NOTE: we don't need to inline the the accessors this only lengthens
693# the compile time of the MOP, and gives us no actual benefits.
694
695$_->meta->make_immutable(
696 inline_constructor => 0,
697 constructor_name => "_new",
698 inline_accessors => 0,
6991400µs26108ms) for qw/
# spent 108ms making 13 calls to Class::MOP::Class::make_immutable, avg 8.27ms/call # spent 948µs making 13 calls to Class::MOP::Object::meta, avg 73µs/call
700 Class::MOP::Package
701 Class::MOP::Module
702 Class::MOP::Class
703
704 Class::MOP::Attribute
705 Class::MOP::Method
706 Class::MOP::Instance
707
708 Class::MOP::Object
709
710 Class::MOP::Method::Generated
711 Class::MOP::Method::Inlined
712
713 Class::MOP::Method::Accessor
714 Class::MOP::Method::Constructor
715 Class::MOP::Method::Wrapped
716
717 Class::MOP::Method::Meta
71812µs/;
719
720$_->meta->make_immutable(
721 inline_constructor => 0,
722 constructor_name => undef,
723 inline_accessors => 0,
7241131µs83.16ms) for qw/
# spent 2.85ms making 4 calls to Class::MOP::Class::make_immutable, avg 713µs/call # spent 302µs making 4 calls to Class::MOP::Mixin::meta, avg 76µs/call
725 Class::MOP::Mixin
726 Class::MOP::Mixin::AttributeCore
727 Class::MOP::Mixin::HasAttributes
728 Class::MOP::Mixin::HasMethods
72912µs/;
730
7311400µs1;
732
733__END__
 
# spent 15.6ms within Class::MOP::CORE:match which was called 790 times, avg 20µs/call: # 785 times (15.6ms+0s) by Class::MOP::_is_valid_class_name at line 152, avg 20µs/call # 5 times (40µs+0s) by Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:125] at line 120, avg 8µs/call
sub Class::MOP::CORE:match; # opcode
# spent 238µs within Class::MOP::CORE:regcomp which was called 5 times, avg 48µs/call: # 5 times (238µs+0s) by Class::MOP::__ANON__[/home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/Class/MOP.pm:125] at line 120, avg 48µs/call
sub Class::MOP::CORE:regcomp; # opcode
# spent 487µs within Class::MOP::CORE:subst which was called 37 times, avg 13µs/call: # 37 times (487µs+0s) by Class::MOP::_class_to_pmfile at line 76, avg 13µs/call
sub Class::MOP::CORE:subst; # opcode
# spent 1.58ms within Class::MOP::__ANON__ which was called 295 times, avg 5µs/call: # 295 times (1.58ms+0s) by Class::MOP::Class::class_precedence_list at line 905 of Class/MOP/Class.pm, avg 5µs/call
sub Class::MOP::__ANON__; # xsub
# spent 40.6ms within Class::MOP::get_code_info which was called 4938 times, avg 8µs/call: # 2900 times (26.2ms+0s) by Class::MOP::Mixin::HasMethods::add_method at line 84 of Class/MOP/Mixin/HasMethods.pm, avg 9µs/call # 1989 times (13.9ms+0s) by Class::MOP::Mixin::HasMethods::_code_is_mine at line 100 of Class/MOP/Mixin/HasMethods.pm, avg 7µs/call # 45 times (491µs+0s) by Moose::Meta::Role::Application::ToClass::apply_override_method_modifiers at line 206 of Moose/Meta/Role/Application/ToClass.pm, avg 11µs/call # 4 times (35µs+0s) by Moose::Exporter::_make_sub_exporter_params at line 243 of Moose/Exporter.pm, avg 9µs/call
sub Class::MOP::get_code_info; # xsub
# spent 15.6ms within Class::MOP::is_class_loaded which was called 817 times, avg 19µs/call: # 649 times (12.3ms+0s) by Class::MOP::load_first_existing_class at line 108, avg 19µs/call # 93 times (1.71ms+0s) by Class::MOP::Class::_immutable_metaclass at line 1237 of Class/MOP/Class.pm, avg 18µs/call # 65 times (1.55ms+0s) by Class::MOP::load_first_existing_class at line 100, avg 24µs/call # 8 times (73µs+0s) by Class::MOP::load_first_existing_class at line 101, avg 9µs/call # 2 times (37µs+0s) by Moose::Util::TypeConstraints::OptimizedConstraints::ClassName at line 55 of Moose/Util/TypeConstraints/OptimizedConstraints.pm, avg 18µs/call
sub Class::MOP::is_class_loaded; # xsub