| Filename | /usr/local/lib/perl/5.10.1/Mouse.pm |
| Statements | Executed 403 statements in 3.14ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 6.54ms | 12.5ms | Mouse::BEGIN@4 |
| 1 | 1 | 1 | 3.40ms | 3.50ms | Mouse::BEGIN@14 |
| 1 | 1 | 1 | 3.26ms | 3.95ms | Mouse::BEGIN@18 |
| 1 | 1 | 1 | 2.32ms | 4.37ms | Mouse::BEGIN@16 |
| 1 | 1 | 1 | 1.01ms | 1.08ms | Mouse::BEGIN@15 |
| 45 | 45 | 8 | 496µs | 9.74ms | Mouse::has |
| 8 | 1 | 1 | 258µs | 1.62ms | Mouse::init_meta |
| 1 | 1 | 1 | 143µs | 215µs | Mouse::BEGIN@17 |
| 1 | 1 | 1 | 26µs | 26µs | Mouse::BEGIN@2 |
| 1 | 1 | 1 | 12µs | 12µs | Mouse::BEGIN@13 |
| 1 | 1 | 1 | 8µs | 11µs | MongoDB::Database::meta |
| 1 | 1 | 1 | 6µs | 9µs | MongoDB::Cursor::meta |
| 1 | 1 | 1 | 6µs | 9µs | MongoDB::Collection::meta |
| 1 | 1 | 1 | 6µs | 9µs | MongoDB::OID::meta |
| 1 | 1 | 1 | 6µs | 9µs | MongoDB::Connection::meta |
| 1 | 1 | 1 | 5µs | 5µs | Mouse::BEGIN@8 |
| 1 | 1 | 1 | 5µs | 5µs | Mouse::BEGIN@11 |
| 1 | 1 | 1 | 4µs | 4µs | Mouse::BEGIN@9 |
| 0 | 0 | 0 | 0s | 0s | MongoDB::GridFS::File::meta |
| 0 | 0 | 0 | 0s | 0s | MongoDB::GridFS::meta |
| 0 | 0 | 0 | 0s | 0s | MongoDB::Timestamp::meta |
| 0 | 0 | 0 | 0s | 0s | Mouse::__ANON__[:137] |
| 0 | 0 | 0 | 0s | 0s | Mouse::after |
| 0 | 0 | 0 | 0s | 0s | Mouse::around |
| 0 | 0 | 0 | 0s | 0s | Mouse::augment |
| 0 | 0 | 0 | 0s | 0s | Mouse::before |
| 0 | 0 | 0 | 0s | 0s | Mouse::extends |
| 0 | 0 | 0 | 0s | 0s | Mouse::inner |
| 0 | 0 | 0 | 0s | 0s | Mouse::override |
| 0 | 0 | 0 | 0s | 0s | Mouse::super |
| 0 | 0 | 0 | 0s | 0s | Mouse::with |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package Mouse; | ||||
| 2 | 3 | 50µs | 1 | 26µs | # spent 26µs within Mouse::BEGIN@2 which was called:
# once (26µs+0s) by MongoDB::Cursor::BEGIN@21 at line 2 # spent 26µs making 1 call to Mouse::BEGIN@2 |
| 3 | |||||
| 4 | 3 | 140µs | 2 | 12.5ms | # spent 12.5ms (6.54+5.93) within Mouse::BEGIN@4 which was called:
# once (6.54ms+5.93ms) by MongoDB::Cursor::BEGIN@21 at line 4 # spent 12.5ms making 1 call to Mouse::BEGIN@4
# spent 7µs making 1 call to Mouse::Exporter::import |
| 5 | |||||
| 6 | 1 | 800ns | our $VERSION = '0.91'; | ||
| 7 | |||||
| 8 | 3 | 36µs | 1 | 5µs | # spent 5µs within Mouse::BEGIN@8 which was called:
# once (5µs+0s) by MongoDB::Cursor::BEGIN@21 at line 8 # spent 5µs making 1 call to Mouse::BEGIN@8 |
| 9 | 3 | 28µs | 1 | 4µs | # spent 4µs within Mouse::BEGIN@9 which was called:
# once (4µs+0s) by MongoDB::Cursor::BEGIN@21 at line 9 # spent 4µs making 1 call to Mouse::BEGIN@9 |
| 10 | |||||
| 11 | 3 | 30µs | 1 | 5µs | # spent 5µs within Mouse::BEGIN@11 which was called:
# once (5µs+0s) by MongoDB::Cursor::BEGIN@21 at line 11 # spent 5µs making 1 call to Mouse::BEGIN@11 |
| 12 | |||||
| 13 | 3 | 37µs | 1 | 12µs | # spent 12µs within Mouse::BEGIN@13 which was called:
# once (12µs+0s) by MongoDB::Cursor::BEGIN@21 at line 13 # spent 12µs making 1 call to Mouse::BEGIN@13 |
| 14 | 3 | 109µs | 1 | 3.50ms | # spent 3.50ms (3.40+97µs) within Mouse::BEGIN@14 which was called:
# once (3.40ms+97µs) by MongoDB::Cursor::BEGIN@21 at line 14 # spent 3.50ms making 1 call to Mouse::BEGIN@14 |
| 15 | 3 | 110µs | 1 | 1.08ms | # spent 1.08ms (1.01+72µs) within Mouse::BEGIN@15 which was called:
# once (1.01ms+72µs) by MongoDB::Cursor::BEGIN@21 at line 15 # spent 1.08ms making 1 call to Mouse::BEGIN@15 |
| 16 | 3 | 119µs | 1 | 4.37ms | # spent 4.37ms (2.32+2.05) within Mouse::BEGIN@16 which was called:
# once (2.32ms+2.05ms) by MongoDB::Cursor::BEGIN@21 at line 16 # spent 4.37ms making 1 call to Mouse::BEGIN@16 |
| 17 | 3 | 111µs | 1 | 215µs | # spent 215µs (143+71) within Mouse::BEGIN@17 which was called:
# once (143µs+71µs) by MongoDB::Cursor::BEGIN@21 at line 17 # spent 215µs making 1 call to Mouse::BEGIN@17 |
| 18 | 3 | 914µs | 1 | 3.95ms | # spent 3.95ms (3.26+691µs) within Mouse::BEGIN@18 which was called:
# once (3.26ms+691µs) by MongoDB::Cursor::BEGIN@21 at line 18 # spent 3.95ms making 1 call to Mouse::BEGIN@18 |
| 19 | |||||
| 20 | 1 | 6µs | 1 | 146µs | Mouse::Exporter->setup_import_methods( # spent 146µs making 1 call to Mouse::Exporter::setup_import_methods |
| 21 | as_is => [qw( | ||||
| 22 | extends with | ||||
| 23 | has | ||||
| 24 | before after around | ||||
| 25 | override super | ||||
| 26 | augment inner | ||||
| 27 | ), | ||||
| 28 | \&Scalar::Util::blessed, | ||||
| 29 | \&Carp::confess, | ||||
| 30 | ], | ||||
| 31 | ); | ||||
| 32 | |||||
| 33 | |||||
| 34 | sub extends { | ||||
| 35 | Mouse::Meta::Class->initialize(scalar caller)->superclasses(@_); | ||||
| 36 | return; | ||||
| 37 | } | ||||
| 38 | |||||
| 39 | sub with { | ||||
| 40 | Mouse::Util::apply_all_roles(scalar(caller), @_); | ||||
| 41 | return; | ||||
| 42 | } | ||||
| 43 | |||||
| 44 | # spent 9.74ms (496µs+9.25) within Mouse::has which was called 45 times, avg 216µs/call:
# once (10µs+487µs) by MongoDB::Database::BEGIN@23 at line 84 of MongoDB/GridFS.pm
# once (11µs+396µs) by MongoDB::Connection::BEGIN@23 at line 94 of MongoDB/Cursor.pm
# once (22µs+346µs) by MongoDB::Connection::BEGIN@23 at line 87 of MongoDB/Cursor.pm
# once (26µs+296µs) by MongoDB::Database::BEGIN@23 at line 59 of MongoDB/GridFS.pm
# once (10µs+260µs) by MongoDB::Database::BEGIN@23 at line 105 of MongoDB/GridFS.pm
# once (13µs+204µs) by MongoDB::GridFS::BEGIN@23 at line 39 of MongoDB/GridFS/File.pm
# once (13µs+202µs) by MongoDB::BEGIN@26 at line 95 of MongoDB/Connection.pm
# once (12µs+202µs) by MongoDB::Connection::BEGIN@2 at line 25 of MongoDB/Database.pm
# once (12µs+201µs) by Mouse::Util::_try_load_one_class at line 51 of MongoDB/Collection.pm
# once (12µs+197µs) by MongoDB::Connection::BEGIN@2.4 at line 65 of MongoDB/OID.pm
# once (12µs+196µs) by MongoDB::Connection::BEGIN@2.5 at line 45 of MongoDB/Timestamp.pm
# once (10µs+198µs) by MongoDB::Connection::BEGIN@23 at line 191 of MongoDB/Cursor.pm
# once (10µs+195µs) by MongoDB::BEGIN@26 at line 200 of MongoDB/Connection.pm
# once (10µs+194µs) by MongoDB::BEGIN@26 at line 345 of MongoDB/Connection.pm
# once (10µs+191µs) by MongoDB::Connection::BEGIN@23 at line 100 of MongoDB/Cursor.pm
# once (10µs+190µs) by MongoDB::Database::BEGIN@23 at line 71 of MongoDB/GridFS.pm
# once (10µs+190µs) by MongoDB::Connection::BEGIN@23 at line 111 of MongoDB/Cursor.pm
# once (10µs+190µs) by MongoDB::BEGIN@26 at line 269 of MongoDB/Connection.pm
# once (10µs+190µs) by MongoDB::BEGIN@26 at line 187 of MongoDB/Connection.pm
# once (10µs+189µs) by MongoDB::Connection::BEGIN@23 at line 197 of MongoDB/Cursor.pm
# once (10µs+189µs) by MongoDB::BEGIN@26 at line 358 of MongoDB/Connection.pm
# once (10µs+187µs) by MongoDB::Connection::BEGIN@2 at line 57 of MongoDB/Database.pm
# once (11µs+186µs) by MongoDB::GridFS::BEGIN@23 at line 53 of MongoDB/GridFS/File.pm
# once (10µs+186µs) by Mouse::Util::_try_load_one_class at line 65 of MongoDB/Collection.pm
# once (10µs+186µs) by MongoDB::Connection::BEGIN@23 at line 117 of MongoDB/Cursor.pm
# once (10µs+185µs) by MongoDB::BEGIN@26 at line 310 of MongoDB/Connection.pm
# once (10µs+185µs) by Mouse::Util::_try_load_one_class at line 78 of MongoDB/Collection.pm
# once (10µs+185µs) by MongoDB::BEGIN@26 at line 254 of MongoDB/Connection.pm
# once (11µs+184µs) by MongoDB::BEGIN@26 at line 141 of MongoDB/Connection.pm
# once (10µs+184µs) by MongoDB::Connection::BEGIN@2.5 at line 57 of MongoDB/Timestamp.pm
# once (10µs+184µs) by MongoDB::BEGIN@26 at line 158 of MongoDB/Connection.pm
# once (10µs+184µs) by MongoDB::BEGIN@26 at line 227 of MongoDB/Connection.pm
# once (10µs+184µs) by MongoDB::BEGIN@26 at line 164 of MongoDB/Connection.pm
# once (10µs+183µs) by MongoDB::BEGIN@26 at line 214 of MongoDB/Connection.pm
# once (10µs+183µs) by MongoDB::Connection::BEGIN@23 at line 144 of MongoDB/Cursor.pm
# once (10µs+183µs) by MongoDB::BEGIN@26 at line 241 of MongoDB/Connection.pm
# once (10µs+183µs) by MongoDB::Connection::BEGIN@23 at line 124 of MongoDB/Cursor.pm
# once (10µs+182µs) by MongoDB::Connection::BEGIN@23 at line 165 of MongoDB/Cursor.pm
# once (10µs+182µs) by MongoDB::Connection::BEGIN@23 at line 182 of MongoDB/Cursor.pm
# once (11µs+181µs) by MongoDB::BEGIN@26 at line 171 of MongoDB/Connection.pm
# once (10µs+182µs) by MongoDB::BEGIN@26 at line 176 of MongoDB/Connection.pm
# once (10µs+181µs) by MongoDB::BEGIN@26 at line 182 of MongoDB/Connection.pm
# once (10µs+180µs) by MongoDB::BEGIN@26 at line 367 of MongoDB/Connection.pm
# once (10µs+153µs) by MongoDB::Connection::BEGIN@23 at line 106 of MongoDB/Cursor.pm
# once (10µs+151µs) by MongoDB::BEGIN@26 at line 361 of MongoDB/Connection.pm | ||||
| 45 | 45 | 104µs | 45 | 149µs | my $meta = Mouse::Meta::Class->initialize(scalar caller); # spent 149µs making 45 calls to Mouse::Meta::Module::initialize, avg 3µs/call |
| 46 | 45 | 24µs | my $name = shift; | ||
| 47 | |||||
| 48 | 45 | 26µs | $meta->throw_error(q{Usage: has 'name' => ( key => value, ... )}) | ||
| 49 | if @_ % 2; # odd number of arguments | ||||
| 50 | |||||
| 51 | 45 | 42µs | for my $n(ref($name) ? @{$name} : $name){ | ||
| 52 | 45 | 140µs | 45 | 9.10ms | $meta->add_attribute($n => @_); # spent 9.10ms making 45 calls to Mouse::Meta::Class::add_attribute, avg 202µs/call |
| 53 | } | ||||
| 54 | 45 | 156µs | return; | ||
| 55 | } | ||||
| 56 | |||||
| 57 | sub before { | ||||
| 58 | my $meta = Mouse::Meta::Class->initialize(scalar caller); | ||||
| 59 | my $code = pop; | ||||
| 60 | for my $name($meta->_collect_methods(@_)) { | ||||
| 61 | $meta->add_before_method_modifier($name => $code); | ||||
| 62 | } | ||||
| 63 | return; | ||||
| 64 | 1 | 3µs | } | ||
| 65 | 1 | 500ns | |||
| 66 | 1 | 576µs | 1 | 570µs | sub after { # spent 570µs making 1 call to XSLoader::load |
| 67 | 1 | 5µs | 1 | 65µs | my $meta = Mouse::Meta::Class->initialize(scalar caller); # spent 65µs making 1 call to Mouse::Exporter::do_import |
| 68 | 1 | 4µs | 1 | 42µs | my $code = pop; # spent 42µs making 1 call to Mouse::Exporter::do_import |
| 69 | 1 | 4µs | 1 | 45µs | for my $name($meta->_collect_methods(@_)) { # spent 45µs making 1 call to Mouse::Exporter::do_import |
| 70 | 1 | 10µs | $meta->add_after_method_modifier($name => $code); | ||
| 71 | } | ||||
| 72 | return; | ||||
| 73 | } | ||||
| 74 | |||||
| 75 | sub around { | ||||
| 76 | my $meta = Mouse::Meta::Class->initialize(scalar caller); | ||||
| 77 | my $code = pop; | ||||
| 78 | for my $name($meta->_collect_methods(@_)) { | ||||
| 79 | $meta->add_around_method_modifier($name => $code); | ||||
| 80 | } | ||||
| 81 | return; | ||||
| 82 | } | ||||
| 83 | |||||
| 84 | 1 | 200ns | our $SUPER_PACKAGE; | ||
| 85 | 1 | 100ns | our $SUPER_BODY; | ||
| 86 | 1 | 300ns | our @SUPER_ARGS; | ||
| 87 | |||||
| 88 | sub super { | ||||
| 89 | # This check avoids a recursion loop - see | ||||
| 90 | # t/100_bugs/020_super_recursion.t | ||||
| 91 | return if defined $SUPER_PACKAGE && $SUPER_PACKAGE ne caller(); | ||||
| 92 | return if !defined $SUPER_BODY; | ||||
| 93 | $SUPER_BODY->(@SUPER_ARGS); | ||||
| 94 | } | ||||
| 95 | |||||
| 96 | sub override { | ||||
| 97 | # my($name, $method) = @_; | ||||
| 98 | Mouse::Meta::Class->initialize(scalar caller)->add_override_method_modifier(@_); | ||||
| 99 | } | ||||
| 100 | |||||
| 101 | 1 | 200ns | our %INNER_BODY; | ||
| 102 | 1 | 100ns | our %INNER_ARGS; | ||
| 103 | |||||
| 104 | sub inner { | ||||
| 105 | my $pkg = caller(); | ||||
| 106 | if ( my $body = $INNER_BODY{$pkg} ) { | ||||
| 107 | my $args = $INNER_ARGS{$pkg}; | ||||
| 108 | local $INNER_ARGS{$pkg}; | ||||
| 109 | local $INNER_BODY{$pkg}; | ||||
| 110 | return $body->(@{$args}); | ||||
| 111 | } | ||||
| 112 | else { | ||||
| 113 | return; | ||||
| 114 | } | ||||
| 115 | } | ||||
| 116 | |||||
| 117 | sub augment { | ||||
| 118 | #my($name, $method) = @_; | ||||
| 119 | Mouse::Meta::Class->initialize(scalar caller)->add_augment_method_modifier(@_); | ||||
| 120 | return; | ||||
| 121 | } | ||||
| 122 | |||||
| 123 | # spent 1.62ms (258µs+1.36) within Mouse::init_meta which was called 8 times, avg 203µs/call:
# 8 times (258µs+1.36ms) by Mouse::Exporter::do_import at line 180 of Mouse/Exporter.pm, avg 203µs/call | ||||
| 124 | 8 | 2µs | shift; | ||
| 125 | 8 | 15µs | my %args = @_; | ||
| 126 | |||||
| 127 | 8 | 6µs | my $class = $args{for_class} | ||
| 128 | or confess("Cannot call init_meta without specifying a for_class"); | ||||
| 129 | |||||
| 130 | 8 | 5µs | my $base_class = $args{base_class} || 'Mouse::Object'; | ||
| 131 | 8 | 5µs | my $metaclass = $args{metaclass} || 'Mouse::Meta::Class'; | ||
| 132 | |||||
| 133 | 8 | 23µs | 8 | 204µs | my $meta = $metaclass->initialize($class); # spent 204µs making 8 calls to Mouse::Meta::Module::initialize, avg 26µs/call |
| 134 | |||||
| 135 | # spent 9µs (6+3) within MongoDB::Cursor::meta which was called:
# once (6µs+3µs) by MongoDB::Connection::BEGIN@23 at line 488 of MongoDB/Cursor.pm
# spent 9µs (6+3) within MongoDB::OID::meta which was called:
# once (6µs+3µs) by MongoDB::Connection::BEGIN@2.4 at line 144 of MongoDB/OID.pm
# spent 9µs (6+3) within MongoDB::Connection::meta which was called:
# once (6µs+3µs) by MongoDB::BEGIN@26 at line 738 of MongoDB/Connection.pm
# spent 11µs (8+3) within MongoDB::Database::meta which was called:
# once (8µs+3µs) by MongoDB::Connection::BEGIN@2 at line 329 of MongoDB/Database.pm
# spent 9µs (6+3) within MongoDB::Collection::meta which was called:
# once (6µs+3µs) by Mouse::Util::_try_load_one_class at line 724 of MongoDB/Collection.pm | ||||
| 136 | 5 | 28µs | 5 | 17µs | return $metaclass->initialize(ref($_[0]) || $_[0]); # spent 17µs making 5 calls to Mouse::Meta::Module::initialize, avg 3µs/call |
| 137 | 8 | 149µs | 8 | 77µs | }); # spent 77µs making 8 calls to Mouse::Meta::Module::add_method, avg 10µs/call |
| 138 | |||||
| 139 | 8 | 40µs | 16 | 432µs | $meta->superclasses($base_class) # spent 432µs making 16 calls to Mouse::Meta::Class::superclasses, avg 27µs/call |
| 140 | unless $meta->superclasses; | ||||
| 141 | |||||
| 142 | # make a class type for each Mouse class | ||||
| 143 | 8 | 46µs | 16 | 651µs | Mouse::Util::TypeConstraints::class_type($class) # spent 551µs making 6 calls to Mouse::Util::TypeConstraints::class_type, avg 92µs/call
# spent 96µs making 8 calls to Mouse::Util::TypeConstraints::find_type_constraint, avg 12µs/call
# spent 5µs making 2 calls to Mouse::Meta::TypeConstraint::_identity, avg 2µs/call |
| 144 | unless Mouse::Util::TypeConstraints::find_type_constraint($class); | ||||
| 145 | |||||
| 146 | 8 | 25µs | return $meta; | ||
| 147 | } | ||||
| 148 | |||||
| 149 | 1 | 9µs | 1; | ||
| 150 | __END__ |