Profile of Devel/GlobalDestruction.pm

← Index
NYTProf Performance Profile «line view»
For script/ponapi
Run on Wed Feb 10 15:51:26 2016
Reported on Thu Feb 11 09:43:10 2016

Filename | /usr/local/share/perl/5.18.2/Devel/GlobalDestruction.pm
Statements | Executed 12 statements in 242µs

Subroutines
Calls | P | F | Exclusive Time | Inclusive Time | Subroutine
--- | --- | --- | --- | --- | ---
1 | 1 | 1 | 746µs | 881µs | Devel::GlobalDestruction::::BEGIN@8Devel::GlobalDestruction::BEGIN@8
1 | 1 | 1 | 8µs | 16µs | Devel::GlobalDestruction::::BEGIN@3Devel::GlobalDestruction::BEGIN@3
1 | 1 | 1 | 8µs | 21µs | Devel::GlobalDestruction::::BEGIN@23Devel::GlobalDestruction::BEGIN@23
1 | 1 | 1 | 5µs | 8µs | Devel::GlobalDestruction::::BEGIN@4Devel::GlobalDestruction::BEGIN@4

Call graph for these subroutines as a Graphviz dot language file.

Line | State ments | Time on line | Calls | Time in subs | Code
--- | --- | --- | --- | --- | ---
1 |  |  |  |  | package Devel::GlobalDestruction;
2 |  |  |  |  |
3 | 2 | 17µs | 2 | 24µs | # spent 16µs (8+8) within Devel::GlobalDestruction::BEGIN@3 which was called: # once (8µs+8µs) by Class::MOP::Package::BEGIN@8 at line 3 use strict; # spent 16µs making 1 call to Devel::GlobalDestruction::BEGIN@3 # spent 8µs making 1 call to strict::import
4 | 2 | 42µs | 2 | 10µs | # spent 8µs (5+3) within Devel::GlobalDestruction::BEGIN@4 which was called: # once (5µs+3µs) by Class::MOP::Package::BEGIN@8 at line 4 use warnings; # spent 8µs making 1 call to Devel::GlobalDestruction::BEGIN@4 # spent 3µs making 1 call to warnings::import
5 |  |  |  |  |
6 | 1 | 600ns |  |  | our $VERSION = '0.12';
7 |  |  |  |  |
8 | 1 | 8µs | 1 | 67µs | # spent 881µs (746+134) within Devel::GlobalDestruction::BEGIN@8 which was called: # once (746µs+134µs) by Class::MOP::Package::BEGIN@8 at line 11 use Sub::Exporter::Progressive -setup => { # spent 67µs making 1 call to Sub::Exporter::Progressive::import
9 |  |  |  |  | exports => [ qw(in_global_destruction) ],
10 |  |  |  |  | groups => { default => [ -all ] },
11 | 1 | 98µs | 1 | 881µs | }; # spent 881µs making 1 call to Devel::GlobalDestruction::BEGIN@8
12 |  |  |  |  |
13 |  |  |  |  | # we run 5.14+ - everything is in core
14 |  |  |  |  | #
15 | 1 | 900ns |  |  | if (defined ${^GLOBAL_PHASE}) {
16 | 1 | 24µs |  |  | eval 'sub in_global_destruction () { ${^GLOBAL_PHASE} eq q[DESTRUCT] }; 1' # spent 2µs executing statements in string eval
17 |  |  |  |  | or die $@;
18 |  |  |  |  | }
19 |  |  |  |  | # try to load the xs version if it was compiled
20 |  |  |  |  | #
21 |  |  |  |  | elsif (eval {
22 |  |  |  |  | require Devel::GlobalDestruction::XS;
23 | 2 | 47µs | 2 | 34µs | # spent 21µs (8+13) within Devel::GlobalDestruction::BEGIN@23 which was called: # once (8µs+13µs) by Class::MOP::Package::BEGIN@8 at line 23 no warnings 'once'; # spent 21µs making 1 call to Devel::GlobalDestruction::BEGIN@23 # spent 13µs making 1 call to warnings::unimport
24 |  |  |  |  | *in_global_destruction = \&Devel::GlobalDestruction::XS::in_global_destruction;
25 |  |  |  |  | 1;
26 |  |  |  |  | }) {
27 |  |  |  |  | # the eval already installed everything, nothing to do
28 |  |  |  |  | }
29 |  |  |  |  | else {
30 |  |  |  |  | # internally, PL_main_cv is set to Nullcv immediately before entering
31 |  |  |  |  | # global destruction and we can use B to detect that. B::main_cv will
32 |  |  |  |  | # only ever be a B::CV or a B::SPECIAL that is a reference to 0
33 |  |  |  |  | require B;
34 |  |  |  |  | eval 'sub in_global_destruction () { ${B::main_cv()} == 0 }; 1'
35 |  |  |  |  | or die $@;
36 |  |  |  |  | }
37 |  |  |  |  |
38 | 1 | 4µs |  |  | 1; # keep require happy
39 |  |  |  |  |
40 |  |  |  |  |
41 |  |  |  |  | __END__