Profile of /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Object.pm

← Index
NYTProf Performance Profile «block view•line view•sub view»
For 05.Domain_and_Item.t
Run on Tue May 4 17:21:41 2010
Reported on Tue May 4 17:23:06 2010

File | /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Object.pm
Statements Executed | 736
Statement Execution Time | 4.11ms

Subroutines — ordered by exclusive time
Calls | P | F | Exclusive Time | Inclusive Time | Subroutine
--- | --- | --- | --- | --- | ---
37 | 4 | 3 | 1.07ms | 92.9ms | Moose::Object::::newMoose::Object::new
36 | 14 | 2 | 778µs | 2.44ms | Moose::Object::::DESTROYMoose::Object::DESTROY
37 | 1 | 1 | 400µs | 400µs | Moose::Object::::BUILDARGSMoose::Object::BUILDARGS
36 | 1 | 1 | 365µs | 748µs | Moose::Object::::__ANON__[:94]Moose::Object::__ANON__[:94]
36 | 1 | 1 | 247µs | 323µs | Moose::Object::::DEMOLISHALLMoose::Object::DEMOLISHALL
37 | 1 | 1 | 206µs | 260µs | Moose::Object::::BUILDALLMoose::Object::BUILDALL
1 | 1 | 1 | 196µs | 228µs | Moose::Object::::BEGIN@12Moose::Object::BEGIN@12
1 | 1 | 1 | 46µs | 47µs | Moose::Object::::BEGIN@106Moose::Object::BEGIN@106
1 | 1 | 1 | 21µs | 32µs | Moose::Object::::doesMoose::Object::does
1 | 1 | 1 | 14µs | 1.13ms | Moose::Object::::BEGIN@13Moose::Object::BEGIN@13
1 | 1 | 1 | 13µs | 16µs | Moose::Object::::BEGIN@4Moose::Object::BEGIN@4
1 | 1 | 1 | 9µs | 27µs | Moose::Object::::BEGIN@98Moose::Object::BEGIN@98
1 | 1 | 1 | 8µs | 27µs | Moose::Object::::BEGIN@80Moose::Object::BEGIN@80
1 | 1 | 1 | 7µs | 16µs | Moose::Object::::BEGIN@5Moose::Object::BEGIN@5
1 | 1 | 1 | 3µs | 3µs | Moose::Object::::BEGIN@7Moose::Object::BEGIN@7
1 | 1 | 1 | 3µs | 3µs | Moose::Object::::BEGIN@9Moose::Object::BEGIN@9
1 | 1 | 1 | 3µs | 3µs | Moose::Object::::BEGIN@8Moose::Object::BEGIN@8
1 | 1 | 1 | 2µs | 2µs | Moose::Object::::BEGIN@10Moose::Object::BEGIN@10
0 | 0 | 0 | 0s | 0s | Moose::Object::::__ANON__[:100]Moose::Object::__ANON__[:100]
0 | 0 | 0 | 0s | 0s | Moose::Object::::dumpMoose::Object::dump

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

