← Index
NYTProf Performance Profile   « block view • line view • sub view »
For 05.Domain_and_Item.t
  Run on Tue May 4 17:21:41 2010
Reported on Tue May 4 17:22:32 2010

File /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Meta/Role/Attribute.pm
Statements Executed 460
Statement Execution Time 1.80ms
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3711349µs14.6msMoose::Meta::Role::Attribute::::attribute_for_classMoose::Meta::Role::Attribute::attribute_for_class
4422326µs326µsMoose::Meta::Role::Attribute::::newMoose::Meta::Role::Attribute::new
4411287µs361µsMoose::Meta::Role::Attribute::::attach_to_roleMoose::Meta::Role::Attribute::attach_to_role
3011229µs495µsMoose::Meta::Role::Attribute::::cloneMoose::Meta::Role::Attribute::clone
11115µs17µsMoose::Meta::Role::Attribute::::BEGIN@3Moose::Meta::Role::Attribute::BEGIN@3
1119µs33µsMoose::Meta::Role::Attribute::::BEGIN@7Moose::Meta::Role::Attribute::BEGIN@7
1117µs50µsMoose::Meta::Role::Attribute::::BEGIN@13Moose::Meta::Role::Attribute::BEGIN@13
1117µs15µsMoose::Meta::Role::Attribute::::BEGIN@4Moose::Meta::Role::Attribute::BEGIN@4
1116µs31µsMoose::Meta::Role::Attribute::::BEGIN@8Moose::Meta::Role::Attribute::BEGIN@8
1116µs29µsMoose::Meta::Role::Attribute::::BEGIN@6Moose::Meta::Role::Attribute::BEGIN@6
0000s0sMoose::Meta::Role::Attribute::::__ANON__[:90]Moose::Meta::Role::Attribute::__ANON__[:90]
0000s0sMoose::Meta::Role::Attribute::::is_same_asMoose::Meta::Role::Attribute::is_same_as
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Moose::Meta::Role::Attribute;
2
3320µs220µs
# spent 17µs (15+3) within Moose::Meta::Role::Attribute::BEGIN@3 which was called # once (15µs+3µs) by Moose::Meta::Role::BEGIN@17 at line 3
use strict;
# spent 17µs making 1 call to Moose::Meta::Role::Attribute::BEGIN@3 # spent 3µs making 1 call to strict::import
4320µs224µs
# spent 15µs (7+9) within Moose::Meta::Role::Attribute::BEGIN@4 which was called # once (7µs+9µs) by Moose::Meta::Role::BEGIN@17 at line 4
use warnings;
# spent 15µs making 1 call to Moose::Meta::Role::Attribute::BEGIN@4 # spent 9µs making 1 call to warnings::import
5
6333µs252µs
# spent 29µs (6+23) within Moose::Meta::Role::Attribute::BEGIN@6 which was called # once (6µs+23µs) by Moose::Meta::Role::BEGIN@17 at line 6
use Carp 'confess';
# spent 29µs making 1 call to Moose::Meta::Role::Attribute::BEGIN@6 # spent 23µs making 1 call to Exporter::import
7325µs257µs
# spent 33µs (9+24) within Moose::Meta::Role::Attribute::BEGIN@7 which was called # once (9µs+24µs) by Moose::Meta::Role::BEGIN@17 at line 7
use List::MoreUtils 'all';
# spent 33µs making 1 call to Moose::Meta::Role::Attribute::BEGIN@7 # spent 24µs making 1 call to Exporter::import
8346µs256µs
# spent 31µs (6+25) within Moose::Meta::Role::Attribute::BEGIN@8 which was called # once (6µs+25µs) by Moose::Meta::Role::BEGIN@17 at line 8
use Scalar::Util 'blessed', 'weaken';
# spent 31µs making 1 call to Moose::Meta::Role::Attribute::BEGIN@8 # spent 25µs making 1 call to Exporter::import
9
101600nsour $VERSION = '0.98';
111200nsour $AUTHORITY = 'cpan:STEVAN';
12
133324µs292µs
# spent 50µs (7+43) within Moose::Meta::Role::Attribute::BEGIN@13 which was called # once (7µs+43µs) by Moose::Meta::Role::BEGIN@17 at line 13
use base 'Moose::Meta::Mixin::AttributeCore';
# spent 50µs making 1 call to Moose::Meta::Role::Attribute::BEGIN@13 # spent 42µs making 1 call to base::import
14
1519µs2342µs__PACKAGE__->meta->add_attribute(
# spent 287µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 56µs making 1 call to Class::MOP::Mixin::meta
16 'metaclass' => (
17 reader => 'metaclass',
18 )
19);
20
2112µs2269µs__PACKAGE__->meta->add_attribute(
# spent 258µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Mixin::meta
22 'associated_role' => (
23 reader => 'associated_role',
24 )
25);
26
2712µs2261µs__PACKAGE__->meta->add_attribute(
# spent 250µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Mixin::meta
28 'is' => (
29 reader => 'is',
30 )
31);
32
3312µs2270µs__PACKAGE__->meta->add_attribute(
# spent 259µs making 1 call to Class::MOP::Mixin::HasAttributes::add_attribute # spent 11µs making 1 call to Class::MOP::Mixin::meta
34 'original_options' => (
35 reader => 'original_options',
36 )
37);
38
39
# spent 326µs within Moose::Meta::Role::Attribute::new which was called 44 times, avg 7µs/call: # 30 times (196µs+0s) by Moose::Meta::Role::Attribute::clone at line 73, avg 7µs/call # 14 times (130µs+0s) by Class::MOP::Mixin::HasAttributes::add_attribute at line 21 of Class/MOP/Mixin/HasAttributes.pm, avg 9µs/call
sub new {
40132349µs my ( $class, $name, %options ) = @_;
41
42 (defined $name)
43 || confess "You must provide a name for the attribute";
44
45 return bless {
46 name => $name,
47 original_options => \%options,
48 %options,
49 }, $class;
50}
51
52
# spent 361µs (287+74) within Moose::Meta::Role::Attribute::attach_to_role which was called 44 times, avg 8µs/call: # 44 times (287µs+74µs) by Moose::Meta::Role::_attach_attribute at line 207 of Moose/Meta/Role.pm, avg 8µs/call
sub attach_to_role {
53132385µs my ( $self, $role ) = @_;
54
55 ( blessed($role) && $role->isa('Moose::Meta::Role') )
# spent 24µs making 44 calls to UNIVERSAL::isa, avg 545ns/call # spent 20µs making 44 calls to Scalar::Util::blessed, avg 466ns/call
56 || confess
57 "You must pass a Moose::Meta::Role instance (or a subclass)";
58
59 weaken( $self->{'associated_role'} = $role );
# spent 29µs making 44 calls to Scalar::Util::weaken, avg 668ns/call
60}
61
62
# spent 14.6ms (349µs+14.2) within Moose::Meta::Role::Attribute::attribute_for_class which was called 37 times, avg 394µs/call: # 37 times (349µs+14.2ms) by Moose::Meta::Role::Application::ToClass::apply_attributes at line 142 of Moose/Meta/Role/Application/ToClass.pm, avg 394µs/call
sub attribute_for_class {
63111351µs my $self = shift;
64 my $metaclass = shift;
65
66 return $metaclass->interpolate_class_and_new(
67 $self->name => %{ $self->original_options } );
# spent 14.1ms making 37 calls to Moose::Meta::Attribute::interpolate_class_and_new, avg 381µs/call # spent 74µs making 37 calls to Moose::Meta::Role::Attribute::original_options, avg 2µs/call # spent 34µs making 37 calls to Class::MOP::Mixin::AttributeCore::name, avg 927ns/call
68}
69
70
# spent 495µs (229+266) within Moose::Meta::Role::Attribute::clone which was called 30 times, avg 16µs/call: # 30 times (229µs+266µs) by Moose::Meta::Role::Application::ToRole::apply_attributes at line 65 of Moose/Meta/Role/Application/ToRole.pm, avg 16µs/call
sub clone {
7160216µs my $self = shift;
72
73 return ( ref $self )->new( $self->name, %{ $self->original_options } );
# spent 196µs making 30 calls to Moose::Meta::Role::Attribute::new, avg 7µs/call # spent 48µs making 30 calls to Moose::Meta::Role::Attribute::original_options, avg 2µs/call # spent 22µs making 30 calls to Class::MOP::Mixin::AttributeCore::name, avg 727ns/call
74}
75
76sub is_same_as {
77 my $self = shift;
78 my $attr = shift;
79
80 my $self_options = $self->original_options;
81 my $other_options = $attr->original_options;
82
83 return 0
84 unless ( join q{|}, sort keys %{$self_options} ) eq ( join q{|}, sort keys %{$other_options} );
85
86 for my $key ( keys %{$self_options} ) {
87 return 0 if defined $self_options->{$key} && ! defined $other_options->{$key};
88 return 0 if ! defined $self_options->{$key} && defined $other_options->{$key};
89
90 next if all { ! defined } $self_options->{$key}, $other_options->{$key};
91
92 return 0 unless $self_options->{$key} eq $other_options->{$key};
93 }
94
95 return 1;
96}
97
98112µs1;
99
100=pod
101
102=head1 NAME
103
104Moose::Meta::Role::Attribute - A Moose Attribute metaclass for Roles
105
106=head1 DESCRIPTION
107
108This class implements the API for attributes in roles. Attributes in roles are
109more like attribute prototypes than full blown attributes. While they are
110introspectable, they have very little behavior.
111
112=head1 METHODS
113
114This class provides the following methods:
115
116=over 4
117
118=item B<< Moose::Meta::Role::Attribute->new(...) >>
119
120This method accepts all the options that would be passed to the constructor
121for L<Moose::Meta::Attribute>.
122
123=item B<< $attr->metaclass >>
124
125=item B<< $attr->is >>
126
127Returns the option as passed to the constructor.
128
129=item B<< $attr->associated_role >>
130
131Returns the L<Moose::Meta::Role> to which this attribute belongs, if any.
132
133=item B<< $attr->original_options >>
134
135Returns a hash reference of options passed to the constructor. This is used
136when creating a L<Moose::Meta::Attribute> object from this object.
137
138=item B<< $attr->attach_to_role($role) >>
139
140Attaches the attribute to the given L<Moose::Meta::Role>.
141
142=item B<< $attr->attribute_for_class($metaclass) >>
143
144Given an attribute metaclass name, this method calls C<<
145$metaclass->interpolate_class_and_new >> to construct an attribute object
146which can be added to a L<Moose::Meta::Class>.
147
148=item B<< $attr->clone >>
149
150Creates a new object identical to the object on which the method is called.
151
152=item B<< $attr->is_same_as($other_attr) >>
153
154Compares two role attributes and returns true if they are identical.
155
156=back
157
158In addition, this class implements all informational predicates implements by
159L<Moose::Meta::Attribute> (and L<Class::MOP::Attribute>).
160
161=head1 BUGS
162
163See L<Moose/BUGS> for details on reporting bugs.
164
165=head1 AUTHOR
166
167Dave Rolsky E<lt>autarch@urth.orgE<gt>
168
169=head1 COPYRIGHT AND LICENSE
170
171Copyright 2006-2010 by Infinity Interactive, Inc.
172
173L<http://www.iinteractive.com>
174
175This library is free software; you can redistribute it and/or modify
176it under the same terms as Perl itself.
177
178=cut