← 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:11 2016

Filename/usr/local/lib/perl/5.18.2/Moose/Object.pm
StatementsExecuted 6154878 statements in 19.6s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
12309642222.2s67.0sMoose::Object::::doesMoose::Object::does
11189µs90µsMoose::Object::::BEGIN@106Moose::Object::BEGIN@106
11112µs1.77msMoose::Object::::BEGIN@16Moose::Object::BEGIN@16
11111µs40µsMoose::Object::::BEGIN@15Moose::Object::BEGIN@15
1119µs19µsMoose::Object::::BEGIN@4Moose::Object::BEGIN@4
1118µs19µsMoose::Object::::BEGIN@79Moose::Object::BEGIN@79
1116µs10µsMoose::Object::::BEGIN@5Moose::Object::BEGIN@5
1114µs4µsMoose::Object::::BEGIN@13Moose::Object::BEGIN@13
1113µs3µsMoose::Object::::BEGIN@7Moose::Object::BEGIN@7
1113µs3µsMoose::Object::::BEGIN@10Moose::Object::BEGIN@10
1113µs3µsMoose::Object::::BEGIN@11Moose::Object::BEGIN@11
1113µs3µsMoose::Object::::BEGIN@9Moose::Object::BEGIN@9
1112µs2µsMoose::Object::::BEGIN@8Moose::Object::BEGIN@8
0000s0sMoose::Object::::BUILDALLMoose::Object::BUILDALL
0000s0sMoose::Object::::BUILDARGSMoose::Object::BUILDARGS
0000s0sMoose::Object::::DEMOLISHALLMoose::Object::DEMOLISHALL
0000s0sMoose::Object::::DESTROYMoose::Object::DESTROY
0000s0sMoose::Object::::__ANON__[:100]Moose::Object::__ANON__[:100]
0000s0sMoose::Object::::__ANON__[:97]Moose::Object::__ANON__[:97]
0000s0sMoose::Object::::dumpMoose::Object::dump
0000s0sMoose::Object::::newMoose::Object::new
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Moose::Object;
21500nsour $VERSION = '2.1604';
3
4220µs229µs
# spent 19µs (9+10) within Moose::Object::BEGIN@4 which was called: # once (9µs+10µs) by Moose::BEGIN@30 at line 4
use strict;
# spent 19µs making 1 call to Moose::Object::BEGIN@4 # spent 10µs making 1 call to strict::import
5220µs214µs
# spent 10µs (6+4) within Moose::Object::BEGIN@5 which was called: # once (6µs+4µs) by Moose::BEGIN@30 at line 5
use warnings;
# spent 10µs making 1 call to Moose::Object::BEGIN@5 # spent 4µs making 1 call to warnings::import
6
7215µs13µs
# spent 3µs within Moose::Object::BEGIN@7 which was called: # once (3µs+0s) by Moose::BEGIN@30 at line 7
use Carp ();
# spent 3µs making 1 call to Moose::Object::BEGIN@7
8215µs12µs
# spent 2µs within Moose::Object::BEGIN@8 which was called: # once (2µs+0s) by Moose::BEGIN@30 at line 8
use Devel::GlobalDestruction ();
# spent 2µs making 1 call to Moose::Object::BEGIN@8
9229µs13µs
# spent 3µs within Moose::Object::BEGIN@9 which was called: # once (3µs+0s) by Moose::BEGIN@30 at line 9
use MRO::Compat ();
# spent 3µs making 1 call to Moose::Object::BEGIN@9
10216µs13µs
# spent 3µs within Moose::Object::BEGIN@10 which was called: # once (3µs+0s) by Moose::BEGIN@30 at line 10
use Scalar::Util ();
# spent 3µs making 1 call to Moose::Object::BEGIN@10
11219µs13µs
# spent 3µs within Moose::Object::BEGIN@11 which was called: # once (3µs+0s) by Moose::BEGIN@30 at line 11
use Try::Tiny ();
# spent 3µs making 1 call to Moose::Object::BEGIN@11
12
13234µs14µs
# spent 4µs within Moose::Object::BEGIN@13 which was called: # once (4µs+0s) by Moose::BEGIN@30 at line 13
use Moose::Util ();
# spent 4µs making 1 call to Moose::Object::BEGIN@13
14
15231µs244µs
# spent 40µs (11+28) within Moose::Object::BEGIN@15 which was called: # once (11µs+28µs) by Moose::BEGIN@30 at line 15
use if ( not our $__mx_is_compiled ), 'Moose::Meta::Class';
# spent 40µs making 1 call to Moose::Object::BEGIN@15 # spent 5µs making 1 call to if::import
162308µs21.77ms
# spent 1.77ms (12µs+1.76) within Moose::Object::BEGIN@16 which was called: # once (12µs+1.76ms) by Moose::BEGIN@30 at line 16
use if ( not our $__mx_is_compiled ), metaclass => 'Moose::Meta::Class';
# spent 1.77ms making 1 call to Moose::Object::BEGIN@16 # spent 2µs making 1 call to if::import
17
18sub new {
19 my $class = shift;
20 my $real_class = Scalar::Util::blessed($class) || $class;
21
22 my $params = $real_class->BUILDARGS(@_);
23
24 return Class::MOP::Class->initialize($real_class)->new_object($params);
25}
26
27sub BUILDARGS {
28 my $class = shift;
29 if ( scalar @_ == 1 ) {
30 unless ( defined $_[0] && ref $_[0] eq 'HASH' ) {
31 Moose::Util::throw_exception( "SingleParamsToNewMustBeHashRef" );
32 }
33 return { %{ $_[0] } };
34 }
35 elsif ( @_ % 2 ) {
36 Carp::carp(
37 "The new() method for $class expects a hash reference or a key/value list."
38 . " You passed an odd number of arguments" );
39 return { @_, undef };
40 }
41 else {
42 return { @_ };
43 }
44}
45
46sub BUILDALL {
47 # NOTE: we ask Perl if we even
48 # need to do this first, to avoid
49 # extra meta level calls
50 return unless $_[0]->can('BUILD');
51 my ($self, $params) = @_;
52 foreach my $method (reverse Class::MOP::class_of($self)->find_all_methods_by_name('BUILD')) {
53 $method->{code}->execute($self, $params);
54 }
55}
56
57sub DEMOLISHALL {
58 my $self = shift;
59 my ($in_global_destruction) = @_;
60
61 # NOTE: we ask Perl if we even
62 # need to do this first, to avoid
63 # extra meta level calls
64 return unless $self->can('DEMOLISH');
65
66 my @isa;
67 if ( my $meta = Class::MOP::class_of($self ) ) {
68 @isa = $meta->linearized_isa;
69 } else {
70 # We cannot count on being able to retrieve a previously made
71 # metaclass, _or_ being able to make a new one during global
72 # destruction. However, we should still be able to use mro at
73 # that time (at least tests suggest so ;)
74 my $class_name = ref $self;
75 @isa = @{ mro::get_linear_isa($class_name) }
76 }
77
78 foreach my $class (@isa) {
792150µs231µs
# spent 19µs (8+12) within Moose::Object::BEGIN@79 which was called: # once (8µs+12µs) by Moose::BEGIN@30 at line 79
no strict 'refs';
# spent 19µs making 1 call to Moose::Object::BEGIN@79 # spent 12µs making 1 call to strict::unimport
80 my $demolish = *{"${class}::DEMOLISH"}{CODE};
81 $self->$demolish($in_global_destruction)
82 if defined $demolish;
83 }
84}
85
86sub DESTROY {
87 my $self = shift;
88
89 local $?;
90
91 # < doy> if the destructor is being called because an exception is thrown, then $@ will be set
92 # < doy> but if DEMOLISH does an eval which succeeds, that will clear $@
93 # < doy> which is broken
94 # < doy> try::tiny implicitly localizes $@ in the try block, which fixes that
95 Try::Tiny::try {
96 $self->DEMOLISHALL(Devel::GlobalDestruction::in_global_destruction);
97 }
98 Try::Tiny::catch {
99 die $_;
100 };
101
102 return;
103}
104
105# support for UNIVERSAL::DOES ...
106
# spent 90µs (89+1000ns) within Moose::Object::BEGIN@106 which was called: # once (89µs+1000ns) by Moose::BEGIN@30 at line 113
BEGIN {
10716µs11µs my $does = UNIVERSAL->can("DOES") ? "SUPER::DOES" : "isa";
# spent 1µs making 1 call to UNIVERSAL::can
108183µs eval 'sub DOES {
109 my ( $self, $class_or_role_name ) = @_;
110 return $self->'.$does.'($class_or_role_name)
111 || $self->does($class_or_role_name);
112 }';
1131112µs190µs}
# spent 90µs making 1 call to Moose::Object::BEGIN@106
114
115# new does() methods will be created
116# as appropriate see Moose::Meta::Role
117
# spent 67.0s (22.2+44.8) within Moose::Object::does which was called 1230964 times, avg 54µs/call: # 1230932 times (22.2s+44.8s) by Moose::Util::does_role at line 69 of Moose/Util.pm, avg 54µs/call # 32 times (330µs+227µs) by Moose::Meta::Attribute::does at line 41 of Moose/Meta/Attribute.pm, avg 17µs/call
sub does {
1181230964571ms my ($self, $role_name) = @_;
11912309645.70s12309641.09s my $class = Scalar::Util::blessed($self) || $self;
# spent 1.09s making 1230964 calls to Scalar::Util::blessed, avg 883ns/call
12012309642.77s123096410.6s my $meta = Class::MOP::Class->initialize($class);
# spent 10.6s making 1230964 calls to Class::MOP::Class::initialize, avg 9µs/call
1211230964251ms (defined $role_name)
122 || Moose::Util::throw_exception( DoesRequiresRoleName => class_name => $meta->name );
123123096410.3s246189633.1s return 1 if $meta->can('does_role') && $meta->does_role($role_name);
# spent 31.8s making 1230932 calls to Class::MOP::Class::Immutable::Moose::Meta::Class::does_role, avg 26µs/call # spent 1.27s making 1230964 calls to UNIVERSAL::can, avg 1µs/call
1243261µs return 0;
125}
126
127sub dump {
128 my $self = shift;
129 require Data::Dumper;
130 local $Data::Dumper::Maxdepth = shift if @_;
131 Data::Dumper::Dumper $self;
132}
133
13412µs1;
135
136# ABSTRACT: The base object for Moose
137
138__END__