← Index
NYTProf Performance Profile   « block view • line view • sub view »
For bin/pan_genome_post_analysis
  Run on Fri Mar 27 11:43:32 2015
Reported on Fri Mar 27 11:45:25 2015

Filename/Users/ap13/perl5/lib/perl5/darwin-2level/Class/MOP/Object.pm
StatementsExecuted 2431 statements in 6.10ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
534322.69ms3.32msClass::MOP::Object::::_is_compatible_withClass::MOP::Object::_is_compatible_with
408212.05ms4.71msClass::MOP::Object::::_can_be_made_compatible_withClass::MOP::Object::_can_be_made_compatible_with
11112µs25µsClass::MOP::Object::::BEGIN@4Class::MOP::Object::BEGIN@4
1119µs315µsClass::MOP::Object::::_newClass::MOP::Object::_new
1118µs12µsClass::MOP::Object::::BEGIN@9Class::MOP::Object::BEGIN@9
1118µs11µsClass::MOP::Object::::BEGIN@5Class::MOP::Object::BEGIN@5
1118µs29µsClass::MOP::Object::::BEGIN@7Class::MOP::Object::BEGIN@7
1117µs28µsClass::MOP::Object::::BEGIN@8Class::MOP::Object::BEGIN@8
0000s0sClass::MOP::Object::::_get_compatible_metaclassClass::MOP::Object::_get_compatible_metaclass
0000s0sClass::MOP::Object::::_get_compatible_metaclass_by_subclassingClass::MOP::Object::_get_compatible_metaclass_by_subclassing
0000s0sClass::MOP::Object::::_inline_throw_errorClass::MOP::Object::_inline_throw_error
0000s0sClass::MOP::Object::::_make_compatible_withClass::MOP::Object::_make_compatible_with
0000s0sClass::MOP::Object::::_real_ref_nameClass::MOP::Object::_real_ref_name
0000s0sClass::MOP::Object::::dumpClass::MOP::Object::dump
0000s0sClass::MOP::Object::::throw_errorClass::MOP::Object::throw_error
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Class::MOP::Object;
21700nsour $VERSION = '2.1403';
3
4230µs239µs
# spent 25µs (12+13) within Class::MOP::Object::BEGIN@4 which was called: # once (12µs+13µs) by parent::import at line 4
use strict;
# spent 25µs making 1 call to Class::MOP::Object::BEGIN@4 # spent 13µs making 1 call to strict::import
5222µs215µs
# spent 11µs (8+4) within Class::MOP::Object::BEGIN@5 which was called: # once (8µs+4µs) by parent::import at line 5
use warnings;
# spent 11µs making 1 call to Class::MOP::Object::BEGIN@5 # spent 4µs making 1 call to warnings::import
6
7224µs229µs
# spent 29µs (8+22) within Class::MOP::Object::BEGIN@7 which was called: # once (8µs+22µs) by parent::import at line 7
use parent 'Class::MOP::Mixin';
# spent 29µs making 1 call to Class::MOP::Object::BEGIN@7 # spent 22µs making 1 call to parent::import, recursion: max depth 2, sum of overlapping time 22µs
8222µs250µs
# spent 28µs (7+21) within Class::MOP::Object::BEGIN@8 which was called: # once (7µs+21µs) by parent::import at line 8
use Scalar::Util 'blessed';
# spent 28µs making 1 call to Class::MOP::Object::BEGIN@8 # spent 21µs making 1 call to Exporter::import
92528µs216µs
# spent 12µs (8+4) within Class::MOP::Object::BEGIN@9 which was called: # once (8µs+4µs) by parent::import at line 9
use Module::Runtime;
# spent 12µs making 1 call to Class::MOP::Object::BEGIN@9 # spent 4µs making 1 call to Module::Runtime::import
10
11# introspection
12
13sub throw_error {
14 shift->_throw_exception( Legacy => message => join('', @_) );
15}
16
17sub _inline_throw_error {
18 my ( $self, $message ) = @_;
19 return 'die Module::Runtime::use_module("Moose::Exception::Legacy")->new(message => ' . $message. ')';
20}
21
22
# spent 315µs (9+306) within Class::MOP::Object::_new which was called: # once (9µs+306µs) by Moose::Meta::TypeConstraint::Registry::new at line 29 of Moose/Meta/TypeConstraint/Registry.pm
sub _new {
23112µs2306µs Class::MOP::class_of(shift)->new_object(@_);
# spent 297µs making 1 call to Class::MOP::Class::new_object # spent 8µs making 1 call to Class::MOP::class_of
24}
25
26# RANT:
27# Cmon, how many times have you written
28# the following code while debugging:
29#
30# use Data::Dumper;
31# warn Dumper $obj;
32#
33# It can get seriously annoying, so why
34# not just do this ...
35sub dump {
36 my $self = shift;
37 require Data::Dumper;
38 local $Data::Dumper::Maxdepth = shift || 1;
39 Data::Dumper::Dumper $self;
40}
41
42sub _real_ref_name {
43 my $self = shift;
44 return blessed($self);
45}
46
47
# spent 3.32ms (2.69+627µs) within Class::MOP::Object::_is_compatible_with which was called 534 times, avg 6µs/call: # 408 times (2.15ms+515µs) by Class::MOP::Object::_can_be_made_compatible_with at line 56, avg 7µs/call # 108 times (471µs+99µs) by Class::MOP::Class::_single_metaclass_is_compatible at line 286 of Class/MOP/Class.pm, avg 5µs/call # 18 times (70µs+13µs) by Class::MOP::Class::_class_metaclass_is_compatible at line 252 of Class/MOP/Class.pm, avg 5µs/call
sub _is_compatible_with {
4816023.53ms my $self = shift;
49 my ($other_name) = @_;
50
51534627µs return $self->isa($other_name);
# spent 627µs making 534 calls to UNIVERSAL::isa, avg 1µs/call
52}
53
54
# spent 4.71ms (2.05+2.66) within Class::MOP::Object::_can_be_made_compatible_with which was called 408 times, avg 12µs/call: # 343 times (1.66ms+2.17ms) by Class::MOP::Class::_single_metaclass_can_be_made_compatible at line 356 of Class/MOP/Class.pm, avg 11µs/call # 65 times (395µs+499µs) by Class::MOP::Class::_class_metaclass_can_be_made_compatible at line 336 of Class/MOP/Class.pm, avg 14µs/call
sub _can_be_made_compatible_with {
558161.92ms my $self = shift;
564082.66ms return !$self->_is_compatible_with(@_)
# spent 2.66ms making 408 calls to Class::MOP::Object::_is_compatible_with, avg 7µs/call
57 && defined($self->_get_compatible_metaclass(@_));
58}
59
60sub _make_compatible_with {
61 my $self = shift;
62 my ($other_name) = @_;
63
64 my $new_metaclass = $self->_get_compatible_metaclass($other_name);
65
66 unless ( defined $new_metaclass ) {
67 $self->_throw_exception( CannotMakeMetaclassCompatible => superclass_name => $other_name,
68 class => $self,
69 );
70 }
71
72 # can't use rebless_instance here, because it might not be an actual
73 # subclass in the case of, e.g. moose role reconciliation
74 $new_metaclass->meta->_force_rebless_instance($self)
75 if blessed($self) ne $new_metaclass;
76
77 return $self;
78}
79
80sub _get_compatible_metaclass {
81 my $self = shift;
82 my ($other_name) = @_;
83
84 return $self->_get_compatible_metaclass_by_subclassing($other_name);
85}
86
87sub _get_compatible_metaclass_by_subclassing {
88 my $self = shift;
89 my ($other_name) = @_;
90 my $meta_name = blessed($self) ? $self->_real_ref_name : $self;
91
92 if ($meta_name->isa($other_name)) {
93 return $meta_name;
94 }
95 elsif ($other_name->isa($meta_name)) {
96 return $other_name;
97 }
98
99 return;
100}
101
10214µs1;
103
104# ABSTRACT: Base class for metaclasses
105
106__END__