Filename | /usr/share/perl5/DBIx/Class/Componentised.pm |
Statements | Executed 155 statements in 1.44ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
4 | 1 | 1 | 3.38ms | 4.04ms | inject_base | DBIx::Class::Componentised::
1 | 1 | 1 | 16µs | 27µs | BEGIN@4 | DBIx::Class::Componentised::
1 | 1 | 1 | 15µs | 193µs | BEGIN@11 | DBIx::Class::Componentised::
1 | 1 | 1 | 12µs | 3.21ms | BEGIN@7 | DBIx::Class::Componentised::
1 | 1 | 1 | 10µs | 15µs | BEGIN@8 | DBIx::Class::Componentised::
1 | 1 | 1 | 9µs | 15µs | BEGIN@30 | DBIx::Class::Componentised::
1 | 1 | 1 | 9µs | 17µs | BEGIN@5 | DBIx::Class::Componentised::
1 | 1 | 1 | 7µs | 48µs | BEGIN@10 | DBIx::Class::Componentised::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package # hide from PAUSE | ||||
2 | DBIx::Class::Componentised; | ||||
3 | |||||
4 | 2 | 42µs | 2 | 38µs | # spent 27µs (16+10) within DBIx::Class::Componentised::BEGIN@4 which was called:
# once (16µs+10µs) by base::import at line 4 # spent 27µs making 1 call to DBIx::Class::Componentised::BEGIN@4
# spent 10µs making 1 call to strict::import |
5 | 2 | 43µs | 2 | 25µs | # spent 17µs (9+8) within DBIx::Class::Componentised::BEGIN@5 which was called:
# once (9µs+8µs) by base::import at line 5 # spent 17µs making 1 call to DBIx::Class::Componentised::BEGIN@5
# spent 8µs making 1 call to warnings::import |
6 | |||||
7 | 2 | 189µs | 2 | 3.21ms | # spent 3.21ms (12µs+3.20) within DBIx::Class::Componentised::BEGIN@7 which was called:
# once (12µs+3.20ms) by base::import at line 7 # spent 3.21ms making 1 call to DBIx::Class::Componentised::BEGIN@7
# spent 3.20ms making 1 call to base::import, recursion: max depth 3, sum of overlapping time 3.20ms |
8 | 2 | 35µs | 2 | 21µs | # spent 15µs (10+6) within DBIx::Class::Componentised::BEGIN@8 which was called:
# once (10µs+6µs) by base::import at line 8 # spent 15µs making 1 call to DBIx::Class::Componentised::BEGIN@8
# spent 6µs making 1 call to mro::import |
9 | |||||
10 | 2 | 25µs | 2 | 89µs | # spent 48µs (7+41) within DBIx::Class::Componentised::BEGIN@10 which was called:
# once (7µs+41µs) by base::import at line 10 # spent 48µs making 1 call to DBIx::Class::Componentised::BEGIN@10
# spent 41µs making 1 call to DBIx::Class::Carp::import |
11 | 2 | 264µs | 2 | 370µs | # spent 193µs (15+178) within DBIx::Class::Componentised::BEGIN@11 which was called:
# once (15µs+178µs) by base::import at line 11 # spent 193µs making 1 call to DBIx::Class::Componentised::BEGIN@11
# spent 178µs making 1 call to namespace::clean::import |
12 | |||||
13 | # this warns of subtle bugs introduced by UTF8Columns hacky handling of store_column | ||||
14 | # if and only if it is placed before something overriding store_column | ||||
15 | # spent 4.04ms (3.38+660µs) within DBIx::Class::Componentised::inject_base which was called 4 times, avg 1.01ms/call:
# 4 times (3.38ms+660µs) by Class::C3::Componentised::_load_components at line 95 of Class/C3/Componentised.pm, avg 1.01ms/call | ||||
16 | 4 | 2µs | my $class = shift; | ||
17 | 4 | 5µs | my ($target, @complist) = @_; | ||
18 | |||||
19 | # we already did load the component | ||||
20 | 4 | 70µs | 8 | 19µs | my $keep_checking = ! ( # spent 19µs making 8 calls to UNIVERSAL::isa, avg 2µs/call |
21 | $target->isa ('DBIx::Class::UTF8Columns') | ||||
22 | || | ||||
23 | $target->isa ('DBIx::Class::ForceUTF8') | ||||
24 | ); | ||||
25 | |||||
26 | 4 | 1µs | my @target_isa; | ||
27 | |||||
28 | 4 | 4µs | while ($keep_checking && @complist) { | ||
29 | |||||
30 | 22 | 444µs | 2 | 21µs | # spent 15µs (9+6) within DBIx::Class::Componentised::BEGIN@30 which was called:
# once (9µs+6µs) by base::import at line 30 # spent 15µs making 1 call to DBIx::Class::Componentised::BEGIN@30
# spent 6µs making 1 call to strict::unimport |
31 | unless @target_isa; | ||||
32 | |||||
33 | 16 | 4µs | my $comp = pop @complist; | ||
34 | |||||
35 | # warn here on use of either component, as we have no access to ForceUTF8, | ||||
36 | # the author does not respond, and the Catalyst wiki used to recommend it | ||||
37 | 16 | 8µs | for (qw/DBIx::Class::UTF8Columns DBIx::Class::ForceUTF8/) { | ||
38 | 32 | 183µs | 32 | 52µs | if ($comp->isa ($_) ) { # spent 52µs making 32 calls to UNIVERSAL::isa, avg 2µs/call |
39 | $keep_checking = 0; # no use to check from this point on | ||||
40 | carp_once "Use of $_ is strongly discouraged. See documentation of DBIx::Class::UTF8Columns for more info\n" | ||||
41 | unless $ENV{DBIC_UTF8COLUMNS_OK}; | ||||
42 | last; | ||||
43 | } | ||||
44 | } | ||||
45 | |||||
46 | # something unset $keep_checking - we got a unicode mangler | ||||
47 | 16 | 2µs | if (! $keep_checking) { | ||
48 | |||||
49 | my $base_store_column = do { require DBIx::Class::Row; DBIx::Class::Row->can ('store_column') }; | ||||
50 | |||||
51 | my @broken; | ||||
52 | for my $existing_comp (@target_isa) { | ||||
53 | my $sc = $existing_comp->can ('store_column') | ||||
54 | or next; | ||||
55 | |||||
56 | if ($sc ne $base_store_column) { | ||||
57 | require B; | ||||
58 | my $definer = B::svref_2object($sc)->STASH->NAME; | ||||
59 | push @broken, ($definer eq $existing_comp) | ||||
60 | ? $existing_comp | ||||
61 | : "$existing_comp (via $definer)" | ||||
62 | ; | ||||
63 | } | ||||
64 | } | ||||
65 | |||||
66 | carp "Incorrect loading order of $comp by $target will affect other components overriding 'store_column' (" | ||||
67 | . join (', ', @broken) | ||||
68 | .'). Refer to the documentation of DBIx::Class::UTF8Columns for more info' | ||||
69 | if @broken; | ||||
70 | } | ||||
71 | |||||
72 | 16 | 12µs | unshift @target_isa, $comp; | ||
73 | } | ||||
74 | |||||
75 | 4 | 103µs | 4 | 64µs | $class->next::method(@_); # spent 64µs making 4 calls to next::method, avg 16µs/call |
76 | } | ||||
77 | |||||
78 | 1 | 2µs | 1 | 132µs | 1; # spent 132µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__ |