← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Thu Dec 15 15:23:56 2022
Reported on Thu Dec 15 15:27:03 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm
StatementsExecuted 857 statements in 3.11ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
20111.64ms3.34msMooX::TypeTiny::Role::GenerateAccessor::::__ANON__[:63]MooX::TypeTiny::Role::GenerateAccessor::__ANON__[:63]
68111.28ms22.8msMooX::TypeTiny::Role::GenerateAccessor::::__ANON__[:33]MooX::TypeTiny::Role::GenerateAccessor::__ANON__[:33]
6811130µs130µsMooX::TypeTiny::Role::GenerateAccessor::::CORE:substMooX::TypeTiny::Role::GenerateAccessor::CORE:subst (opcode)
21621123µs123µsMooX::TypeTiny::Role::GenerateAccessor::::CORE:matchMooX::TypeTiny::Role::GenerateAccessor::CORE:match (opcode)
11133µs356µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@2MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2
1116µs37µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@3MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3
1114µs16µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@4MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4
0000s0sMooX::TypeTiny::Role::GenerateAccessor::::_is_simple_valueMooX::TypeTiny::Role::GenerateAccessor::_is_simple_value
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package MooX::TypeTiny::Role::GenerateAccessor;
2235µs2374µs
# spent 356µs (33+323) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2 which was called: # once (33µs+323µs) by Moo::_Utils::_require at line 2
use Moo::Role;
# spent 356µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2 # spent 18µs making 1 call to Moo::Role::import
3217µs268µs
# spent 37µs (6+31) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3 which was called: # once (6µs+31µs) by Moo::_Utils::_require at line 3
use Sub::Quote qw(quotify sanitize_identifier);
# spent 37µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3 # spent 31µs making 1 call to Exporter::import
42476µs228µs
# spent 16µs (4+12) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4 which was called: # once (4µs+12µs) by Moo::_Utils::_require at line 4
use Scalar::Util qw(blessed);
# spent 16µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4 # spent 12µs making 1 call to Exporter::import
5
6
# spent 22.8ms (1.28+21.5) within MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:33] which was called 68 times, avg 335µs/call: # 68 times (1.28ms+21.5ms) by Method::Generate::Accessor__WITH__MooX::TypeTiny::Role::GenerateAccessor::__ANON__[(eval 200)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Class/Method/Modifiers.pm:89]:1] at line 1 of (eval 200)[Class/Method/Modifiers.pm:89], avg 335µs/call
around _generate_isa_check => sub {
7 $Error::TypeTiny::CarpInternal{$_} = 1
868330µs13648µs for grep /\A(?:MooX?|Method::Generate)::/, keys %Carp::CarpInternal;
# spent 48µs making 136 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:match, avg 353ns/call
9
106811µs my $orig = shift;
11689µs my $self = shift;
126839µs my ($name, $value, $check, $init_arg) = @_;
1368251µs136384µs return $self->$orig(@_)
# spent 348µs making 68 calls to Type::Tiny::isa, avg 5µs/call # spent 36µs making 68 calls to Scalar::Util::blessed, avg 529ns/call
14 unless blessed $check && $check->isa('Type::Tiny');
15
166860µs68391µs my $var = '$isa_check_for_'.sanitize_identifier($name);
# spent 391µs making 68 calls to Sub::Quote::sanitize_identifier, avg 6µs/call
176856µs $self->{captures}->{$var} = \$check;
18
1968103µs68231µs my $varname = defined $init_arg
# spent 231µs making 68 calls to Sub::Quote::quotify, avg 3µs/call
20 ? sprintf('$args->{%s}', quotify($init_arg))
21 : sprintf('$self->{%s}', quotify($name));
22
236897µs6820.3ms my $assertion = $check->inline_assert(
# spent 20.3ms making 68 calls to Type::Tiny::inline_assert, avg 299µs/call
24 $value,
25 $var,
26 mgaca => 0,
27 attribute_name => $name,
28 attribute_step => 'isa check',
29 varname => $varname,
30 );
3168206µs68130µs $assertion =~ s/;\z//;
# spent 130µs making 68 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:subst, avg 2µs/call
3268186µs return $assertion;
3314µs114µs};
# spent 14µs making 1 call to Moo::Role::around
34
35
# spent 3.34ms (1.64+1.70) within MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:63] which was called 20 times, avg 167µs/call: # 20 times (1.64ms+1.70ms) by Method::Generate::Accessor__WITH__MooX::TypeTiny::Role::GenerateAccessor::__ANON__[(eval 204)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Class/Method/Modifiers.pm:89]:1] at line 1 of (eval 200)[Class/Method/Modifiers.pm:89], avg 167µs/call
around _generate_coerce => sub {
36 $Error::TypeTiny::CarpInternal{$_} = 1
37201.09ms8075µs for grep /\A(?:MooX?|Method::Generate)::/, keys %Carp::Internal;
# spent 75µs making 80 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:match, avg 937ns/call
38
392012µs my $orig = shift;
40202µs my $self = shift;
412023µs my ($name, $value, $coerce, $init_arg) = @_;
4220103µs401.63ms return $self->$orig(@_)
# spent 1.61ms making 20 calls to Method::Generate::Accessor::_generate_coerce, avg 80µs/call # spent 15µs making 20 calls to Scalar::Util::blessed, avg 750ns/call
43 unless blessed $coerce && $coerce->isa('Type::Coercion');
44
45 my $var = '$coercion_for_'.sanitize_identifier($name);
46 $self->{captures}->{$var} = \$coerce;
47
48 my $need_temp = !$self->_is_simple_value($value);
49 my $inline_value = $value;
50 if ($need_temp) {
51 $inline_value = $value;
52 $value = '$tmp';
53 }
54
55 my $code = $coerce->can_be_inlined ? $coerce->inline_coercion($value) : "${var}->coerce(${value})";
56
57 if ($need_temp) {
58 return "do { my \$tmp = $inline_value; $code }";
59 }
60 else {
61 return $code;
62 }
6312µs13µs};
# spent 3µs making 1 call to Moo::Role::around
64
65# this doesn't need to be perfect. false negatives are fine.
66sub _is_simple_value {
67 my ($self, $value) = @_;
68 return $value =~ /\A(?:
69 \$\w+(?:(?:->)?(?:\[[0-9]+\]|\{\w+\}))?
70 |
71 [-0-9_.ex]+
72 |
73 "[^\$\@"]*"
74 |
75 '[^']*'
76 |
77 undef\(\)
78 |
79 \(!1\)
80 )\z/x;
81}
82
8313µs1;
 
# spent 123µs within MooX::TypeTiny::Role::GenerateAccessor::CORE:match which was called 216 times, avg 569ns/call: # 136 times (48µs+0s) by MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:33] at line 8, avg 353ns/call # 80 times (75µs+0s) by MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:63] at line 37, avg 937ns/call
sub MooX::TypeTiny::Role::GenerateAccessor::CORE:match; # opcode
# spent 130µs within MooX::TypeTiny::Role::GenerateAccessor::CORE:subst which was called 68 times, avg 2µs/call: # 68 times (130µs+0s) by MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:33] at line 31, avg 2µs/call
sub MooX::TypeTiny::Role::GenerateAccessor::CORE:subst; # opcode