← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:34 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm
StatementsExecuted 897 statements in 3.25ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
73111.98ms33.6msMooX::TypeTiny::Role::GenerateAccessor::::__ANON__[:33]MooX::TypeTiny::Role::GenerateAccessor::__ANON__[:33]
1711330µs1.81msMooX::TypeTiny::Role::GenerateAccessor::::__ANON__[:63]MooX::TypeTiny::Role::GenerateAccessor::__ANON__[:63]
7311225µs225µsMooX::TypeTiny::Role::GenerateAccessor::::CORE:substMooX::TypeTiny::Role::GenerateAccessor::CORE:subst (opcode)
21421134µs134µsMooX::TypeTiny::Role::GenerateAccessor::::CORE:matchMooX::TypeTiny::Role::GenerateAccessor::CORE:match (opcode)
11156µs613µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@2MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2
11111µs51µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@3MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3
1117µs26µ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;
2259µs2653µs
# spent 613µs (56+557) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2 which was called: # once (56µs+557µs) by Moo::_Utils::_require at line 2
use Moo::Role;
# spent 613µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2 # spent 40µs making 1 call to Moo::Role::import
3235µs291µs
# spent 51µs (11+40) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3 which was called: # once (11µs+40µs) by Moo::_Utils::_require at line 3
use Sub::Quote qw(quotify sanitize_identifier);
# spent 51µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3 # spent 40µs making 1 call to Exporter::import
42552µs245µs
# spent 26µs (7+19) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4 which was called: # once (7µs+19µs) by Moo::_Utils::_require at line 4
use Scalar::Util qw(blessed);
# spent 26µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4 # spent 19µs making 1 call to Exporter::import
5
6
# spent 33.6ms (1.98+31.6) within MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:33] which was called 73 times, avg 461µs/call: # 73 times (1.98ms+31.6ms) 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 461µs/call
around _generate_isa_check => sub {
7 $Error::TypeTiny::CarpInternal{$_} = 1
873517µs14658µs for grep /\A(?:MooX?|Method::Generate)::/, keys %Carp::CarpInternal;
# spent 58µs making 146 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:match, avg 397ns/call
9
107320µs my $orig = shift;
117317µs my $self = shift;
127348µs my ($name, $value, $check, $init_arg) = @_;
1373362µs146478µs return $self->$orig(@_)
# spent 402µs making 73 calls to Type::Tiny::isa, avg 6µs/call # spent 76µs making 73 calls to Scalar::Util::blessed, avg 1µs/call
14 unless blessed $check && $check->isa('Type::Tiny');
15
1673119µs73763µs my $var = '$isa_check_for_'.sanitize_identifier($name);
# spent 763µs making 73 calls to Sub::Quote::sanitize_identifier, avg 10µs/call
177388µs $self->{captures}->{$var} = \$check;
18
1973158µs73500µs my $varname = defined $init_arg
# spent 500µs making 73 calls to Sub::Quote::quotify, avg 7µs/call
20 ? sprintf('$args->{%s}', quotify($init_arg))
21 : sprintf('$self->{%s}', quotify($name));
22
2373184µs7329.6ms my $assertion = $check->inline_assert(
# spent 29.6ms making 73 calls to Type::Tiny::inline_assert, avg 406µs/call
24 $value,
25 $var,
26 mgaca => 0,
27 attribute_name => $name,
28 attribute_step => 'isa check',
29 varname => $varname,
30 );
3173381µs73225µs $assertion =~ s/;\z//;
# spent 225µs making 73 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:subst, avg 3µs/call
3273261µs return $assertion;
3314µs113µs};
# spent 13µs making 1 call to Moo::Role::around
34
35
# spent 1.81ms (330µs+1.48) within MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:63] which was called 17 times, avg 106µs/call: # 17 times (330µs+1.48ms) 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 106µs/call
around _generate_coerce => sub {
36 $Error::TypeTiny::CarpInternal{$_} = 1
3717278µs6876µs for grep /\A(?:MooX?|Method::Generate)::/, keys %Carp::Internal;
# spent 76µs making 68 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:match, avg 1µs/call
38
39177µs my $orig = shift;
40174µs my $self = shift;
411714µs my ($name, $value, $coerce, $init_arg) = @_;
4217138µs341.40ms return $self->$orig(@_)
# spent 1.39ms making 17 calls to Method::Generate::Accessor::_generate_coerce, avg 82µs/call # spent 14µs making 17 calls to Scalar::Util::blessed, avg 824ns/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 }
6311µs12µs};
# spent 2µ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 134µs within MooX::TypeTiny::Role::GenerateAccessor::CORE:match which was called 214 times, avg 626ns/call: # 146 times (58µ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 397ns/call # 68 times (76µ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 1µs/call
sub MooX::TypeTiny::Role::GenerateAccessor::CORE:match; # opcode
# spent 225µs within MooX::TypeTiny::Role::GenerateAccessor::CORE:subst which was called 73 times, avg 3µs/call: # 73 times (225µ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 3µs/call
sub MooX::TypeTiny::Role::GenerateAccessor::CORE:subst; # opcode