Filename | /2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/MooseX/Traits/Util.pm |
Statements | Executed 41 statements in 620µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 77µs | 641µs | transform_trait | MooseX::Traits::Util::
1 | 1 | 1 | 76µs | 10.9ms | new_class_with_traits | MooseX::Traits::Util::
1 | 1 | 1 | 61µs | 1.21ms | resolve_traits | MooseX::Traits::Util::
3 | 3 | 1 | 52µs | 1.45ms | check_class | MooseX::Traits::Util::
1 | 1 | 1 | 17µs | 22µs | BEGIN@2 | MooseX::Traits::Util::
1 | 1 | 1 | 11µs | 267µs | BEGIN@5 | MooseX::Traits::Util::
1 | 1 | 1 | 9µs | 23µs | BEGIN@3 | MooseX::Traits::Util::
1 | 1 | 1 | 8µs | 46µs | BEGIN@9 | MooseX::Traits::Util::
1 | 1 | 1 | 5µs | 5µs | CORE:match (opcode) | MooseX::Traits::Util::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package MooseX::Traits::Util; | ||||
2 | 3 | 24µs | 2 | 26µs | # spent 22µs (17+5) within MooseX::Traits::Util::BEGIN@2 which was called:
# once (17µs+5µs) by MooseX::Traits::BEGIN@4 at line 2 # spent 22µs making 1 call to MooseX::Traits::Util::BEGIN@2
# spent 5µs making 1 call to strict::import |
3 | 3 | 36µs | 2 | 38µs | # spent 23µs (9+15) within MooseX::Traits::Util::BEGIN@3 which was called:
# once (9µs+15µs) by MooseX::Traits::BEGIN@4 at line 3 # spent 23µs making 1 call to MooseX::Traits::Util::BEGIN@3
# spent 15µs making 1 call to warnings::import |
4 | |||||
5 | 1 | 257µs | # spent 267µs (11+257) within MooseX::Traits::Util::BEGIN@5 which was called:
# once (11µs+257µs) by MooseX::Traits::BEGIN@4 at line 7 # spent 257µs making 1 call to Sub::Exporter::__ANON__[Sub/Exporter.pm:756] | ||
6 | exports => ['new_class_with_traits'], | ||||
7 | 3 | 28µs | 1 | 267µs | }; # spent 267µs making 1 call to MooseX::Traits::Util::BEGIN@5 |
8 | |||||
9 | 3 | 310µs | 2 | 84µs | # spent 46µs (8+38) within MooseX::Traits::Util::BEGIN@9 which was called:
# once (8µs+38µs) by MooseX::Traits::BEGIN@4 at line 9 # spent 46µs making 1 call to MooseX::Traits::Util::BEGIN@9
# spent 38µs making 1 call to Exporter::import |
10 | |||||
11 | # note: "$class" throughout is "class name" or "instance of class | ||||
12 | # name" | ||||
13 | |||||
14 | # spent 1.45ms (52µs+1.40) within MooseX::Traits::Util::check_class which was called 3 times, avg 483µs/call:
# once (34µs+646µs) by MooseX::Traits::Util::new_class_with_traits at line 63
# once (9µs+380µs) by MooseX::Traits::Util::resolve_traits at line 43
# once (9µs+371µs) by MooseX::Traits::Util::transform_trait at line 25 | ||||
15 | 6 | 58µs | my $class = shift; | ||
16 | |||||
17 | 3 | 1.40ms | confess "We can't interact with traits for a class ($class) ". # spent 1.40ms making 3 calls to Moose::Object::does, avg 466µs/call | ||
18 | "that does not do MooseX::Traits" unless $class->does('MooseX::Traits'); | ||||
19 | } | ||||
20 | |||||
21 | # spent 641µs (77+564) within MooseX::Traits::Util::transform_trait which was called:
# once (77µs+564µs) by MooseX::Traits::Util::resolve_traits at line 48 | ||||
22 | 7 | 66µs | my ($class, $name) = @_; | ||
23 | 1 | 5µs | return $1 if $name =~ /^[+](.+)$/; # spent 5µs making 1 call to MooseX::Traits::Util::CORE:match | ||
24 | |||||
25 | 1 | 380µs | check_class($class); # spent 380µs making 1 call to MooseX::Traits::Util::check_class | ||
26 | |||||
27 | 2 | 173µs | my $namespace = $class->meta->find_attribute_by_name('_trait_namespace'); # spent 134µs making 1 call to Class::MOP::Class::find_attribute_by_name
# spent 39µs making 1 call to Tapper::MCP::Scheduler::Algorithm::meta | ||
28 | my $base; | ||||
29 | 1 | 6µs | if($namespace->has_default){ # spent 6µs making 1 call to Class::MOP::Mixin::AttributeCore::has_default | ||
30 | $base = $namespace->default; | ||||
31 | if(ref $base eq 'CODE'){ | ||||
32 | $base = $base->(); | ||||
33 | } | ||||
34 | } | ||||
35 | |||||
36 | return $name unless $base; | ||||
37 | return join '::', $base, $name; | ||||
38 | } | ||||
39 | |||||
40 | # spent 1.21ms (61µs+1.15) within MooseX::Traits::Util::resolve_traits which was called:
# once (61µs+1.15ms) by MooseX::Traits::Util::new_class_with_traits at line 66 | ||||
41 | 8 | 37µs | my ($class, @traits) = @_; | ||
42 | |||||
43 | 1 | 389µs | check_class($class); # spent 389µs making 1 call to MooseX::Traits::Util::check_class | ||
44 | |||||
45 | return map { | ||||
46 | my $orig = $_; | ||||
47 | if(!ref $orig){ | ||||
48 | 1 | 641µs | my $transformed = transform_trait($class, $orig); # spent 641µs making 1 call to MooseX::Traits::Util::transform_trait | ||
49 | 1 | 8µs | Class::MOP::load_class($transformed); # spent 8µs making 1 call to Class::MOP::load_class | ||
50 | $transformed; | ||||
51 | } | ||||
52 | else { | ||||
53 | $orig; | ||||
54 | } | ||||
55 | } @traits; | ||||
56 | } | ||||
57 | |||||
58 | 1 | 300ns | my $anon_serial = 0; | ||
59 | |||||
60 | # spent 10.9ms (76µs+10.9) within MooseX::Traits::Util::new_class_with_traits which was called:
# once (76µs+10.9ms) by MooseX::Traits::with_traits at line 24 of MooseX/Traits.pm | ||||
61 | 6 | 58µs | my ($class, @traits) = @_; | ||
62 | |||||
63 | 1 | 680µs | check_class($class); # spent 680µs making 1 call to MooseX::Traits::Util::check_class | ||
64 | |||||
65 | my $meta; | ||||
66 | 1 | 1.21ms | @traits = resolve_traits($class, @traits); # spent 1.21ms making 1 call to MooseX::Traits::Util::resolve_traits | ||
67 | 4 | 8.97ms | if (@traits) { # spent 8.91ms making 1 call to Moose::Meta::Class::create
# spent 60µs making 2 calls to Tapper::MCP::Scheduler::Algorithm::meta, avg 30µs/call
# spent 2µs making 1 call to Class::MOP::Package::name | ||
68 | $meta = $class->meta->create( | ||||
69 | join(q{::} => 'MooseX::Traits::__ANON__::SERIAL', ++$anon_serial), | ||||
70 | superclasses => [ $class->meta->name ], | ||||
71 | roles => \@traits, | ||||
72 | cache => 1, | ||||
73 | ); | ||||
74 | } | ||||
75 | |||||
76 | # if no traits were given just return the class meta | ||||
77 | return $meta ? $meta : $class->meta; | ||||
78 | } | ||||
79 | |||||
80 | 1 | 3µs | 1; | ||
# spent 5µs within MooseX::Traits::Util::CORE:match which was called:
# once (5µs+0s) by MooseX::Traits::Util::transform_trait at line 23 |