| Filename | /home/doy/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/KiokuDB/TypeMap/Resolver.pm |
| Statements | Executed 20 statements in 3.33ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 9.94ms | 496ms | KiokuDB::TypeMap::Resolver::BEGIN@9 |
| 1 | 1 | 1 | 73µs | 21.5ms | KiokuDB::TypeMap::Resolver::BEGIN@4 |
| 1 | 1 | 1 | 46µs | 1.61ms | KiokuDB::TypeMap::Resolver::BEGIN@11 |
| 1 | 1 | 1 | 42µs | 205µs | KiokuDB::TypeMap::Resolver::BEGIN@6 |
| 1 | 1 | 1 | 25µs | 25µs | KiokuDB::TypeMap::Resolver::BEGIN@8 |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::__ANON__[:21] |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::__ANON__[:27] |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::clear_compiled |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::collapse_method |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::compile_entry |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::expand_method |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::find_or_resolve |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::id_method |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::refresh_method |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::register_compiled |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::resolve |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::resolve_fallback |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::resolve_fallback_with_meta |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::resolve_fallback_without_meta |
| 0 | 0 | 0 | 0s | 0s | KiokuDB::TypeMap::Resolver::resolved |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | #!/usr/bin/perl | ||||
| 2 | |||||
| 3 | package KiokuDB::TypeMap::Resolver; | ||||
| 4 | 3 | 169µs | 2 | 42.9ms | # spent 21.5ms (73µs+21.4) within KiokuDB::TypeMap::Resolver::BEGIN@4 which was called:
# once (73µs+21.4ms) by KiokuDB::BEGIN@16 at line 4 # spent 21.5ms making 1 call to KiokuDB::TypeMap::Resolver::BEGIN@4
# spent 21.4ms making 1 call to Moose::Exporter::__ANON__[Moose/Exporter.pm:456] |
| 5 | |||||
| 6 | 3 | 106µs | 2 | 369µs | # spent 205µs (42+164) within KiokuDB::TypeMap::Resolver::BEGIN@6 which was called:
# once (42µs+164µs) by KiokuDB::BEGIN@16 at line 6 # spent 205µs making 1 call to KiokuDB::TypeMap::Resolver::BEGIN@6
# spent 164µs making 1 call to Exporter::import |
| 7 | |||||
| 8 | 3 | 88µs | 1 | 25µs | # spent 25µs within KiokuDB::TypeMap::Resolver::BEGIN@8 which was called:
# once (25µs+0s) by KiokuDB::BEGIN@16 at line 8 # spent 25µs making 1 call to KiokuDB::TypeMap::Resolver::BEGIN@8 |
| 9 | 3 | 709µs | 1 | 496ms | # spent 496ms (9.94+487) within KiokuDB::TypeMap::Resolver::BEGIN@9 which was called:
# once (9.94ms+487ms) by KiokuDB::BEGIN@16 at line 9 # spent 496ms making 1 call to KiokuDB::TypeMap::Resolver::BEGIN@9 |
| 10 | |||||
| 11 | 3 | 2.06ms | 2 | 3.18ms | # spent 1.61ms (46µs+1.57) within KiokuDB::TypeMap::Resolver::BEGIN@11 which was called:
# once (46µs+1.57ms) by KiokuDB::BEGIN@16 at line 11 # spent 1.61ms making 1 call to KiokuDB::TypeMap::Resolver::BEGIN@11
# spent 1.57ms making 1 call to namespace::clean::import |
| 12 | |||||
| 13 | 1 | 14µs | 1 | 7.94ms | has typemap => ( # spent 7.94ms making 1 call to Moose::has |
| 14 | does => "KiokuDB::Role::TypeMap", | ||||
| 15 | is => "ro", | ||||
| 16 | ); | ||||
| 17 | |||||
| 18 | has _compiled => ( | ||||
| 19 | isa => "HashRef", | ||||
| 20 | is => "ro", | ||||
| 21 | default => sub { return {} }, | ||||
| 22 | 1 | 22µs | 1 | 7.98ms | ); # spent 7.98ms making 1 call to Moose::has |
| 23 | |||||
| 24 | has fallback_entry => ( | ||||
| 25 | does => "KiokuDB::TypeMap::Entry", | ||||
| 26 | is => "ro", | ||||
| 27 | default => sub { KiokuDB::TypeMap::Entry::MOP->new }, | ||||
| 28 | 1 | 22µs | 1 | 7.98ms | ); # spent 7.98ms making 1 call to Moose::has |
| 29 | |||||
| 30 | sub clear_compiled { | ||||
| 31 | my $self = shift; | ||||
| 32 | |||||
| 33 | %{ $self->_compiled } = (); | ||||
| 34 | } | ||||
| 35 | |||||
| 36 | sub resolved { | ||||
| 37 | my ( $self, $class ) = @_; | ||||
| 38 | |||||
| 39 | exists $self->_compiled->{$class}; | ||||
| 40 | } | ||||
| 41 | |||||
| 42 | sub collapse_method { | ||||
| 43 | my ( $self, $class ) = @_; | ||||
| 44 | |||||
| 45 | return $self->find_or_resolve($class)->collapse_method; | ||||
| 46 | } | ||||
| 47 | |||||
| 48 | sub expand_method { | ||||
| 49 | my ( $self, $class ) = @_; | ||||
| 50 | |||||
| 51 | return $self->find_or_resolve($class)->expand_method; | ||||
| 52 | } | ||||
| 53 | |||||
| 54 | sub refresh_method { | ||||
| 55 | my ( $self, $class ) = @_; | ||||
| 56 | |||||
| 57 | return $self->find_or_resolve($class)->refresh_method; | ||||
| 58 | } | ||||
| 59 | |||||
| 60 | sub id_method { | ||||
| 61 | my ( $self, $class ) = @_; | ||||
| 62 | |||||
| 63 | return $self->find_or_resolve($class)->id_method; | ||||
| 64 | } | ||||
| 65 | |||||
| 66 | sub compile_entry { | ||||
| 67 | my ( $self, $class, $entry ) = @_; | ||||
| 68 | |||||
| 69 | return $self->register_compiled( $class, $entry->compile($class, $self) ); | ||||
| 70 | } | ||||
| 71 | |||||
| 72 | sub register_compiled { | ||||
| 73 | my ( $self, $class, $compiled ) = @_; | ||||
| 74 | |||||
| 75 | return ( $self->_compiled->{$class} = $compiled ); | ||||
| 76 | } | ||||
| 77 | |||||
| 78 | sub find_or_resolve { | ||||
| 79 | my ( $self, $class ) = @_; | ||||
| 80 | |||||
| 81 | return ( $self->_compiled->{$class} || $self->resolve($class) ); | ||||
| 82 | } | ||||
| 83 | |||||
| 84 | sub resolve { | ||||
| 85 | my ( $self, $class ) = @_; | ||||
| 86 | |||||
| 87 | if ( my $entry = $self->typemap->resolve($class) ) { | ||||
| 88 | return $self->compile_entry( $class, $entry ); | ||||
| 89 | } else { | ||||
| 90 | return $self->resolve_fallback($class); | ||||
| 91 | } | ||||
| 92 | } | ||||
| 93 | |||||
| 94 | sub resolve_fallback { | ||||
| 95 | my ( $self, $class ) = @_; | ||||
| 96 | |||||
| 97 | if ( my $meta = Class::MOP::get_metaclass_by_name($class) ) { | ||||
| 98 | return $self->resolve_fallback_with_meta($class, $meta); | ||||
| 99 | } else { | ||||
| 100 | return $self->resolve_fallback_without_meta($class); | ||||
| 101 | } | ||||
| 102 | } | ||||
| 103 | |||||
| 104 | sub resolve_fallback_with_meta { | ||||
| 105 | my ( $self, $class, $meta ) = @_; | ||||
| 106 | |||||
| 107 | # FIXME only allow with Storage? | ||||
| 108 | return $self->compile_entry( $class => $self->fallback_entry ); | ||||
| 109 | } | ||||
| 110 | |||||
| 111 | sub resolve_fallback_without_meta { | ||||
| 112 | my ( $self, $class ) = @_; | ||||
| 113 | |||||
| 114 | croak "$class has no metaclass, please provide a typemap entry or add to the allowed classes"; | ||||
| 115 | } | ||||
| 116 | |||||
| 117 | 1 | 26µs | 2 | 16.6ms | __PACKAGE__->meta->make_immutable; # spent 16.5ms making 1 call to Class::MOP::Class::make_immutable
# spent 101µs making 1 call to KiokuDB::TypeMap::Resolver::meta |
| 118 | |||||
| 119 | 1 | 64µs | __PACKAGE__ | ||
| 120 | |||||
| 121 | 1 | 49µs | 1 | 4.58ms | __END__ # spent 4.58ms making 1 call to B::Hooks::EndOfScope::__ANON__[B/Hooks/EndOfScope.pm:26] |