← 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:01 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Moo.pm
StatementsExecuted 2129 statements in 7.71ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
116433.79ms9.83msMoo::::_accessor_maker_forMoo::_accessor_maker_for
99432.99ms8.42msMoo::::_constructor_maker_forMoo::_constructor_maker_for (recurses: max depth 1, inclusive time 581µs)
1111.83ms29.7msMoo::::BEGIN@6Moo::BEGIN@6
17111.50ms1.65msMoo::::make_classMoo::make_class
4566849µs66.4msMoo::::hasMoo::has
171717355µs4.86msMoo::::importMoo::import
1711354µs2.31msMoo::::_install_subsMoo::_install_subs
1711240µs240µsMoo::::_gen_subsMoo::_gen_subs
999110µs7.06msMoo::::withMoo::with
6031101µs101µsMoo::::_maybe_reset_handlemooseMoo::_maybe_reset_handlemoose
211100µs2.45msMoo::::_set_superclassesMoo::_set_superclasses
171149µs49µsMoo::::CORE:sortMoo::CORE:sort (opcode)
2921143µs43µsMoo::::CORE:matchMoo::CORE:match (opcode)
66421µs1.11msMoo::::aroundMoo::around
71121µs21µsMoo::::is_classMoo::is_class
11120µs22µsMoo::::BEGIN@2Moo::BEGIN@2
22219µs2.47msMoo::::extendsMoo::extends
11110µs14µsMoo::::BEGIN@230Moo::BEGIN@230
1116µs10µsMoo::::BEGIN@70Moo::BEGIN@70
2216µs266µsMoo::::beforeMoo::before
1115µs8µsMoo::::BEGIN@180Moo::BEGIN@180
1115µs8µsMoo::::BEGIN@275Moo::BEGIN@275
1115µs24µsMoo::::BEGIN@3Moo::BEGIN@3
1115µs8µsMoo::::__ANON__[:256]Moo::__ANON__[:256]
1114µs18µsMoo::::BEGIN@18Moo::BEGIN@18
1114µs19µsMoo::::BEGIN@4Moo::BEGIN@4
1113µs3µsMoo::::BEGIN@19Moo::BEGIN@19
0000s0sMoo::::__ANON__[:101]Moo::__ANON__[:101]
0000s0sMoo::::__ANON__[:106]Moo::__ANON__[:106]
0000s0sMoo::::__ANON__[:126]Moo::__ANON__[:126]
0000s0sMoo::::__ANON__[:133]Moo::__ANON__[:133]
0000s0sMoo::::__ANON__[:248]Moo::__ANON__[:248]
0000s0sMoo::::_concrete_methods_ofMoo::_concrete_methods_of
0000s0sMoo::::afterMoo::after
0000s0sMoo::::unimportMoo::unimport
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Moo;
2222µs224µs
# spent 22µs (20+2) within Moo::BEGIN@2 which was called: # once (20µs+2µs) by OpenAPI::Modern::BEGIN@11 at line 2
use strict;
# spent 22µs making 1 call to Moo::BEGIN@2 # spent 2µs making 1 call to strict::import
3215µs243µs
# spent 24µs (5+19) within Moo::BEGIN@3 which was called: # once (5µs+19µs) by OpenAPI::Modern::BEGIN@11 at line 3
use warnings;
# spent 24µs making 1 call to Moo::BEGIN@3 # spent 19µs making 1 call to warnings::import
4225µs234µs
# spent 19µs (4+15) within Moo::BEGIN@4 which was called: # once (4µs+15µs) by OpenAPI::Modern::BEGIN@11 at line 4
no warnings 'once';
# spent 19µs making 1 call to Moo::BEGIN@4 # spent 15µs making 1 call to warnings::unimport
5
61468µs
# spent 29.7ms (1.83+27.9) within Moo::BEGIN@6 which was called: # once (1.83ms+27.9ms) by OpenAPI::Modern::BEGIN@11 at line 17
use Moo::_Utils qw(
7 _check_tracked
8 _getglob
9 _getstash
10 _install_coderef
11 _install_modifier
12 _install_tracked
13 _linear_isa
14 _load_module
15 _set_loaded
16 _unimport_coderefs
17123µs229.8ms);
# spent 29.7ms making 1 call to Moo::BEGIN@6 # spent 69µs making 1 call to Exporter::import
18226µs232µs
# spent 18µs (4+14) within Moo::BEGIN@18 which was called: # once (4µs+14µs) by OpenAPI::Modern::BEGIN@11 at line 18
use Carp qw(croak);
# spent 18µs making 1 call to Moo::BEGIN@18 # spent 14µs making 1 call to Exporter::import
19
# spent 3µs within Moo::BEGIN@19 which was called: # once (3µs+0s) by OpenAPI::Modern::BEGIN@11 at line 27
BEGIN {
2012µs our @CARP_NOT = qw(
21 Method::Generate::Constructor
22 Method::Generate::Accessor
23 Moo::sification
24 Moo::_Utils
25 Moo::Role
26 );
271170µs13µs}
# spent 3µs making 1 call to Moo::BEGIN@19
28
2910sour $VERSION = '2.005004';
3011µs$VERSION =~ tr/_//d;
31
321535µsrequire Moo::sification;
3312µs14µsMoo::sification->import;
# spent 4µs making 1 call to Moo::sification::import
34
35our %MAKERS;
36
37
# spent 4.86ms (355µs+4.51) within Moo::import which was called 17 times, avg 286µs/call: # once (19µs+1.04ms) by OpenAPI::Modern::BEGIN@11 at line 11 of OpenAPI/Modern.pm # once (33µs+372µs) by Method::Generate::Constructor::BEGIN@12 at line 15 of Method/Generate/Constructor.pm # once (25µs+358µs) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Validation.pm # once (23µs+312µs) by JSON::Schema::Modern::Vocabulary::Unevaluated::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (51µs+247µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Document/OpenAPI.pm # once (20µs+237µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/MetaData.pm # once (20µs+220µs) by JSON::Schema::Modern::Vocabulary::FormatAnnotation::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm # once (19µs+198µs) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Core.pm # once (23µs+180µs) by JSON::Schema::Modern::Document::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Document.pm # once (15µs+182µs) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (14µs+183µs) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Content.pm # once (19µs+177µs) by JSON::Schema::Modern::Error::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Error.pm # once (18µs+177µs) by JSON::Schema::Modern::Result::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Result.pm # once (15µs+167µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@10 at line 10 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (14µs+156µs) by JSON::Schema::Modern::BEGIN@11 at line 11 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (16µs+153µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Applicator.pm # once (11µs+153µs) by JSON::Schema::Modern::Annotation::BEGIN@10 at line 10 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Annotation.pm
sub import {
381713µs my $target = caller;
39179µs my $class = shift;
401746µs1539µs if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) {
# spent 39µs making 15 calls to Role::Tiny::is_role, avg 3µs/call
41 croak "Cannot import Moo into a role";
42 }
43
441783µs17143µs _set_loaded(caller);
# spent 143µs making 17 calls to Moo::_Utils::_set_loaded, avg 8µs/call
45
461759µs1728µs strict->import;
# spent 28µs making 17 calls to strict::import, avg 2µs/call
471717µs17338µs warnings->import;
# spent 338µs making 17 calls to warnings::import, avg 20µs/call
48
491737µs172.31ms $class->_install_subs($target, @_);
# spent 2.31ms making 17 calls to Moo::_install_subs, avg 136µs/call
501729µs171.65ms $class->make_class($target);
# spent 1.65ms making 17 calls to Moo::make_class, avg 97µs/call
511750µs return;
52}
53
54
# spent 1.65ms (1.50+153µs) within Moo::make_class which was called 17 times, avg 97µs/call: # 17 times (1.50ms+153µs) by Moo::import at line 50, avg 97µs/call
sub make_class {
55176µs my ($me, $target) = @_;
56
571722µs my $makers = $MAKERS{$target} ||= {};
58174µs return $target if $makers->{is_class};
59
601752µs1761µs my $stash = _getstash($target);
# spent 61µs making 17 calls to Moo::_Utils::_getstash, avg 4µs/call
61 $makers->{non_methods} = {
62 map +($_ => \&{"${target}::${_}"}),
6317498µs29243µs grep exists &{"${target}::${_}"},
# spent 43µs making 292 calls to Moo::CORE:match, avg 147ns/call
64 grep !/::\z/ && !/\A\(/,
65 keys %$stash
66 };
67
68174µs $makers->{is_class} = 1;
69 {
7019444µs214µs
# spent 10µs (6+4) within Moo::BEGIN@70 which was called: # once (6µs+4µs) by OpenAPI::Modern::BEGIN@11 at line 70
no strict 'refs';
# spent 10µs making 1 call to Moo::BEGIN@70 # spent 4µs making 1 call to strict::unimport
71 @{"${target}::ISA"} = do {
7234430µs require Moo::Object; ('Moo::Object');
7317186µs } unless @{"${target}::ISA"};
74 }
75176µs if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
76 Moo::HandleMoose::inject_fake_metaclass_for($target);
77 }
781736µs return $target;
79}
80
81
# spent 21µs within Moo::is_class which was called 7 times, avg 3µs/call: # 7 times (21µs+0s) by MooX::TypeTiny::import at line 14 of MooX/TypeTiny.pm, avg 3µs/call
sub is_class {
8276µs my ($me, $class) = @_;
83726µs return $MAKERS{$class} && $MAKERS{$class}{is_class};
84}
85
86
# spent 2.31ms (354µs+1.95) within Moo::_install_subs which was called 17 times, avg 136µs/call: # 17 times (354µs+1.95ms) by Moo::import at line 49, avg 136µs/call
sub _install_subs {
87179µs my ($me, $target) = @_;
881779µs17240µs my %install = $me->_gen_subs($target);
# spent 240µs making 17 calls to Moo::_gen_subs, avg 14µs/call
89 _install_tracked $target => $_ => $install{$_}
9017249µs1191.71ms for sort keys %install;
# spent 1.67ms making 102 calls to Moo::_Utils::_install_tracked, avg 16µs/call # spent 49µs making 17 calls to Moo::CORE:sort, avg 3µs/call
911742µs return;
92}
93
94
# spent 240µs within Moo::_gen_subs which was called 17 times, avg 14µs/call: # 17 times (240µs+0s) by Moo::_install_subs at line 88, avg 14µs/call
sub _gen_subs {
95179µs my ($me, $target) = @_;
96 return (
97
# spent 2.47ms (19µs+2.45) within Moo::extends which was called 2 times, avg 1.23ms/call: # once (13µs+2.05ms) by JSON::Schema::Modern::Document::extends at line 6 of (eval 262)[Class/Method/Modifiers.pm:148] # once (6µs+396µs) by JSON::Schema::Modern::Document::OpenAPI::extends at line 6 of (eval 386)[Class/Method/Modifiers.pm:148]
extends => sub {
9822µs22.45ms $me->_set_superclasses($target, @_);
# spent 2.45ms making 2 calls to Moo::_set_superclasses, avg 1.22ms/call
9922µs22µs $me->_maybe_reset_handlemoose($target);
# spent 2µs making 2 calls to Moo::_maybe_reset_handlemoose, avg 1µs/call
100212µs return;
101 },
102
# spent 7.06ms (110µs+6.95) within Moo::with which was called 9 times, avg 785µs/call: # once (12µs+3.66ms) by Module::Runtime::require_module at line 20 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Core.pm # once (14µs+572µs) by Module::Runtime::require_module at line 23 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Validation.pm # once (19µs+566µs) by Module::Runtime::require_module at line 24 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Applicator.pm # once (15µs+457µs) by Module::Runtime::require_module at line 20 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (13µs+424µs) by Module::Runtime::require_module at line 21 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (10µs+340µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@21 at line 21 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (10µs+319µs) by Module::Runtime::require_module at line 20 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/MetaData.pm # once (7µs+314µs) by Module::Runtime::require_module at line 22 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Content.pm # once (10µs+297µs) by Module::Runtime::require_module at line 21 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm
with => sub {
103913µs require Moo::Role;
104939µs96.93ms Moo::Role->apply_roles_to_package($target, @_);
# spent 6.93ms making 9 calls to Role::Tiny::apply_roles_to_package, avg 770µs/call
105947µs921µs $me->_maybe_reset_handlemoose($target);
# spent 21µs making 9 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
106 },
107
# spent 66.4ms (849µs+65.5) within Moo::has which was called 45 times, avg 1.47ms/call: # 16 times (273µs+30.7ms) by JSON::Schema::Modern::has at line 6 of (eval 33)[Class/Method/Modifiers.pm:148], avg 1.93ms/call # 8 times (121µs+15.7ms) by JSON::Schema::Modern::Document::has at line 6 of (eval 260)[Class/Method/Modifiers.pm:148], avg 1.97ms/call # 6 times (96µs+8.07ms) by MooX::HandlesVia::has at line 31 of MooX/HandlesVia.pm, avg 1.36ms/call # 6 times (139µs+5.20ms) by JSON::Schema::Modern::Result::has at line 6 of (eval 219)[Class/Method/Modifiers.pm:148], avg 889µs/call # 5 times (131µs+3.75ms) by JSON::Schema::Modern::Error::has at line 6 of (eval 192)[Class/Method/Modifiers.pm:148], avg 777µs/call # 4 times (89µs+2.17ms) by JSON::Schema::Modern::Annotation::has at line 6 of (eval 225)[Class/Method/Modifiers.pm:148], avg 564µs/call
has => sub {
1084517µs my $name_proto = shift;
1094538µs my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
1104532µs if (@_ % 2 != 0) {
111 croak "Invalid options for " . join(', ', map "'$_'", @name_proto)
112 . " attribute(s): even number of arguments expected, got " . scalar @_;
113 }
1144570µs my %spec = @_;
1154517µs foreach my $name (@name_proto) {
116 # Note that when multiple attributes specified, each attribute
117 # needs a separate \%specs hashref
1184931µs my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
1194994µs981.24ms $me->_constructor_maker_for($target)
# spent 1.20ms making 49 calls to Method::Generate::Constructor::register_attribute_specs, avg 24µs/call # spent 43µs making 49 calls to Moo::_constructor_maker_for, avg 878ns/call
120 ->register_attribute_specs($name, $spec_ref);
12149143µs9864.2ms $me->_accessor_maker_for($target)
# spent 64.2ms making 49 calls to Method::Generate::Accessor::generate_method, avg 1.31ms/call # spent 45µs making 49 calls to Moo::_accessor_maker_for, avg 918ns/call
122 ->generate_method($target, $name, $spec_ref);
12349111µs4978µs $me->_maybe_reset_handlemoose($target);
# spent 78µs making 49 calls to Moo::_maybe_reset_handlemoose, avg 2µs/call
124 }
12545103µs return;
126 },
127 (map {
12868186µs my $type = $_;
129 (
130
# spent 1.11ms (21µs+1.09) within Moo::around which was called 6 times, avg 186µs/call: # once (6µs+231µs) by OpenAPI::Modern::BEGIN@26 at line 685 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (4µs+188µs) by OpenAPI::Modern::BEGIN@26 at line 133 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (3µs+178µs) by JSON::Schema::Modern::BEGIN@35 at line 135 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Document.pm # once (3µs+177µs) by JSON::Schema::Modern::Result::BEGIN@20 at line 62 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Annotation.pm # once (2µs+170µs) by OpenAPI::Modern::BEGIN@26 at line 945 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (3µs+149µs) by main::BEGIN@2 at line 79 of OpenAPI/Modern.pm # spent 266µs (6+260) within Moo::before which was called 2 times, avg 133µs/call: # once (4µs+171µs) by OpenAPI::Modern::BEGIN@26 at line 124 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (2µs+89µs) by OpenAPI::Modern::BEGIN@26 at line 947 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
$type => sub {
131817µs81.35ms _install_modifier($target, $type, @_);
# spent 1.35ms making 8 calls to Moo::_Utils::_install_modifier, avg 169µs/call
132820µs return;
133 },
134 )
1355156µs } qw(before after around)),
136 );
137}
138
139sub unimport {
140 my $target = caller;
141 _unimport_coderefs($target);
142}
143
144
# spent 2.45ms (100µs+2.35) within Moo::_set_superclasses which was called 2 times, avg 1.22ms/call: # 2 times (100µs+2.35ms) by Moo::extends at line 98, avg 1.22ms/call
sub _set_superclasses {
14521µs my $class = shift;
14620s my $target = shift;
14722µs foreach my $superclass (@_) {
14822µs21.75ms _load_module($superclass);
# spent 1.75ms making 2 calls to Moo::_Utils::_load_module, avg 874µs/call
14926µs22µs if ($INC{'Role/Tiny.pm'} && Role::Tiny->is_role($superclass)) {
# spent 2µs making 2 calls to Role::Tiny::is_role, avg 1µs/call
150 croak "Can't extend role '$superclass'";
151 }
152 }
153220µs23µs @{*{_getglob("${target}::ISA")}} = @_;
# spent 3µs making 2 calls to Moo::_Utils::_getglob, avg 2µs/call
15423µs if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
15521µs210µs $old->assert_constructor;
# spent 10µs making 2 calls to Method::Generate::Constructor::assert_constructor, avg 5µs/call
156224µs22µs delete _getstash($target)->{new};
# spent 2µs making 2 calls to Moo::_Utils::_getstash, avg 1µs/call
157 Moo->_constructor_maker_for($target)
15827µs6582µs ->register_attribute_specs(%{$old->all_attribute_specs});
# spent 566µs making 2 calls to Moo::_constructor_maker_for, avg 283µs/call # spent 14µs making 2 calls to Method::Generate::Constructor::register_attribute_specs, avg 7µs/call # spent 2µs making 2 calls to Method::Generate::Constructor::all_attribute_specs, avg 1µs/call
159 }
160 elsif (!$target->isa('Moo::Object')) {
161 Moo->_constructor_maker_for($target);
162 }
163218µs22µs $Moo::HandleMoose::MOUSE{$target} = [
# spent 2µs making 2 calls to UNIVERSAL::can, avg 1µs/call
164 grep defined, map Mouse::Util::find_meta($_), @_
165 ] if Mouse::Util->can('find_meta');
166}
167
168
# spent 101µs within Moo::_maybe_reset_handlemoose which was called 60 times, avg 2µs/call: # 49 times (78µs+0s) by Moo::has at line 123, avg 2µs/call # 9 times (21µs+0s) by Moo::with at line 105, avg 2µs/call # 2 times (2µs+0s) by Moo::extends at line 99, avg 1µs/call
sub _maybe_reset_handlemoose {
1696025µs my ($class, $target) = @_;
17060130µs if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
171 Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
172 }
173}
174
175
# spent 9.83ms (3.79+6.04) within Moo::_accessor_maker_for which was called 116 times, avg 85µs/call: # 49 times (45µs+0s) by Moo::has at line 121, avg 918ns/call # 47 times (3.53ms+5.89ms) by MooX::TypeTiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny.pm:25] at line 19 of MooX/TypeTiny.pm, avg 200µs/call # 10 times (156µs+125µs) by Moo::Role::_maybe_make_accessors at line 254 of Moo/Role.pm, avg 28µs/call # 10 times (57µs+27µs) by Moo::_constructor_maker_for at line 207, avg 8µs/call
sub _accessor_maker_for {
17611647µs my ($class, $target) = @_;
17711647µs return unless $MAKERS{$target};
178116230µs $MAKERS{$target}{accessor} ||= do {
179186µs my $maker_class = do {
1802175µs211µs
# spent 8µs (5+3) within Moo::BEGIN@180 which was called: # once (5µs+3µs) by OpenAPI::Modern::BEGIN@11 at line 180
no strict 'refs';
# spent 8µs making 1 call to Moo::BEGIN@180 # spent 3µs making 1 call to strict::unimport
1811815µs if (my $m = do {
18218106µs1844µs my @isa = @{_linear_isa($target)};
# spent 44µs making 18 calls to mro::get_linear_isa, avg 2µs/call
183188µs shift @isa;
1841860µs if (my ($parent_new) = grep +(defined &{$_.'::new'}), @isa) {
185 $MAKERS{$parent_new} && $MAKERS{$parent_new}{accessor};
186 }
187 else {
188 undef;
189 }
190 }) {
191 ref($m);
192 } else {
19318330µs require Method::Generate::Accessor;
194183µs 'Method::Generate::Accessor'
195 }
196 };
1971844µs18205µs $maker_class->new;
# spent 205µs making 18 calls to Moo::Object::new, avg 11µs/call
198 }
199}
200
201
# spent 8.42ms (2.99+5.43) within Moo::_constructor_maker_for which was called 99 times, avg 85µs/call: # 49 times (43µs+0s) by Moo::has at line 119, avg 878ns/call # 47 times (2.84ms+4.97ms) by MooX::TypeTiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny.pm:25] at line 24 of MooX/TypeTiny.pm, avg 166µs/call # 2 times (56µs+510µs) by Moo::_set_superclasses at line 158, avg 283µs/call # once (49µs+-49µs) by Moo::_constructor_maker_for at line 250 of Method/Generate/Constructor.pm
sub _constructor_maker_for {
2029926µs my ($class, $target) = @_;
2039931µs return unless $MAKERS{$target};
20499172µs $MAKERS{$target}{constructor} ||= do {
20510735µs require Method::Generate::Constructor;
206
2071055µs1084µs my %construct_opts = (
# spent 84µs making 10 calls to Moo::_accessor_maker_for, avg 8µs/call
208 package => $target,
209 accessor_generator => $class->_accessor_maker_for($target),
210 subconstructor_handler => (
211 ' if ($Moo::MAKERS{$class}) {'."\n"
212 .' if ($Moo::MAKERS{$class}{constructor}) {'."\n"
213 .' package '.$target.';'."\n"
214 .' return $invoker->SUPER::new(@_);'."\n"
215 .' }'."\n"
216 .' '.$class.'->_constructor_maker_for($class);'."\n"
217 .' return $invoker->new(@_)'.";\n"
218 .' } elsif ($INC{"Moose.pm"} and my $meta = Class::MOP::get_metaclass_by_name($class)) {'."\n"
219 .' return $meta->new_object('."\n"
220 .' $class->can("BUILDARGS") ? $class->BUILDARGS(@_)'."\n"
221 .' : $class->Moo::Object::BUILDARGS(@_)'."\n"
222 .' );'."\n"
223 .' }'."\n"
224 ),
225 );
226
227102µs my $con;
2281031µs1011µs my @isa = @{_linear_isa($target)};
# spent 11µs making 10 calls to mro::get_linear_isa, avg 1µs/call
229104µs shift @isa;
2302249µs218µs
# spent 14µs (10+4) within Moo::BEGIN@230 which was called: # once (10µs+4µs) by OpenAPI::Modern::BEGIN@11 at line 230
no strict 'refs';
# spent 14µs making 1 call to Moo::BEGIN@230 # spent 4µs making 1 call to strict::unimport
2311055µs if (my ($parent_new) = grep +(defined &{$_.'::new'}), @isa) {
2321013µs12µs if ($parent_new eq 'Moo::Object') {
# spent 2µs making 1 call to UNIVERSAL::can
233 # no special constructor needed
234 }
235 elsif (my $makers = $MAKERS{$parent_new}) {
23611µs $con = $makers->{constructor};
23711µs116µs $construct_opts{construction_string} = $con->construction_string
238 if $con;
239 }
240 elsif ($parent_new->can('BUILDALL')) {
241 $construct_opts{construction_builder} = sub {
242 my $inv = $target->can('BUILDARGS') ? '' : 'Moo::Object::';
243 'do {'
244 .' my $args = $class->'.$inv.'BUILDARGS(@_);'
245 .' $args->{__no_BUILD__} = 1;'
246 .' $invoker->'.$target.'::SUPER::new($args);'
247 .'}'
248 };
249 }
250 else {
251
# spent 8µs (5+3) within Moo::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Moo.pm:256] which was called: # once (5µs+3µs) by Method::Generate::Constructor::_build_construction_string at line 68 of Method/Generate/Constructor.pm
$construct_opts{construction_builder} = sub {
25219µs13µs '$invoker->'.$target.'::SUPER::new('
# spent 3µs making 1 call to UNIVERSAL::can
253 .($target->can('FOREIGNBUILDARGS') ?
254 '$class->FOREIGNBUILDARGS(@_)' : '@_')
255 .')'
25612µs };
257 }
258 }
259 ($con ? ref($con) : 'Method::Generate::Constructor')
260 ->new(%construct_opts)
261 ->install_delayed
2621078µs314.02ms ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
# spent 2.16ms making 10 calls to Method::Generate::Constructor::install_delayed, avg 216µs/call # spent 1.66ms making 10 calls to Method::Generate::Constructor::new, avg 166µs/call # spent 200µs making 10 calls to Method::Generate::Constructor::register_attribute_specs, avg 20µs/call # spent 2µs making 1 call to Method::Generate::Constructor::all_attribute_specs
263 }
264}
265
266sub _concrete_methods_of {
267 my ($me, $class) = @_;
268 my $makers = $MAKERS{$class};
269
270 my $non_methods = $makers->{non_methods} || {};
271 my $stash = _getstash($class);
272
273 my $subs = {
274 map {;
2752144µs211µs
# spent 8µs (5+3) within Moo::BEGIN@275 which was called: # once (5µs+3µs) by OpenAPI::Modern::BEGIN@11 at line 275
no strict 'refs';
# spent 8µs making 1 call to Moo::BEGIN@275 # spent 3µs making 1 call to strict::unimport
276 ${"${class}::${_}"} = ${"${class}::${_}"};
277 ($_ => \&{"${class}::${_}"});
278 }
279 grep exists &{"${class}::${_}"},
280 grep !/::\z/,
281 keys %$stash
282 };
283
284 my %tracked = map +($_ => 1), _check_tracked($class, [ keys %$subs ]);
285
286 return {
287 map +($_ => \&{"${class}::${_}"}),
288 grep !($non_methods->{$_} && $non_methods->{$_} == $subs->{$_}),
289 grep !exists $tracked{$_},
290 keys %$subs
291 };
292}
293
29413µs1;
295__END__
 
# spent 43µs within Moo::CORE:match which was called 292 times, avg 147ns/call: # 292 times (43µs+0s) by Moo::make_class at line 63, avg 147ns/call
sub Moo::CORE:match; # opcode
# spent 49µs within Moo::CORE:sort which was called 17 times, avg 3µs/call: # 17 times (49µs+0s) by Moo::_install_subs at line 90, avg 3µs/call
sub Moo::CORE:sort; # opcode