Filename | /home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/Sub/Defer.pm |
Statements | Executed 32688 statements in 122ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
55 | 2 | 2 | 347µs | 828µs | defer_sub | Sub::Defer::
19 | 2 | 2 | 263µs | 9.31ms | undefer_sub | Sub::Defer::
11 | 1 | 1 | 35µs | 35µs | defer_info | Sub::Defer::
1 | 1 | 1 | 15µs | 27µs | BEGIN@6 | Sub::Defer::
1 | 1 | 1 | 6µs | 13µs | BEGIN@3 | Sub::Defer::
1 | 1 | 1 | 5µs | 12µs | BEGIN@27 | Sub::Defer::
1 | 1 | 1 | 4µs | 8µs | BEGIN@4 | Sub::Defer::
1 | 1 | 1 | 4µs | 32µs | BEGIN@5 | Sub::Defer::
1 | 1 | 1 | 700ns | 700ns | log_to (xsub) | Search::Elasticsearch::Role::Logger::
1 | 1 | 1 | 600ns | 600ns | log_as (xsub) | Search::Elasticsearch::Role::Logger::
1 | 1 | 1 | 600ns | 600ns | trace_to (xsub) | Search::Elasticsearch::Role::Logger::
1 | 1 | 1 | 500ns | 500ns | trace_as (xsub) | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | new | CHI::Stats::
0 | 0 | 0 | 0s | 0s | _bulk_class | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | _scroll_class | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | cat | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | cluster | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | ingest | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | nodes | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | snapshot | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | tasks | Search::Elasticsearch::Client::5_0::Direct::
0 | 0 | 0 | 0s | 0s | clear_handle | Search::Elasticsearch::Role::Cxn::
0 | 0 | 0 | 0s | 0s | critical | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | criticalf | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | debug | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | debugf | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | deprecate_handle | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | error | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | errorf | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | is_critical | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | is_debug | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | is_error | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | is_info | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | is_warning | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | log_handle | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | trace | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | trace_handle | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | tracef | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | warning | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | warningf | Search::Elasticsearch::Role::Logger::
0 | 0 | 0 | 0s | 0s | CLONE | Sub::Defer::
0 | 0 | 0 | 0s | 0s | __ANON__[:65] | Sub::Defer::
0 | 0 | 0 | 0s | 0s | undefer_all | Sub::Defer::
0 | 0 | 0 | 0s | 0s | undefer_package | Sub::Defer::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Sub::Defer; | ||||
2 | |||||
3 | 2 | 14µs | 2 | 20µs | # spent 13µs (6+7) within Sub::Defer::BEGIN@3 which was called:
# once (6µs+7µs) by Sub::Quote::BEGIN@7 at line 3 # spent 13µs making 1 call to Sub::Defer::BEGIN@3
# spent 7µs making 1 call to Moo::_strictures::import |
4 | 2 | 13µs | 2 | 12µs | # spent 8µs (4+4) within Sub::Defer::BEGIN@4 which was called:
# once (4µs+4µs) by Sub::Quote::BEGIN@7 at line 4 # spent 8µs making 1 call to Sub::Defer::BEGIN@4
# spent 4µs making 1 call to Exporter::import |
5 | 2 | 14µs | 2 | 60µs | # spent 32µs (4+28) within Sub::Defer::BEGIN@5 which was called:
# once (4µs+28µs) by Sub::Quote::BEGIN@7 at line 5 # spent 32µs making 1 call to Sub::Defer::BEGIN@5
# spent 28µs making 1 call to Exporter::import |
6 | 2 | 123µs | 2 | 39µs | # spent 27µs (15+12) within Sub::Defer::BEGIN@6 which was called:
# once (15µs+12µs) by Sub::Quote::BEGIN@7 at line 6 # spent 27µs making 1 call to Sub::Defer::BEGIN@6
# spent 12µs making 1 call to Exporter::import |
7 | |||||
8 | 1 | 300ns | our $VERSION = '2.000002'; | ||
9 | 1 | 8µs | $VERSION = eval $VERSION; # spent 2µs executing statements in string eval | ||
10 | |||||
11 | 1 | 600ns | our @EXPORT = qw(defer_sub undefer_sub undefer_all); | ||
12 | 1 | 300ns | our @EXPORT_OK = qw(undefer_package); | ||
13 | |||||
14 | our %DEFERRED; | ||||
15 | |||||
16 | # spent 9.31ms (263µs+9.04) within Sub::Defer::undefer_sub which was called 19 times, avg 490µs/call:
# 16 times (245µs+8.85ms) by BenchmarkAnything::Storage::Search::Elasticsearch::Serializer::JSON::DontTouchMyUTF8::new or Method::Generate::Constructor::new or Search::Elasticsearch::Client::5_0::Direct::Indices::new or Search::Elasticsearch::Client::5_0::Direct::indices or Search::Elasticsearch::Client::5_0::Direct::new or Search::Elasticsearch::Cxn::Factory::new or Search::Elasticsearch::Cxn::HTTPTiny::new or Search::Elasticsearch::CxnPool::Static::new or Search::Elasticsearch::Logger::LogAny::new or Search::Elasticsearch::Role::Logger::_assert_log_handle or Search::Elasticsearch::Role::Logger::_assert_trace_handle or Search::Elasticsearch::Role::Logger::info or Search::Elasticsearch::Role::Logger::infof or Search::Elasticsearch::Role::Logger::is_trace or Search::Elasticsearch::Serializer::JSON::new or Search::Elasticsearch::Transport::new at line 63, avg 568µs/call
# 3 times (17µs+192µs) by Moo::_Utils::_install_modifier at line 40 of Moo/_Utils.pm, avg 70µs/call | ||||
17 | 19 | 7µs | my ($deferred) = @_; | ||
18 | my ($target, $maker, $undeferred_ref) = @{ | ||||
19 | 19 | 35µs | $DEFERRED{$deferred}||return $deferred | ||
20 | }; | ||||
21 | return ${$undeferred_ref} | ||||
22 | 17 | 4µs | if ${$undeferred_ref}; | ||
23 | 17 | 66µs | 17 | 9.01ms | ${$undeferred_ref} = my $made = $maker->(); # spent 7.37ms making 10 calls to Method::Generate::Constructor::__ANON__[Method/Generate/Constructor.pm:97], avg 737µs/call
# spent 1.63ms making 7 calls to Sub::Quote::__ANON__[Sub/Quote.pm:98], avg 233µs/call |
24 | |||||
25 | # make sure the method slot has not changed since deferral time | ||||
26 | 17 | 40µs | 17 | 27µs | if (defined($target) && $deferred eq *{_getglob($target)}{CODE}||'') { # spent 27µs making 17 calls to Moo::_Utils::_getglob, avg 2µs/call |
27 | 2 | 234µs | 2 | 19µs | # spent 12µs (5+7) within Sub::Defer::BEGIN@27 which was called:
# once (5µs+7µs) by Sub::Quote::BEGIN@7 at line 27 # spent 12µs making 1 call to Sub::Defer::BEGIN@27
# spent 7µs making 1 call to warnings::unimport |
28 | |||||
29 | # I believe $maker already evals with the right package/name, so that | ||||
30 | # _install_coderef calls are not necessary --ribasushi | ||||
31 | 17 | 17µs | 17 | 9µs | *{_getglob($target)} = $made; # spent 9µs making 17 calls to Moo::_Utils::_getglob, avg 541ns/call |
32 | } | ||||
33 | 17 | 21µs | $DEFERRED{$made} = $DEFERRED{$deferred}; | ||
34 | 17 | 4µs | weaken $DEFERRED{$made} | ||
35 | unless $target; | ||||
36 | |||||
37 | 17 | 51µs | return $made; | ||
38 | } | ||||
39 | |||||
40 | sub undefer_all { | ||||
41 | undefer_sub($_) for keys %DEFERRED; | ||||
42 | return; | ||||
43 | } | ||||
44 | |||||
45 | sub undefer_package { | ||||
46 | my $package = shift; | ||||
47 | my @subs = grep { $DEFERRED{$_}[0] =~ /^${package}::[^:]+$/ } keys %DEFERRED; | ||||
48 | undefer_sub($_) for @subs; | ||||
49 | return; | ||||
50 | } | ||||
51 | |||||
52 | # spent 35µs within Sub::Defer::defer_info which was called 11 times, avg 3µs/call:
# 11 times (35µs+0s) by Moo::_accessor_maker_for at line 132 of Moo.pm, avg 3µs/call | ||||
53 | 11 | 6µs | my ($deferred) = @_; | ||
54 | 11 | 32µs | my $info = $DEFERRED{$deferred||''} or return undef; | ||
55 | [ @$info ]; | ||||
56 | } | ||||
57 | |||||
58 | # spent 828µs (347+482) within Sub::Defer::defer_sub which was called 55 times, avg 15µs/call:
# 44 times (249µs+347µs) by Sub::Quote::quote_sub at line 98 of Sub/Quote.pm, avg 14µs/call
# 11 times (98µs+135µs) by Method::Generate::Constructor::install_delayed at line 97 of Method/Generate/Constructor.pm, avg 21µs/call | ||||
59 | 55 | 10µs | my ($target, $maker) = @_; | ||
60 | 55 | 6µs | my $undeferred; | ||
61 | my $deferred_info; | ||||
62 | my $deferred = sub { | ||||
63 | 16027 | 4.02ms | 16 | 9.10ms | $undeferred ||= undefer_sub($deferred_info->[3]); # spent 9.10ms making 16 calls to Sub::Defer::undefer_sub, avg 568µs/call |
64 | 16027 | 117ms | 16027 | 772ms | goto &$undeferred; # spent 204ms making 4004 calls to Search::Elasticsearch::Role::Logger::infof, avg 51µs/call
# spent 175ms making 2002 calls to Search::Elasticsearch::Role::Logger::is_trace, avg 87µs/call
# spent 94.3ms making 5005 calls to Search::Elasticsearch::Role::Logger::_assert_log_handle, avg 19µs/call
# spent 94.1ms making 2002 calls to Search::Elasticsearch::Role::Logger::_assert_trace_handle, avg 47µs/call
# spent 90.8ms making 2002 calls to Search::Elasticsearch::Role::Cxn::handle, avg 45µs/call
# spent 59.3ms making 1 call to Search::Elasticsearch::Cxn::Factory::new
# spent 39.0ms making 1001 calls to Search::Elasticsearch::Role::Logger::info, avg 39µs/call
# spent 9.65ms making 1 call to Search::Elasticsearch::CxnPool::Static::new
# spent 3.17ms making 1 call to Search::Elasticsearch::Client::5_0::Direct::indices
# spent 3.13ms making 1 call to Search::Elasticsearch::Cxn::HTTPTiny::new
# spent 89µs making 1 call to Search::Elasticsearch::Transport::new
# spent 32µs making 1 call to Search::Elasticsearch::Serializer::JSON::new
# spent 25µs making 1 call to BenchmarkAnything::Storage::Search::Elasticsearch::Serializer::JSON::DontTouchMyUTF8::new
# spent 13µs making 1 call to Search::Elasticsearch::Client::5_0::Direct::new
# spent 11µs making 1 call to Search::Elasticsearch::Logger::LogAny::new
# spent 9µs making 1 call to Search::Elasticsearch::Client::5_0::Direct::Indices::new
# spent 7µs making 1 call to Method::Generate::Constructor::new |
65 | 55 | 53µs | }; | ||
66 | 55 | 35µs | $deferred_info = [ $target, $maker, \$undeferred, $deferred ]; | ||
67 | 55 | 94µs | 55 | 28µs | weaken($deferred_info->[3]); # spent 28µs making 55 calls to Scalar::Util::weaken, avg 515ns/call |
68 | 55 | 93µs | 55 | 11µs | weaken($DEFERRED{$deferred} = $deferred_info); # spent 11µs making 55 calls to Scalar::Util::weaken, avg 200ns/call |
69 | 55 | 36µs | 45 | 442µs | _install_coderef($target => $deferred) if defined $target; # spent 442µs making 45 calls to Moo::_Utils::_install_coderef, avg 10µs/call |
70 | 55 | 76µs | return $deferred; | ||
71 | } | ||||
72 | |||||
73 | sub CLONE { | ||||
74 | %DEFERRED = map { defined $_ && $_->[3] ? ($_->[3] => $_) : () } values %DEFERRED; | ||||
75 | foreach my $info (values %DEFERRED) { | ||||
76 | weaken($info) | ||||
77 | unless $info->[0] && ${$info->[2]}; | ||||
78 | } | ||||
79 | } | ||||
80 | |||||
81 | 1 | 3µs | 1; | ||
82 | __END__ | ||||
# spent 600ns within Search::Elasticsearch::Role::Logger::log_as which was called:
# once (600ns+0s) by Search::Elasticsearch::Logger::LogAny::_build_log_handle at line 18 of Search/Elasticsearch/Logger/LogAny.pm | |||||
# spent 700ns within Search::Elasticsearch::Role::Logger::log_to which was called:
# once (700ns+0s) by Search::Elasticsearch::Logger::LogAny::_build_log_handle at line 15 of Search/Elasticsearch/Logger/LogAny.pm | |||||
# spent 500ns within Search::Elasticsearch::Role::Logger::trace_as which was called:
# once (500ns+0s) by Search::Elasticsearch::Logger::LogAny::_build_trace_handle at line 28 of Search/Elasticsearch/Logger/LogAny.pm | |||||
# spent 600ns within Search::Elasticsearch::Role::Logger::trace_to which was called:
# once (600ns+0s) by Search::Elasticsearch::Logger::LogAny::_build_trace_handle at line 25 of Search/Elasticsearch/Logger/LogAny.pm |