Line | State ments | Time on line | Calls | Time in subs | Code
--- | --- | --- | --- | --- | ---
1 |  |  |  |  |
2 |  |  |  |  | package Moose::Object;
3 |  |  |  |  |
4 | 3 | 20µs | 2 | 19µs | # spent 16µs (13+3) within Moose::Object::BEGIN@4 which was called # once (13µs+3µs) by Moose::BEGIN@24 at line 4 use strict; # spent 16µs making 1 call to Moose::Object::BEGIN@4 # spent 3µs making 1 call to strict::import
5 | 3 | 18µs | 2 | 24µs | # spent 16µs (7+9) within Moose::Object::BEGIN@5 which was called # once (7µs+9µs) by Moose::BEGIN@24 at line 5 use warnings; # spent 16µs making 1 call to Moose::Object::BEGIN@5 # spent 9µs making 1 call to warnings::import
6 |  |  |  |  |
7 | 3 | 28µs | 1 | 3µs | # spent 3µs within Moose::Object::BEGIN@7 which was called # once (3µs+0s) by Moose::BEGIN@24 at line 7 use Devel::GlobalDestruction (); # spent 3µs making 1 call to Moose::Object::BEGIN@7
8 | 3 | 15µs | 1 | 3µs | # spent 3µs within Moose::Object::BEGIN@8 which was called # once (3µs+0s) by Moose::BEGIN@24 at line 8 use MRO::Compat (); # spent 3µs making 1 call to Moose::Object::BEGIN@8
9 | 3 | 14µs | 1 | 3µs | # spent 3µs within Moose::Object::BEGIN@9 which was called # once (3µs+0s) by Moose::BEGIN@24 at line 9 use Scalar::Util (); # spent 3µs making 1 call to Moose::Object::BEGIN@9
10 | 3 | 25µs | 1 | 2µs | # spent 2µs within Moose::Object::BEGIN@10 which was called # once (2µs+0s) by Moose::BEGIN@24 at line 10 use Try::Tiny (); # spent 2µs making 1 call to Moose::Object::BEGIN@10
11 |  |  |  |  |
12 | 3 | 213µs | 2 | 232µs | # spent 228µs (196+32) within Moose::Object::BEGIN@12 which was called # once (196µs+32µs) by Moose::BEGIN@24 at line 12 use if ( not our $__mx_is_compiled ), 'Moose::Meta::Class'; # spent 228µs making 1 call to Moose::Object::BEGIN@12 # spent 4µs making 1 call to if::import
13 | 3 | 254µs | 2 | 1.13ms | # spent 1.13ms (14µs+1.12) within Moose::Object::BEGIN@13 which was called # once (14µs+1.12ms) by Moose::BEGIN@24 at line 13 use if ( not our $__mx_is_compiled ), metaclass => 'Moose::Meta::Class'; # spent 1.13ms making 1 call to Moose::Object::BEGIN@13 # spent 3µs making 1 call to if::import
14 |  |  |  |  |
15 | 1 | 600ns |  |  | our $VERSION = '0.98';
16 | 1 | 18µs |  |  | $VERSION = eval $VERSION;
17 | 1 | 300ns |  |  | our $AUTHORITY = 'cpan:STEVAN';
18 |  |  |  |  |
19 |  |  |  |  | # spent 92.9ms (1.07+91.9) within Moose::Object::new which was called 37 times, avg 2.51ms/call: # 30 times (872µs+48.6ms) by SimpleDB::Class::Role::Itemized::instantiate_item at line 52 of ../lib/SimpleDB/Class/Role/Itemized.pm, avg 1.65ms/call # 5 times (149µs+41.8ms) by SimpleDB::Class::Role::Itemized::parse_item at line 134 of ../lib/SimpleDB/Class/Role/Itemized.pm, avg 8.39ms/call # once (14µs+800µs) by SimpleDB::Class::Item::copy at line 415 of ../lib/SimpleDB/Class/Item.pm # once (35µs+677µs) by SimpleDB::Class::new at line 3 of generated method (unknown origin) sub new {
20 | 37 | 41µs |  |  | my $class = shift;
21 |  |  |  |  |
22 | 37 | 156µs | 37 | 400µs | my $params = $class->BUILDARGS(@_); # spent 400µs making 37 calls to Moose::Object::BUILDARGS, avg 11µs/call
23 |  |  |  |  |
24 | 37 | 176µs | 37 | 48µs | my $real_class = Scalar::Util::blessed($class) || $class; # spent 48µs making 37 calls to Scalar::Util::blessed, avg 1µs/call
25 | 37 | 288µs | 74 | 91.2ms | my $self = Class::MOP::Class->initialize($real_class)->new_object($params); # spent 90.6ms making 37 calls to Moose::Meta::Class::new_object, avg 2.45ms/call # spent 552µs making 37 calls to Class::MOP::Class::initialize, avg 15µs/call
26 |  |  |  |  |
27 | 37 | 109µs | 37 | 260µs | $self->BUILDALL($params); # spent 260µs making 37 calls to Moose::Object::BUILDALL, avg 7µs/call
28 |  |  |  |  |
29 | 37 | 187µs |  |  | return $self;
30 |  |  |  |  | }
31 |  |  |  |  |
32 |  |  |  |  | # spent 400µs within Moose::Object::BUILDARGS which was called 37 times, avg 11µs/call: # 37 times (400µs+0s) by Moose::Object::new at line 22, avg 11µs/call sub BUILDARGS {
33 | 37 | 21µs |  |  | my $class = shift;
34 | 37 | 29µs |  |  | if ( scalar @_ == 1 ) {
35 | 36 | 47µs |  |  | unless ( defined $_[0] && ref $_[0] eq 'HASH' ) {
36 |  |  |  |  | Class::MOP::class_of($class)->throw_error(
37 |  |  |  |  | "Single parameters to new() must be a HASH ref",
38 |  |  |  |  | data => $_[0] );
39 |  |  |  |  | }
40 | 36 | 332µs |  |  | return { %{ $_[0] } };
41 |  |  |  |  | }
42 |  |  |  |  | else {
43 | 1 | 6µs |  |  | return {@_};
44 |  |  |  |  | }
45 |  |  |  |  | }
46 |  |  |  |  |
47 |  |  |  |  | # spent 260µs (206+55) within Moose::Object::BUILDALL which was called 37 times, avg 7µs/call: # 37 times (206µs+55µs) by Moose::Object::new at line 27, avg 7µs/call sub BUILDALL {
48 |  |  |  |  | # NOTE: we ask Perl if we even
49 |  |  |  |  | # need to do this first, to avoid
50 |  |  |  |  | # extra meta level calls
51 | 37 | 291µs | 37 | 55µs | return unless $_[0]->can('BUILD'); # spent 55µs making 37 calls to UNIVERSAL::can, avg 1µs/call
52 |  |  |  |  | my ($self, $params) = @_;
53 |  |  |  |  | foreach my $method (reverse Class::MOP::class_of($self)->find_all_methods_by_name('BUILD')) {
54 |  |  |  |  | $method->{code}->execute($self, $params);
55 |  |  |  |  | }
56 |  |  |  |  | }
57 |  |  |  |  |
58 |  |  |  |  | # spent 323µs (247+76) within Moose::Object::DEMOLISHALL which was called 36 times, avg 9µs/call: # 36 times (247µs+76µs) by Moose::Object::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Object.pm:94] at line 93, avg 9µs/call sub DEMOLISHALL {
59 | 36 | 21µs |  |  | my $self = shift;
60 | 36 | 29µs |  |  | my ($in_global_destruction) = @_;
61 |  |  |  |  |
62 |  |  |  |  | # NOTE: we ask Perl if we even
63 |  |  |  |  | # need to do this first, to avoid
64 |  |  |  |  | # extra meta level calls
65 | 36 | 307µs | 36 | 76µs | return unless $self->can('DEMOLISH'); # spent 76µs making 36 calls to UNIVERSAL::can, avg 2µs/call
66 |  |  |  |  |
67 |  |  |  |  | my @isa;
68 |  |  |  |  | if ( my $meta = Class::MOP::class_of($self ) ) {
69 |  |  |  |  | @isa = $meta->linearized_isa;
70 |  |  |  |  | } else {
71 |  |  |  |  | # We cannot count on being able to retrieve a previously made
72 |  |  |  |  | # metaclass, _or_ being able to make a new one during global
73 |  |  |  |  | # destruction. However, we should still be able to use mro at
74 |  |  |  |  | # that time (at least tests suggest so ;)
75 |  |  |  |  | my $class_name = ref $self;
76 |  |  |  |  | @isa = @{ mro::get_linear_isa($class_name) }
77 |  |  |  |  | }
78 |  |  |  |  |
79 |  |  |  |  | foreach my $class (@isa) {
80 | 3 | 98µs | 2 | 45µs | # spent 27µs (8+19) within Moose::Object::BEGIN@80 which was called # once (8µs+19µs) by Moose::BEGIN@24 at line 80 no strict 'refs'; # spent 27µs making 1 call to Moose::Object::BEGIN@80 # spent 19µs making 1 call to strict::unimport
81 |  |  |  |  | my $demolish = *{"${class}::DEMOLISH"}{CODE};
82 |  |  |  |  | $self->$demolish($in_global_destruction)
83 |  |  |  |  | if defined $demolish;
84 |  |  |  |  | }
85 |  |  |  |  | }
86 |  |  |  |  |
87 |  |  |  |  | # spent 2.44ms (778µs+1.67) within Moose::Object::DESTROY which was called 36 times, avg 68µs/call: # 13 times (260µs+536µs) by main::NULL at line 0 of 05.Domain_and_Item.t, avg 61µs/call # 8 times (149µs+296µs) by SimpleDB::Class::ResultSet::count at line 274 of ../lib/SimpleDB/Class/ResultSet.pm, avg 56µs/call # 3 times (54µs+108µs) by main::RUNTIME at line 135 of 05.Domain_and_Item.t, avg 54µs/call # 2 times (53µs+119µs) by main::RUNTIME at line 90 of 05.Domain_and_Item.t, avg 86µs/call # once (32µs+91µs) by SimpleDB::Class::Domain::insert at line 33 of 05.Domain_and_Item.t # once (35µs+79µs) by main::RUNTIME at line 39 of 05.Domain_and_Item.t # once (27µs+80µs) by main::RUNTIME at line 38 of 05.Domain_and_Item.t # once (31µs+65µs) by SimpleDB::Class::Domain::insert at line 44 of 05.Domain_and_Item.t # once (29µs+61µs) by SimpleDB::Class::Domain::insert at line 45 of 05.Domain_and_Item.t # once (24µs+54µs) by main::RUNTIME at line 125 of 05.Domain_and_Item.t # once (24µs+47µs) by main::RUNTIME at line 63 of 05.Domain_and_Item.t # once (21µs+47µs) by main::RUNTIME at line 54 of 05.Domain_and_Item.t # once (20µs+40µs) by main::RUNTIME at line 41 of 05.Domain_and_Item.t # once (18µs+42µs) by main::RUNTIME at line 64 of 05.Domain_and_Item.t sub DESTROY {
88 | 36 | 26µs |  |  | my $self = shift;
89 |  |  |  |  |
90 | 36 | 88µs |  |  | local $?;
91 |  |  |  |  |
92 |  |  |  |  | # spent 748µs (365+382) within Moose::Object::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Object.pm:94] which was called 36 times, avg 21µs/call: # 36 times (365µs+382µs) by Try::Tiny::try at line 76 of Try/Tiny.pm, avg 21µs/call Try::Tiny::try {
93 | 36 | 414µs | 72 | 382µs | $self->DEMOLISHALL(Devel::GlobalDestruction::in_global_destruction); # spent 323µs making 36 calls to Moose::Object::DEMOLISHALL, avg 9µs/call # spent 59µs making 36 calls to Devel::GlobalDestruction::in_global_destruction, avg 2µs/call
94 |  |  |  |  | }
95 |  |  |  |  | Try::Tiny::catch {
96 |  |  |  |  | # Without this, Perl will warn "\t(in cleanup)$@" because of some
97 |  |  |  |  | # bizarre fucked-up logic deep in the internals.
98 | 3 | 73µs | 2 | 44µs | # spent 27µs (9+17) within Moose::Object::BEGIN@98 which was called # once (9µs+17µs) by Moose::BEGIN@24 at line 98 no warnings 'misc'; # spent 27µs making 1 call to Moose::Object::BEGIN@98 # spent 17µs making 1 call to warnings::unimport
99 |  |  |  |  | die $_;
100 | 36 | 435µs | 72 | 1.67ms | }; # spent 1.42ms making 36 calls to Try::Tiny::try, avg 40µs/call # spent 242µs making 36 calls to Try::Tiny::catch, avg 7µs/call
101 |  |  |  |  |
102 | 36 | 155µs |  |  | return;
103 |  |  |  |  | }
104 |  |  |  |  |
105 |  |  |  |  | # support for UNIVERSAL::DOES ...
106 |  |  |  |  | # spent 47µs (46+1) within Moose::Object::BEGIN@106 which was called # once (46µs+1µs) by Moose::BEGIN@24 at line 113 BEGIN {
107 | 1 | 7µs | 1 | 1µs | my $does = UNIVERSAL->can("DOES") ? "SUPER::DOES" : "isa"; # spent 1µs making 1 call to UNIVERSAL::can
108 | 1 | 41µ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 |  |  |  |  | }';
113 | 1 | 94µs | 1 | 47µs | } # spent 47µs making 1 call to Moose::Object::BEGIN@106
114 |  |  |  |  |
115 |  |  |  |  | # new does() methods will be created
116 |  |  |  |  | # as appropiate see Moose::Meta::Role
117 |  |  |  |  | # spent 32µs (21+11) within Moose::Object::does which was called # once (21µs+11µs) by Moose::Meta::Attribute::does at line 37 of Moose/Meta/Attribute.pm sub does {
118 | 1 | 1µs |  |  | my ($self, $role_name) = @_;
119 | 1 | 2µs | 1 | 5µs | my $meta = Class::MOP::class_of($self); # spent 5µs making 1 call to Class::MOP::class_of
120 | 1 | 400ns |  |  | (defined $role_name)
121 |  |  |  |  | || $meta->throw_error("You must supply a role name to does()");
122 | 1 | 18µs | 1 | 6µs | return 1 if $meta->can('does_role') && $meta->does_role($role_name); # spent 6µs making 1 call to UNIVERSAL::can
123 | 1 | 4µs |  |  | return 0;
124 |  |  |  |  | }
125 |  |  |  |  |
126 |  |  |  |  | sub dump {
127 |  |  |  |  | my $self = shift;
128 |  |  |  |  | require Data::Dumper;
129 |  |  |  |  | local $Data::Dumper::Maxdepth = shift if @_;
130 |  |  |  |  | Data::Dumper::Dumper $self;
131 |  |  |  |  | }
132 |  |  |  |  |
133 | 1 | 4µs |  |  | 1;
134 |  |  |  |  |
135 |  |  |  |  | __END__
136 |  |  |  |  |
137 |  |  |  |  | =pod
138 |  |  |  |  |
139 |  |  |  |  | =head1 NAME
140 |  |  |  |  |
141 |  |  |  |  | Moose::Object - The base object for Moose
142 |  |  |  |  |
143 |  |  |  |  | =head1 DESCRIPTION
144 |  |  |  |  |
145 |  |  |  |  | This class is the default base class for all Moose-using classes. When
146 |  |  |  |  | you C<use Moose> in this class, your class will inherit from this
147 |  |  |  |  | class.
148 |  |  |  |  |
149 |  |  |  |  | It provides a default constructor and destructor, which run the
150 |  |  |  |  | C<BUILDALL> and C<DEMOLISHALL> methods respectively.
151 |  |  |  |  |
152 |  |  |  |  | You don't actually I<need> to inherit from this in order to use Moose,
153 |  |  |  |  | but it makes it easier to take advantage of all of Moose's features.
154 |  |  |  |  |
155 |  |  |  |  | =head1 METHODS
156 |  |  |  |  |
157 |  |  |  |  | =over 4
158 |  |  |  |  |
159 |  |  |  |  | =item B<< Moose::Object->new(%params) >>
160 |  |  |  |  |
161 |  |  |  |  | This method calls C<< $class->BUILDARGS(@_) >>, and then creates a new
162 |  |  |  |  | instance of the appropriate class. Once the instance is created, it
163 |  |  |  |  | calls C<< $instance->BUILDALL($params) >>.
164 |  |  |  |  |
165 |  |  |  |  | =item B<< Moose::Object->BUILDARGS(%params) >>
166 |  |  |  |  |
167 |  |  |  |  | The default implementation of this method accepts a hash or hash
168 |  |  |  |  | reference of named parameters. If it receives a single argument that
169 |  |  |  |  | I<isn't> a hash reference it throws an error.
170 |  |  |  |  |
171 |  |  |  |  | You can override this method in your class to handle other types of
172 |  |  |  |  | options passed to the constructor.
173 |  |  |  |  |
174 |  |  |  |  | This method should always return a hash reference of named options.
175 |  |  |  |  |
176 |  |  |  |  | =item B<< $object->BUILDALL($params) >>
177 |  |  |  |  |
178 |  |  |  |  | This method will call every C<BUILD> method in the inheritance
179 |  |  |  |  | hierarchy, starting with the most distant parent class and ending with
180 |  |  |  |  | the object's class.
181 |  |  |  |  |
182 |  |  |  |  | The C<BUILD> method will be passed the hash reference returned by
183 |  |  |  |  | C<BUILDARGS>.
184 |  |  |  |  |
185 |  |  |  |  | =item B<< $object->DEMOLISHALL >>
186 |  |  |  |  |
187 |  |  |  |  | This will call every C<DEMOLISH> method in the inheritance hierarchy,
188 |  |  |  |  | starting with the object's class and ending with the most distant
189 |  |  |  |  | parent. C<DEMOLISHALL> and C<DEMOLISH> will receive a boolean
190 |  |  |  |  | indicating whether or not we are currently in global destruction.
191 |  |  |  |  |
192 |  |  |  |  | =item B<< $object->does($role_name) >>
193 |  |  |  |  |
194 |  |  |  |  | This returns true if the object does the given role.
195 |  |  |  |  |
196 |  |  |  |  | =item B<DOES ($class_or_role_name)>
197 |  |  |  |  |
198 |  |  |  |  | This is a a Moose role-aware implementation of L<UNIVERSAL/DOES>.
199 |  |  |  |  |
200 |  |  |  |  | This is effectively the same as writing:
201 |  |  |  |  |
202 |  |  |  |  | $object->does($name) || $object->isa($name)
203 |  |  |  |  |
204 |  |  |  |  | This method will work with Perl 5.8, which did not implement
205 |  |  |  |  | C<UNIVERSAL::DOES>.
206 |  |  |  |  |
207 |  |  |  |  | =item B<< $object->dump($maxdepth) >>
208 |  |  |  |  |
209 |  |  |  |  | This is a handy utility for C<Data::Dumper>ing an object. By default,
210 |  |  |  |  | the maximum depth is 1, to avoid making a mess.
211 |  |  |  |  |
212 |  |  |  |  | =back
213 |  |  |  |  |
214 |  |  |  |  | =head1 BUGS
215 |  |  |  |  |
216 |  |  |  |  | See L<Moose/BUGS> for details on reporting bugs.
217 |  |  |  |  |
218 |  |  |  |  | =head1 AUTHOR
219 |  |  |  |  |
220 |  |  |  |  | Stevan Little E<lt>stevan@iinteractive.comE<gt>
221 |  |  |  |  |
222 |  |  |  |  | =head1 COPYRIGHT AND LICENSE
223 |  |  |  |  |
224 |  |  |  |  | Copyright 2006-2010 by Infinity Interactive, Inc.
225 |  |  |  |  |
226 |  |  |  |  | L<http://www.iinteractive.com>
227 |  |  |  |  |
228 |  |  |  |  | This library is free software; you can redistribute it and/or modify
229 |  |  |  |  | it under the same terms as Perl itself.
230 |  |  |  |  |
231 |  |  |  |  | =cut