diff options
author | Gianni Ceccarelli <gianni.ceccarelli@net-a-porter.com> | 2012-01-24 10:51:25 +0000 |
---|---|---|
committer | Gianni Ceccarelli <gianni.ceccarelli@net-a-porter.com> | 2012-01-24 10:51:25 +0000 |
commit | 2efedee43bcf77833037438d827643db1cde9116 (patch) | |
tree | e2c33cff90c89d3ac10935945c33fcd1e529014b | |
parent | Build results of e9892ef (on master) (diff) | |
parent | cache attributes per class, makes thinks faster (diff) | |
download | data-multivalued-2efedee43bcf77833037438d827643db1cde9116.tar.gz data-multivalued-2efedee43bcf77833037438d827643db1cde9116.tar.bz2 data-multivalued-2efedee43bcf77833037438d827643db1cde9116.zip |
Build results of f74481a (on master)
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | META.json | 4 | ||||
-rw-r--r-- | META.yml | 2 | ||||
-rw-r--r-- | Makefile.PL | 2 | ||||
-rw-r--r-- | author_t/leaks.t | 72 | ||||
-rw-r--r-- | lib/Data/MultiValued.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeAccessors.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait/Ranges.pm | 6 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait/Tags.pm | 6 | ||||
-rw-r--r-- | lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm | 6 | ||||
-rw-r--r-- | lib/Data/MultiValued/Exceptions.pm | 12 | ||||
-rw-r--r-- | lib/Data/MultiValued/RangeContainer.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/Ranges.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/TagContainer.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/TagContainerForRanges.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/Tags.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/TagsAndRanges.pm | 4 | ||||
-rw-r--r-- | lib/Data/MultiValued/UglySerializationHelperRole.pm | 62 | ||||
-rw-r--r-- | t/moose-tagged.t | 3 |
20 files changed, 130 insertions, 83 deletions
@@ -1,6 +1,6 @@ Revision history for Data::MultiValued -0.0.3 2011-12-22 17:05:11 Europe/London +0.0.1_5 2012-01-24 10:51:19 Europe/London 0.0.1_4 2011-12-20 10:02:30 Europe/London - don't use Throwable::Error, we don't need stack traces, and they @@ -52,7 +52,7 @@ } } }, - "release_status" : "stable", - "version" : "0.0.3" + "release_status" : "testing", + "version" : "0.0.1_5" } @@ -35,4 +35,4 @@ requires: overload: 0 strict: 0 warnings: 0 -version: 0.0.3 +version: 0.0.1_5 diff --git a/Makefile.PL b/Makefile.PL index 07c83ff..a3aaa89 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -41,7 +41,7 @@ my %WriteMakefileArgs = ( "strict" => 0, "warnings" => 0 }, - "VERSION" => "0.0.3", + "VERSION" => "0.0.1_5", "test" => { "TESTS" => "t/*.t" } diff --git a/author_t/leaks.t b/author_t/leaks.t index f3c811b..629f141 100644 --- a/author_t/leaks.t +++ b/author_t/leaks.t @@ -21,53 +21,65 @@ use Test::Most 'die'; use Data::Printer; use JSON::XS; BEGIN { $ENV{DEBUG_MEM}=1 }; -use Dash::Leak; +use Test::LeakTrace; my $ropts={from=>10,to=>20}; +sub new_obj { + my $obj = Foo->new(rr=>'foo'); + $obj->rr_multi($ropts,777); + return $obj; +} + +my $LOOP=1; + my $json = JSON::XS->new->utf8; -my $obj = Foo->new(rr=>'foo'); -$obj->rr_multi($ropts,777); subtest 'serialisation memory leak' => sub { + my $obj = new_obj; $obj=Foo->new_in_place($json->decode($json->encode($obj->as_hash))); - leaksz 'start memory leak'; - for my $iter (0..2000) { - $obj=Foo->new_in_place($json->decode($json->encode($obj->as_hash))); - } - leaksz 'stop memory leak'; + leaktrace { + for my $iter (1..$LOOP) { + $obj=Foo->new_in_place($json->decode($json->encode($obj->as_hash))); + } + $obj=undef; + } -verbose; ok(1,'done'); }; subtest 'accessor memory leak' => sub { - leaksz 'start memory leak'; - for my $iter (0..1000) { - $obj->rr_multi({at=>35}); - } - leaksz 'stop memory leak non-exist'; - leaksz '...'; - for my $iter (0..1000) { - $obj->rr_multi({at=>15}); - } - leaksz 'stop memory leak exist'; + my $obj = new_obj; + leaktrace { + for my $iter (1..$LOOP) { + $obj->rr_multi({at=>35}); + } + $obj=undef; + } -verbose; + $obj = new_obj; + leaktrace { + for my $iter (1..$LOOP) { + $obj->rr_multi({at=>15}); + } + $obj=undef; + } -verbose; ok(1,'done'); }; subtest 'inner memory leak' => sub { - my $cont = $obj->{rr__MULTIVALUED_STORAGE__} - {_storage}; + my $obj = new_obj; + my $cont = $obj->{rr__MULTIVALUED_STORAGE__}{_storage}; - leaksz 'start memory leak'; - for my $iter (0..1000) { - eval { $cont->get({at=>35}) } - } - leaksz 'stop memory leak non-exist'; - leaksz '...'; - for my $iter (0..1000) { - $cont->get({at=>15}); - } - leaksz 'stop memory leak exist'; + leaktrace { + for my $iter (1..$LOOP) { + eval { $cont->get({at=>35}) } + } + } -verbose; + leaktrace { + for my $iter (1..$LOOP) { + $cont->get({at=>15}); + } + } -verbose; ok(1,'done'); }; diff --git a/lib/Data/MultiValued.pm b/lib/Data/MultiValued.pm index e7a0e3c..3f2e964 100644 --- a/lib/Data/MultiValued.pm +++ b/lib/Data/MultiValued.pm @@ -1,6 +1,6 @@ package Data::MultiValued; { - $Data::MultiValued::VERSION = '0.0.3'; + $Data::MultiValued::VERSION = '0.0.1_5'; } { $Data::MultiValued::DIST = 'Data-MultiValued'; @@ -25,7 +25,7 @@ Data::MultiValued - store tag- and range-dependant data in a scalar or Moose att =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/AttributeAccessors.pm b/lib/Data/MultiValued/AttributeAccessors.pm index 78ba975..470dfda 100644 --- a/lib/Data/MultiValued/AttributeAccessors.pm +++ b/lib/Data/MultiValued/AttributeAccessors.pm @@ -1,6 +1,6 @@ package Data::MultiValued::AttributeAccessors; { - $Data::MultiValued::AttributeAccessors::VERSION = '0.0.3'; + $Data::MultiValued::AttributeAccessors::VERSION = '0.0.1_5'; } { $Data::MultiValued::AttributeAccessors::DIST = 'Data-MultiValued'; @@ -130,7 +130,7 @@ Data::MultiValued::AttributeAccessors - method meta-class for multi-valued attri =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 DESCRIPTION diff --git a/lib/Data/MultiValued/AttributeTrait.pm b/lib/Data/MultiValued/AttributeTrait.pm index 1e90c94..24c6e03 100644 --- a/lib/Data/MultiValued/AttributeTrait.pm +++ b/lib/Data/MultiValued/AttributeTrait.pm @@ -1,6 +1,6 @@ package Data::MultiValued::AttributeTrait; { - $Data::MultiValued::AttributeTrait::VERSION = '0.0.3'; + $Data::MultiValued::AttributeTrait::VERSION = '0.0.1_5'; } { $Data::MultiValued::AttributeTrait::DIST = 'Data-MultiValued'; @@ -287,7 +287,7 @@ Data::MultiValued::AttributeTrait - "base role" for traits of multi-valued Moose =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 DESCRIPTION diff --git a/lib/Data/MultiValued/AttributeTrait/Ranges.pm b/lib/Data/MultiValued/AttributeTrait/Ranges.pm index a221a20..654a78f 100644 --- a/lib/Data/MultiValued/AttributeTrait/Ranges.pm +++ b/lib/Data/MultiValued/AttributeTrait/Ranges.pm @@ -1,6 +1,6 @@ package Data::MultiValued::AttributeTrait::Ranges; { - $Data::MultiValued::AttributeTrait::Ranges::VERSION = '0.0.3'; + $Data::MultiValued::AttributeTrait::Ranges::VERSION = '0.0.1_5'; } { $Data::MultiValued::AttributeTrait::Ranges::DIST = 'Data-MultiValued'; @@ -19,7 +19,7 @@ sub opts_to_pass_get { qw(at) } package Moose::Meta::Attribute::Custom::Trait::MultiValued::Ranges; { - $Moose::Meta::Attribute::Custom::Trait::MultiValued::Ranges::VERSION = '0.0.3'; + $Moose::Meta::Attribute::Custom::Trait::MultiValued::Ranges::VERSION = '0.0.1_5'; } { $Moose::Meta::Attribute::Custom::Trait::MultiValued::Ranges::DIST = 'Data-MultiValued'; @@ -40,7 +40,7 @@ Data::MultiValued::AttributeTrait::Ranges - attribute traits for attributes hold =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/AttributeTrait/Tags.pm b/lib/Data/MultiValued/AttributeTrait/Tags.pm index 63f10ac..63572c5 100644 --- a/lib/Data/MultiValued/AttributeTrait/Tags.pm +++ b/lib/Data/MultiValued/AttributeTrait/Tags.pm @@ -1,6 +1,6 @@ package Data::MultiValued::AttributeTrait::Tags; { - $Data::MultiValued::AttributeTrait::Tags::VERSION = '0.0.3'; + $Data::MultiValued::AttributeTrait::Tags::VERSION = '0.0.1_5'; } { $Data::MultiValued::AttributeTrait::Tags::DIST = 'Data-MultiValued'; @@ -19,7 +19,7 @@ sub opts_to_pass_get { qw(tag) } package Moose::Meta::Attribute::Custom::Trait::MultiValued::Tags; { - $Moose::Meta::Attribute::Custom::Trait::MultiValued::Tags::VERSION = '0.0.3'; + $Moose::Meta::Attribute::Custom::Trait::MultiValued::Tags::VERSION = '0.0.1_5'; } { $Moose::Meta::Attribute::Custom::Trait::MultiValued::Tags::DIST = 'Data-MultiValued'; @@ -40,7 +40,7 @@ Data::MultiValued::AttributeTrait::Tags - attribute traits for attributes holdin =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm b/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm index 381c197..ab1643f 100644 --- a/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm +++ b/lib/Data/MultiValued/AttributeTrait/TagsAndRanges.pm @@ -1,6 +1,6 @@ package Data::MultiValued::AttributeTrait::TagsAndRanges; { - $Data::MultiValued::AttributeTrait::TagsAndRanges::VERSION = '0.0.3'; + $Data::MultiValued::AttributeTrait::TagsAndRanges::VERSION = '0.0.1_5'; } { $Data::MultiValued::AttributeTrait::TagsAndRanges::DIST = 'Data-MultiValued'; @@ -19,7 +19,7 @@ sub opts_to_pass_get { qw(at tag) } package Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges; { - $Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges::VERSION = '0.0.3'; + $Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges::VERSION = '0.0.1_5'; } { $Moose::Meta::Attribute::Custom::Trait::MultiValued::TagsAndRanges::DIST = 'Data-MultiValued'; @@ -40,7 +40,7 @@ Data::MultiValued::AttributeTrait::TagsAndRanges - attribute traits for attribut =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/Exceptions.pm b/lib/Data/MultiValued/Exceptions.pm index 311b1f8..84de506 100644 --- a/lib/Data/MultiValued/Exceptions.pm +++ b/lib/Data/MultiValued/Exceptions.pm @@ -1,6 +1,6 @@ package Data::MultiValued::Exceptions; { - $Data::MultiValued::Exceptions::VERSION = '0.0.3'; + $Data::MultiValued::Exceptions::VERSION = '0.0.1_5'; } { $Data::MultiValued::Exceptions::DIST = 'Data-MultiValued'; @@ -11,7 +11,7 @@ package Data::MultiValued::Exceptions; package Data::MultiValued::Exceptions::NotFound; { - $Data::MultiValued::Exceptions::NotFound::VERSION = '0.0.3'; + $Data::MultiValued::Exceptions::NotFound::VERSION = '0.0.1_5'; } { $Data::MultiValued::Exceptions::NotFound::DIST = 'Data-MultiValued'; @@ -44,7 +44,7 @@ sub as_string { package Data::MultiValued::Exceptions::TagNotFound; { - $Data::MultiValued::Exceptions::TagNotFound::VERSION = '0.0.3'; + $Data::MultiValued::Exceptions::TagNotFound::VERSION = '0.0.1_5'; } { $Data::MultiValued::Exceptions::TagNotFound::DIST = 'Data-MultiValued'; @@ -60,7 +60,7 @@ has '+message' => ( package Data::MultiValued::Exceptions::RangeNotFound; { - $Data::MultiValued::Exceptions::RangeNotFound::VERSION = '0.0.3'; + $Data::MultiValued::Exceptions::RangeNotFound::VERSION = '0.0.1_5'; } { $Data::MultiValued::Exceptions::RangeNotFound::DIST = 'Data-MultiValued'; @@ -76,7 +76,7 @@ has '+message' => ( package Data::MultiValued::Exceptions::BadRange; { - $Data::MultiValued::Exceptions::BadRange::VERSION = '0.0.3'; + $Data::MultiValued::Exceptions::BadRange::VERSION = '0.0.1_5'; } { $Data::MultiValued::Exceptions::BadRange::DIST = 'Data-MultiValued'; @@ -112,7 +112,7 @@ Data::MultiValued::Exceptions - exception classes =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 DESCRIPTION diff --git a/lib/Data/MultiValued/RangeContainer.pm b/lib/Data/MultiValued/RangeContainer.pm index 293c58b..6ee0e47 100644 --- a/lib/Data/MultiValued/RangeContainer.pm +++ b/lib/Data/MultiValued/RangeContainer.pm @@ -1,6 +1,6 @@ package Data::MultiValued::RangeContainer; { - $Data::MultiValued::RangeContainer::VERSION = '0.0.3'; + $Data::MultiValued::RangeContainer::VERSION = '0.0.1_5'; } { $Data::MultiValued::RangeContainer::DIST = 'Data-MultiValued'; @@ -248,7 +248,7 @@ Data::MultiValued::RangeContainer - container for ranged values =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 DESCRIPTION diff --git a/lib/Data/MultiValued/Ranges.pm b/lib/Data/MultiValued/Ranges.pm index 1168960..9beb1a8 100644 --- a/lib/Data/MultiValued/Ranges.pm +++ b/lib/Data/MultiValued/Ranges.pm @@ -1,6 +1,6 @@ package Data::MultiValued::Ranges; { - $Data::MultiValued::Ranges::VERSION = '0.0.3'; + $Data::MultiValued::Ranges::VERSION = '0.0.1_5'; } { $Data::MultiValued::Ranges::DIST = 'Data-MultiValued'; @@ -93,7 +93,7 @@ Data::MultiValued::Ranges - Handle values with validity ranges =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/TagContainer.pm b/lib/Data/MultiValued/TagContainer.pm index 39a3fb0..949440c 100644 --- a/lib/Data/MultiValued/TagContainer.pm +++ b/lib/Data/MultiValued/TagContainer.pm @@ -1,6 +1,6 @@ package Data::MultiValued::TagContainer; { - $Data::MultiValued::TagContainer::VERSION = '0.0.3'; + $Data::MultiValued::TagContainer::VERSION = '0.0.1_5'; } { $Data::MultiValued::TagContainer::DIST = 'Data-MultiValued'; @@ -126,7 +126,7 @@ Data::MultiValued::TagContainer - container for tagged values =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 DESCRIPTION diff --git a/lib/Data/MultiValued/TagContainerForRanges.pm b/lib/Data/MultiValued/TagContainerForRanges.pm index ad50dff..5dc31ea 100644 --- a/lib/Data/MultiValued/TagContainerForRanges.pm +++ b/lib/Data/MultiValued/TagContainerForRanges.pm @@ -1,6 +1,6 @@ package Data::MultiValued::TagContainerForRanges; { - $Data::MultiValued::TagContainerForRanges::VERSION = '0.0.3'; + $Data::MultiValued::TagContainerForRanges::VERSION = '0.0.1_5'; } { $Data::MultiValued::TagContainerForRanges::DIST = 'Data-MultiValued'; @@ -68,7 +68,7 @@ Data::MultiValued::TagContainerForRanges - container for tagged values that are =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 DESCRIPTION diff --git a/lib/Data/MultiValued/Tags.pm b/lib/Data/MultiValued/Tags.pm index 20ddd50..6d213d4 100644 --- a/lib/Data/MultiValued/Tags.pm +++ b/lib/Data/MultiValued/Tags.pm @@ -1,6 +1,6 @@ package Data::MultiValued::Tags; { - $Data::MultiValued::Tags::VERSION = '0.0.3'; + $Data::MultiValued::Tags::VERSION = '0.0.1_5'; } { $Data::MultiValued::Tags::DIST = 'Data-MultiValued'; @@ -90,7 +90,7 @@ Data::MultiValued::Tags - Handle values with tags =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/TagsAndRanges.pm b/lib/Data/MultiValued/TagsAndRanges.pm index 6aa1fbb..e75f0f5 100644 --- a/lib/Data/MultiValued/TagsAndRanges.pm +++ b/lib/Data/MultiValued/TagsAndRanges.pm @@ -1,6 +1,6 @@ package Data::MultiValued::TagsAndRanges; { - $Data::MultiValued::TagsAndRanges::VERSION = '0.0.3'; + $Data::MultiValued::TagsAndRanges::VERSION = '0.0.1_5'; } { $Data::MultiValued::TagsAndRanges::DIST = 'Data-MultiValued'; @@ -103,7 +103,7 @@ Data::MultiValued::TagsAndRanges - Handle values with tags and validity ranges =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/lib/Data/MultiValued/UglySerializationHelperRole.pm b/lib/Data/MultiValued/UglySerializationHelperRole.pm index 9913a7d..2ebe831 100644 --- a/lib/Data/MultiValued/UglySerializationHelperRole.pm +++ b/lib/Data/MultiValued/UglySerializationHelperRole.pm @@ -1,6 +1,6 @@ package Data::MultiValued::UglySerializationHelperRole; { - $Data::MultiValued::UglySerializationHelperRole::VERSION = '0.0.3'; + $Data::MultiValued::UglySerializationHelperRole::VERSION = '0.0.1_5'; } { $Data::MultiValued::UglySerializationHelperRole::DIST = 'Data-MultiValued'; @@ -16,10 +16,8 @@ sub new_in_place { my $self = bless $hash,$class; - for my $attr ($class->meta->get_all_attributes) { - if ($attr->does('Data::MultiValued::AttributeTrait')) { - $attr->_rebless_slot($self); - } + for my $attr (@{$class->_dmv_multi_attrs}) { + $attr->_rebless_slot($self); } return $self; } @@ -29,20 +27,54 @@ sub as_hash { my ($self) = @_; my %ret = %$self; - for my $attr ($self->meta->get_all_attributes) { - if ($attr->does('Data::MultiValued::AttributeTrait')) { - my $st = $attr->_as_hash($self); - if ($st) { - $ret{$attr->full_storage_slot} = $st; - } - else { - delete $ret{$attr->full_storage_slot}; - } + for my $attr (@{$self->_dmv_multi_attrs}) { + my $st = $attr->_as_hash($self); + if ($st) { + $ret{$attr->full_storage_slot} = $st; + } + else { + delete $ret{$attr->full_storage_slot}; } } return \%ret; } +{ +my ( + %all_attrs_for_class, + %tagged_attrs_for_class, + %ranged_attrs_for_class, + %multi_attrs_for_class, +); + +sub _dmv_all_attrs { + my ($class) = @_;$class=ref($class)||$class; + + return $all_attrs_for_class{$class} //= [$class->meta->get_all_attributes]; +} +sub _dmv_tagged_attrs { + my ($class) = @_;$class=ref($class)||$class; + + return $tagged_attrs_for_class{$class} //= + [ grep { $_->does('Data::MultiValued::AttributeTrait::Tags') } + @{$class->_dmv_all_attrs} ]; +} +sub _dmv_ranged_attrs { + my ($class) = @_;$class=ref($class)||$class; + + return $ranged_attrs_for_class{$class} //= + [ grep { $_->does('Data::MultiValued::AttributeTrait::Ranges') } + @{$class->_dmv_all_attrs} ]; +} +sub _dmv_multi_attrs { + my ($class) = @_;$class=ref($class)||$class; + + return $multi_attrs_for_class{$class} //= + [ grep { $_->does('Data::MultiValued::AttributeTrait') } + @{$class->_dmv_all_attrs} ]; +} +} + 1; @@ -57,7 +89,7 @@ Data::MultiValued::UglySerializationHelperRole - only use this if you know what =head1 VERSION -version 0.0.3 +version 0.0.1_5 =head1 SYNOPSIS diff --git a/t/moose-tagged.t b/t/moose-tagged.t index 2493aff..1273bed 100644 --- a/t/moose-tagged.t +++ b/t/moose-tagged.t @@ -24,6 +24,9 @@ has other => ( predicate => 'has_other', clearer => 'clear_other', ); + +#__PACKAGE__->meta->make_immutable; + } package main; use Test::Most 'die'; |