Filename | /usr/local/lib/perl/5.18.2/Moose/Meta/Attribute/Native/Trait.pm |
Statements | Executed 2314 statements in 6.45ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
32 | 1 | 1 | 4.60ms | 21.1ms | _check_helper_type | Moose::Meta::Attribute::Native::Trait::
100 | 2 | 1 | 1.82ms | 202ms | _native_accessor_class_for | Moose::Meta::Attribute::Native::Trait::
32 | 1 | 1 | 679µs | 198ms | _check_handles_values | Moose::Meta::Attribute::Native::Trait::
32 | 1 | 1 | 450µs | 2.01ms | _build_native_type | Moose::Meta::Attribute::Native::Trait::
50 | 1 | 1 | 212µs | 294µs | _root_types | Moose::Meta::Attribute::Native::Trait::
100 | 1 | 1 | 207µs | 207µs | _canonicalize_handles_value | Moose::Meta::Attribute::Native::Trait::
32 | 1 | 1 | 134µs | 134µs | CORE:match (opcode) | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 10µs | 2.02ms | BEGIN@4 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 8µs | 82µs | BEGIN@161 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 22µs | BEGIN@5 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 12µs | BEGIN@6 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 1.17ms | BEGIN@8 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 7µs | 102µs | BEGIN@7 | Moose::Meta::Attribute::Native::Trait::
1 | 1 | 1 | 6µs | 70µs | BEGIN@162 | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:121] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:16] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:52] | Moose::Meta::Attribute::Native::Trait::
0 | 0 | 0 | 0s | 0s | __ANON__[:86] | Moose::Meta::Attribute::Native::Trait::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Moose::Meta::Attribute::Native::Trait; | ||||
2 | 1 | 9µs | our $VERSION = '2.1604'; | ||
3 | |||||
4 | 2 | 39µs | 2 | 4.02ms | # spent 2.02ms (10µs+2.01) within Moose::Meta::Attribute::Native::Trait::BEGIN@4 which was called:
# once (10µs+2.01ms) by Module::Runtime::require_module at line 4 # spent 2.02ms making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@4
# spent 2.01ms making 1 call to Moose::Role::import |
5 | 2 | 22µs | 2 | 37µs | # spent 22µs (7+15) within Moose::Meta::Attribute::Native::Trait::BEGIN@5 which was called:
# once (7µs+15µs) by Module::Runtime::require_module at line 5 # spent 22µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@5
# spent 15µs making 1 call to Module::Runtime::import |
6 | 2 | 20µs | 2 | 17µs | # spent 12µs (7+5) within Moose::Meta::Attribute::Native::Trait::BEGIN@6 which was called:
# once (7µs+5µs) by Module::Runtime::require_module at line 6 # spent 12µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@6
# spent 5µs making 1 call to Package::DeprecationManager::__ANON__[Package/DeprecationManager.pm:61] |
7 | 2 | 26µs | 2 | 197µs | # spent 102µs (7+95) within Moose::Meta::Attribute::Native::Trait::BEGIN@7 which was called:
# once (7µs+95µs) by Module::Runtime::require_module at line 7 # spent 102µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@7
# spent 95µs making 1 call to Sub::Exporter::__ANON__[Sub/Exporter.pm:337] |
8 | 2 | 664µs | 2 | 2.34ms | # spent 1.17ms (7µs+1.17) within Moose::Meta::Attribute::Native::Trait::BEGIN@8 which was called:
# once (7µs+1.17ms) by Module::Runtime::require_module at line 8 # spent 1.17ms making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@8
# spent 1.17ms making 1 call to Moose::Util::TypeConstraints::import |
9 | |||||
10 | 1 | 1µs | 1 | 66µs | requires '_helper_type'; # spent 66µs making 1 call to Moose::Role::requires |
11 | |||||
12 | before '_process_options' => sub { | ||||
13 | 32 | 20µs | my ( $self, $name, $options ) = @_; | ||
14 | |||||
15 | 32 | 124µs | 32 | 21.1ms | $self->_check_helper_type( $options, $name ); # spent 21.1ms making 32 calls to Moose::Meta::Attribute::Native::Trait::_check_helper_type, avg 659µs/call |
16 | 1 | 3µs | 1 | 51µs | }; # spent 51µs making 1 call to Moose::Role::before |
17 | |||||
18 | # spent 21.1ms (4.60+16.5) within Moose::Meta::Attribute::Native::Trait::_check_helper_type which was called 32 times, avg 659µs/call:
# 32 times (4.60ms+16.5ms) by Class::MOP::Class:::before at line 15, avg 659µs/call | ||||
19 | 32 | 15µs | my ( $self, $options, $name ) = @_; | ||
20 | |||||
21 | 32 | 74µs | 32 | 51µs | my $type = $self->_helper_type; # spent 33µs making 21 calls to Moose::Meta::Attribute::Native::Trait::Hash::_helper_type, avg 2µs/call
# spent 18µs making 11 calls to Moose::Meta::Attribute::Native::Trait::Array::_helper_type, avg 2µs/call |
22 | |||||
23 | 32 | 21µs | $options->{isa} = $type | ||
24 | unless exists $options->{isa}; | ||||
25 | |||||
26 | 32 | 6µs | my $isa; | ||
27 | 32 | 5µs | my $isa_name; | ||
28 | |||||
29 | 32 | 93µs | 32 | 18µs | if ( blessed( $options->{isa} ) # spent 18µs making 32 calls to Scalar::Util::blessed, avg 559ns/call |
30 | && $options->{isa}->can('does') | ||||
31 | && $options->{isa}->does('Specio::Constraint::Role::Interface') ) { | ||||
32 | |||||
33 | $isa = $options->{isa}; | ||||
34 | require Specio::Library::Builtins; | ||||
35 | return if $isa->is_a_type_of( Specio::Library::Builtins::t($type) ); | ||||
36 | $isa_name = $isa->name() || $isa->description(); | ||||
37 | } | ||||
38 | else { | ||||
39 | 32 | 76µs | 32 | 10.8ms | $isa = Moose::Util::TypeConstraints::find_or_create_type_constraint( # spent 10.8ms making 32 calls to Moose::Util::TypeConstraints::find_or_create_type_constraint, avg 338µs/call |
40 | $options->{isa} ); | ||||
41 | 32 | 119µs | 32 | 5.60ms | return if $isa->is_a_type_of($type); # spent 5.60ms making 32 calls to Moose::Meta::TypeConstraint::is_a_type_of, avg 175µs/call |
42 | $isa_name = $isa->name(); | ||||
43 | } | ||||
44 | |||||
45 | throw_exception( WrongTypeConstraintGiven => required_type => $type, | ||||
46 | given_type => $isa_name, | ||||
47 | attribute_name => $name, | ||||
48 | params => $options | ||||
49 | ); | ||||
50 | } | ||||
51 | |||||
52 | 33 | 114µs | 33 | 198ms | before 'install_accessors' => sub { (shift)->_check_handles_values }; # spent 198ms making 32 calls to Moose::Meta::Attribute::Native::Trait::_check_handles_values, avg 6.17ms/call
# spent 28µs making 1 call to Moose::Role::before |
53 | |||||
54 | # spent 198ms (679µs+197) within Moose::Meta::Attribute::Native::Trait::_check_handles_values which was called 32 times, avg 6.17ms/call:
# 32 times (679µs+197ms) by Class::MOP::Class:::before at line 52, avg 6.17ms/call | ||||
55 | 32 | 8µs | my $self = shift; | ||
56 | |||||
57 | 32 | 87µs | 32 | 874µs | my %handles = $self->_canonicalize_handles; # spent 567µs making 21 calls to Moose::Meta::Class::__ANON__::SERIAL::1::_canonicalize_handles, avg 27µs/call
# spent 307µs making 11 calls to Moose::Meta::Class::__ANON__::SERIAL::7::_canonicalize_handles, avg 28µs/call |
58 | |||||
59 | 32 | 114µs | for my $original_method ( values %handles ) { | ||
60 | 50 | 31µs | my $name = $original_method->[0]; | ||
61 | |||||
62 | 50 | 129µs | 50 | 196ms | my $accessor_class = $self->_native_accessor_class_for($name); # spent 196ms making 50 calls to Moose::Meta::Attribute::Native::Trait::_native_accessor_class_for, avg 3.92ms/call |
63 | |||||
64 | 50 | 356µs | 50 | 105µs | ( $accessor_class && $accessor_class->can('new') ) # spent 105µs making 50 calls to UNIVERSAL::can, avg 2µs/call |
65 | || confess | ||||
66 | "$name is an unsupported method type - $accessor_class"; | ||||
67 | } | ||||
68 | } | ||||
69 | |||||
70 | around '_canonicalize_handles' => sub { | ||||
71 | 64 | 12µs | shift; | ||
72 | 64 | 19µs | my $self = shift; | ||
73 | 64 | 115µs | 64 | 150µs | my $handles = $self->handles; # spent 150µs making 64 calls to Moose::Meta::Mixin::AttributeCore::handles, avg 2µs/call |
74 | |||||
75 | 64 | 15µs | return unless $handles; | ||
76 | |||||
77 | 64 | 43µs | unless ( 'HASH' eq ref $handles ) { | ||
78 | throw_exception( HandlesMustBeAHashRef => instance => $self, | ||||
79 | given_handles => $handles | ||||
80 | ); | ||||
81 | } | ||||
82 | |||||
83 | return | ||||
84 | 64 | 352µs | 100 | 207µs | map { $_ => $self->_canonicalize_handles_value( $handles->{$_} ) } # spent 207µs making 100 calls to Moose::Meta::Attribute::Native::Trait::_canonicalize_handles_value, avg 2µs/call |
85 | keys %$handles; | ||||
86 | 1 | 2µs | 1 | 38µs | }; # spent 38µs making 1 call to Moose::Role::around |
87 | |||||
88 | # spent 207µs within Moose::Meta::Attribute::Native::Trait::_canonicalize_handles_value which was called 100 times, avg 2µs/call:
# 100 times (207µs+0s) by Class::MOP::Class:::around at line 84, avg 2µs/call | ||||
89 | 100 | 26µs | my $self = shift; | ||
90 | 100 | 27µs | my $value = shift; | ||
91 | |||||
92 | 100 | 22µs | if ( ref $value && 'ARRAY' ne ref $value ) { | ||
93 | throw_exception( InvalidHandleValue => instance => $self, | ||||
94 | handle_value => $value | ||||
95 | ); | ||||
96 | } | ||||
97 | |||||
98 | 100 | 207µs | return ref $value ? $value : [$value]; | ||
99 | } | ||||
100 | |||||
101 | around '_make_delegation_method' => sub { | ||||
102 | 50 | 16µs | my $next = shift; | ||
103 | 50 | 22µs | my ( $self, $handle_name, $method_to_call ) = @_; | ||
104 | |||||
105 | 50 | 45µs | my ( $name, @curried_args ) = @$method_to_call; | ||
106 | |||||
107 | 50 | 122µs | 50 | 6.21ms | my $accessor_class = $self->_native_accessor_class_for($name); # spent 6.21ms making 50 calls to Moose::Meta::Attribute::Native::Trait::_native_accessor_class_for, avg 124µs/call |
108 | |||||
109 | 50 | 264µs | 50 | 120µs | die "Cannot find an accessor class for $name" # spent 120µs making 50 calls to UNIVERSAL::can, avg 2µs/call |
110 | unless $accessor_class && $accessor_class->can('new'); | ||||
111 | |||||
112 | 50 | 558µs | 200 | 61.4ms | return $accessor_class->new( # spent 23.8ms making 21 calls to Moose::Meta::Class::__ANON__::SERIAL::2::new, avg 1.14ms/call
# spent 9.57ms making 11 calls to Moose::Meta::Class::__ANON__::SERIAL::8::new, avg 870µs/call
# spent 7.27ms making 4 calls to Moose::Meta::Class::__ANON__::SERIAL::10::new, avg 1.82ms/call
# spent 5.60ms making 3 calls to Moose::Meta::Class::__ANON__::SERIAL::6::new, avg 1.87ms/call
# spent 3.93ms making 3 calls to Moose::Meta::Class::__ANON__::SERIAL::3::new, avg 1.31ms/call
# spent 3.74ms making 2 calls to Moose::Meta::Class::__ANON__::SERIAL::9::new, avg 1.87ms/call
# spent 3.63ms making 3 calls to Moose::Meta::Class::__ANON__::SERIAL::4::new, avg 1.21ms/call
# spent 3.49ms making 3 calls to Moose::Meta::Class::__ANON__::SERIAL::5::new, avg 1.16ms/call
# spent 294µs making 50 calls to Moose::Meta::Attribute::Native::Trait::_root_types, avg 6µs/call
# spent 29µs making 50 calls to Class::MOP::Attribute::associated_class, avg 578ns/call
# spent 19µs making 50 calls to Class::MOP::Package::name, avg 384ns/call |
113 | name => $handle_name, | ||||
114 | package_name => $self->associated_class->name, | ||||
115 | delegate_to_method => $name, | ||||
116 | attribute => $self, | ||||
117 | is_inline => 1, | ||||
118 | curried_arguments => \@curried_args, | ||||
119 | root_types => [ $self->_root_types ], | ||||
120 | ); | ||||
121 | 1 | 2µs | 1 | 27µs | }; # spent 27µs making 1 call to Moose::Role::around |
122 | |||||
123 | # spent 294µs (212+82) within Moose::Meta::Attribute::Native::Trait::_root_types which was called 50 times, avg 6µs/call:
# 50 times (212µs+82µs) by Class::MOP::Class:::around at line 112, avg 6µs/call | ||||
124 | 50 | 194µs | 50 | 82µs | return $_[0]->_helper_type; # spent 51µs making 33 calls to Moose::Meta::Attribute::Native::Trait::Hash::_helper_type, avg 2µs/call
# spent 31µs making 17 calls to Moose::Meta::Attribute::Native::Trait::Array::_helper_type, avg 2µs/call |
125 | } | ||||
126 | |||||
127 | # spent 202ms (1.82+200) within Moose::Meta::Attribute::Native::Trait::_native_accessor_class_for which was called 100 times, avg 2.02ms/call:
# 50 times (912µs+195ms) by Moose::Meta::Attribute::Native::Trait::_check_handles_values at line 62, avg 3.92ms/call
# 50 times (907µs+5.30ms) by Class::MOP::Class:::around at line 107, avg 124µs/call | ||||
128 | 100 | 38µs | my ( $self, $suffix ) = @_; | ||
129 | |||||
130 | 100 | 223µs | 100 | 2.61ms | my $role # spent 1.69ms making 66 calls to Moose::Meta::Class::__ANON__::SERIAL::1::_native_type, avg 26µs/call
# spent 916µs making 34 calls to Moose::Meta::Class::__ANON__::SERIAL::7::_native_type, avg 27µs/call |
131 | = 'Moose::Meta::Method::Accessor::Native::' | ||||
132 | . $self->_native_type . '::' | ||||
133 | . $suffix; | ||||
134 | |||||
135 | 100 | 147µs | 100 | 1.00ms | require_module($role); # spent 122ms making 100 calls to Module::Runtime::require_module, avg 1.22ms/call, recursion: max depth 2, sum of overlapping time 121ms |
136 | 100 | 1.16ms | 400 | 75.8ms | return Moose::Meta::Class->create_anon_class( # spent 75.5ms making 100 calls to Class::MOP::Class::create_anon_class, avg 755µs/call
# spent 137µs making 100 calls to Moose::Meta::Attribute::accessor_metaclass, avg 1µs/call
# spent 117µs making 100 calls to Moose::Meta::Attribute::delegation_metaclass, avg 1µs/call
# spent 99µs making 100 calls to Class::MOP::Package::name, avg 994ns/call |
137 | superclasses => | ||||
138 | [ $self->accessor_metaclass, $self->delegation_metaclass ], | ||||
139 | roles => [$role], | ||||
140 | cache => 1, | ||||
141 | )->name; | ||||
142 | } | ||||
143 | |||||
144 | # spent 2.01ms (450µs+1.56) within Moose::Meta::Attribute::Native::Trait::_build_native_type which was called 32 times, avg 63µs/call:
# 32 times (450µs+1.56ms) by Moose::Meta::Class::__ANON__::SERIAL::1::_native_type or Moose::Meta::Class::__ANON__::SERIAL::7::_native_type at line 12 of (eval 45)[Eval/Closure.pm:144], avg 63µs/call | ||||
145 | 32 | 11µs | my $self = shift; | ||
146 | |||||
147 | 96 | 243µs | 128 | 1.43ms | for my $role_name ( map { $_->name } $self->meta->calculate_all_roles ) { # spent 1.14ms making 32 calls to Moose::Meta::Class::calculate_all_roles, avg 36µs/call
# spent 178µs making 21 calls to Moose::Meta::Class::__ANON__::SERIAL::1::meta, avg 8µs/call
# spent 90µs making 11 calls to Moose::Meta::Class::__ANON__::SERIAL::7::meta, avg 8µs/call
# spent 20µs making 64 calls to Class::MOP::Package::name, avg 306ns/call |
148 | 32 | 325µs | 32 | 134µs | return $1 if $role_name =~ /::Native::Trait::(\w+)$/; # spent 134µs making 32 calls to Moose::Meta::Attribute::Native::Trait::CORE:match, avg 4µs/call |
149 | } | ||||
150 | |||||
151 | throw_exception( CannotCalculateNativeType => instance => $self ); | ||||
152 | } | ||||
153 | |||||
154 | 1 | 1µs | 1 | 113µs | has '_native_type' => ( # spent 113µs making 1 call to Moose::Role::has |
155 | is => 'ro', | ||||
156 | isa => 'Str', | ||||
157 | lazy => 1, | ||||
158 | builder => '_build_native_type', | ||||
159 | ); | ||||
160 | |||||
161 | 2 | 23µs | 2 | 155µs | # spent 82µs (8+74) within Moose::Meta::Attribute::Native::Trait::BEGIN@161 which was called:
# once (8µs+74µs) by Module::Runtime::require_module at line 161 # spent 82µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@161
# spent 74µs making 1 call to Moose::Role::unimport |
162 | 2 | 28µs | 2 | 134µs | # spent 70µs (6+64) within Moose::Meta::Attribute::Native::Trait::BEGIN@162 which was called:
# once (6µs+64µs) by Module::Runtime::require_module at line 162 # spent 70µs making 1 call to Moose::Meta::Attribute::Native::Trait::BEGIN@162
# spent 64µs making 1 call to Moose::Util::TypeConstraints::unimport |
163 | |||||
164 | 1 | 11µs | 1; | ||
165 | |||||
166 | # ABSTRACT: Shared role for native delegation traits | ||||
167 | |||||
168 | __END__ | ||||
# spent 134µs within Moose::Meta::Attribute::Native::Trait::CORE:match which was called 32 times, avg 4µs/call:
# 32 times (134µs+0s) by Moose::Meta::Attribute::Native::Trait::_build_native_type at line 148, avg 4µs/call |