← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 16:10:05 2022
Reported on Wed Dec 14 16:12:58 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm
StatementsExecuted 857 statements in 3.34ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
68111.79ms30.6msMooX::TypeTiny::Role::GenerateAccessor::::__ANON__[:33]MooX::TypeTiny::Role::GenerateAccessor::__ANON__[:33]
2011318µs1.79msMooX::TypeTiny::Role::GenerateAccessor::::__ANON__[:63]MooX::TypeTiny::Role::GenerateAccessor::__ANON__[:63]
6811168µs168µsMooX::TypeTiny::Role::GenerateAccessor::::CORE:substMooX::TypeTiny::Role::GenerateAccessor::CORE:subst (opcode)
21621119µs119µsMooX::TypeTiny::Role::GenerateAccessor::::CORE:matchMooX::TypeTiny::Role::GenerateAccessor::CORE:match (opcode)
11141µs592µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@2MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2
11111µs82µsMooX::TypeTiny::Role::GenerateAccessor::::BEGIN@3MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3
11111µs33µ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;
2250µs2623µs
# spent 592µs (41+551) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2 which was called: # once (41µs+551µs) by Moo::_Utils::_require at line 2
use Moo::Role;
# spent 592µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@2 # spent 31µs making 1 call to Moo::Role::import
3245µs2153µs
# spent 82µs (11+71) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3 which was called: # once (11µs+71µs) by Moo::_Utils::_require at line 3
use Sub::Quote qw(quotify sanitize_identifier);
# spent 82µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@3 # spent 71µs making 1 call to Exporter::import
42755µs255µs
# spent 33µs (11+22) within MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4 which was called: # once (11µs+22µs) by Moo::_Utils::_require at line 4
use Scalar::Util qw(blessed);
# spent 33µs making 1 call to MooX::TypeTiny::Role::GenerateAccessor::BEGIN@4 # spent 22µs making 1 call to Exporter::import
5
6
# spent 30.6ms (1.79+28.9) 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 451µs/call: # 68 times (1.79ms+28.9ms) 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 451µs/call
around _generate_isa_check => sub {
7 $Error::TypeTiny::CarpInternal{$_} = 1
868432µs13644µs for grep /\A(?:MooX?|Method::Generate)::/, keys %Carp::CarpInternal;
# spent 44µs making 136 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:match, avg 324ns/call
9
106825µs my $orig = shift;
11689µs my $self = shift;
126872µs my ($name, $value, $check, $init_arg) = @_;
1368330µs136496µs return $self->$orig(@_)
# spent 429µs making 68 calls to Type::Tiny::isa, avg 6µs/call # spent 67µs making 68 calls to Scalar::Util::blessed, avg 985ns/call
14 unless blessed $check && $check->isa('Type::Tiny');
15
1668119µs68566µs my $var = '$isa_check_for_'.sanitize_identifier($name);
# spent 566µs making 68 calls to Sub::Quote::sanitize_identifier, avg 8µs/call
176877µs $self->{captures}->{$var} = \$check;
18
1968229µs68415µs my $varname = defined $init_arg
# spent 415µs making 68 calls to Sub::Quote::quotify, avg 6µs/call
20 ? sprintf('$args->{%s}', quotify($init_arg))
21 : sprintf('$self->{%s}', quotify($name));
22
2368202µs6827.2ms my $assertion = $check->inline_assert(
# spent 27.2ms making 68 calls to Type::Tiny::inline_assert, avg 399µs/call
24 $value,
25 $var,
26 mgaca => 0,
27 attribute_name => $name,
28 attribute_step => 'isa check',
29 varname => $varname,
30 );
3168293µs68168µs $assertion =~ s/;\z//;
# spent 168µs making 68 calls to MooX::TypeTiny::Role::GenerateAccessor::CORE:subst, avg 2µs/call
3268243µs return $assertion;
3317µs119µs};
# spent 19µs making 1 call to Moo::Role::around
34
35
# spent 1.79ms (318µ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 20 times, avg 90µs/call: # 20 times (318µ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 90µs/call
around _generate_coerce => sub {
36 $Error::TypeTiny::CarpInternal{$_} = 1
3720261µs8075µ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
39203µs my $orig = shift;
40204µs my $self = shift;
412017µs my ($name, $value, $coerce, $init_arg) = @_;
4220156µs401.40ms return $self->$orig(@_)
# spent 1.38ms making 20 calls to Method::Generate::Accessor::_generate_coerce, avg 69µs/call # spent 19µs making 20 calls to Scalar::Util::blessed, avg 950ns/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 }
6313µs15µs};
# spent 5µ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
8315µs1;
 
# spent 119µs within MooX::TypeTiny::Role::GenerateAccessor::CORE:match which was called 216 times, avg 551ns/call: # 136 times (44µ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 324ns/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 168µs within MooX::TypeTiny::Role::GenerateAccessor::CORE:subst which was called 68 times, avg 2µs/call: # 68 times (168µ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