Benchmark-Lab
view release on metacpan or search on metacpan
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
It returns a hash reference with the following keys:
* "elapsed" â total wall clock time to execute the benchmark
(including non-timed portions).
* "total_time" â sum of recorded task iterations times.
* "iterations" â total number of "do_task" functions called.
* "percentiles" â hash reference with 1, 5, 10, 25, 50, 75, 90, 95 and
99th percentile iteration times. There may be duplicates if there
were fewer than 100 iterations.
* "median_rate" â the inverse of the 50th percentile time.
* "timing" â array reference with individual iteration times as
(floating point) seconds.
CAVEATS
If the "do_task" executes in less time than the timer granularity, an
error will be thrown. For benchmarks that do not have before/after
functions, just repeating the function under test in "do_task" will be
sufficient.
lib/Benchmark/Lab.pm view on Meta::CPAN
#pod hash reference is used for the C<$context>, and the C<$label> defaults
#pod to the C<$package>.
#pod
#pod It returns a hash reference with the following keys:
#pod
#pod =for :list
#pod * C<elapsed> â total wall clock time to execute the benchmark (including
#pod non-timed portions).
#pod * C<total_time> â sum of recorded task iterations times.
#pod * C<iterations> â total number of C<do_task> functions called.
#pod * C<percentiles> â hash reference with 1, 5, 10, 25, 50, 75, 90, 95 and
#pod 99th percentile iteration times. There may be duplicates if there were
#pod fewer than 100 iterations.
#pod * C<median_rate> â the inverse of the 50th percentile time.
#pod * C<timing> â array reference with individual iteration times as (floating
#pod point) seconds.
#pod
#pod =cut
sub start {
my ( $self, $package, $context, $label ) = @_;
$package ||= 'main';
$context ||= {};
$label ||= $package;
lib/Benchmark/Lab.pm view on Meta::CPAN
__croak("Clock granularity too low for this task");
}
push @timing, $elapsed;
$wall_time = $end_time - $wall_start;
}
DB::finish_profile() if $PROFILING;
my $pctiles = $self->_percentiles( \@timing );
return {
elapsed => $wall_time,
total_time => List::Util::sum( 0, @timing ),
iterations => scalar(@timing),
percentiles => $pctiles,
median_rate => 1 / $pctiles->{50},
timing => \@timing,
};
}
sub _log {
my $self = shift;
return unless $self->{verbose};
my @lines = map { chomp; "$_\n" } @_;
print STDERR @lines;
return;
}
sub _percentiles {
my ( $self, $timing ) = @_;
my $runs = scalar @$timing;
my @sorted = sort { $a <=> $b } @$timing;
my %pctiles = map { $_ => $sorted[ int( $_ / 100 * $runs ) ] } 1, 5, 10, 25, 50, 75,
90, 95, 99;
return \%pctiles;
}
lib/Benchmark/Lab.pm view on Meta::CPAN
=item *
C<total_time> â sum of recorded task iterations times.
=item *
C<iterations> â total number of C<do_task> functions called.
=item *
C<percentiles> â hash reference with 1, 5, 10, 25, 50, 75, 90, 95 and 99th percentile iteration times. There may be duplicates if there were fewer than 100 iterations.
=item *
C<median_rate> â the inverse of the 50th percentile time.
=item *
C<timing> â array reference with individual iteration times as (floating point) seconds.
=back
=for Pod::Coverage BUILD
=head1 CAVEATS
( run in 0.439 second using v1.01-cache-2.11-cpan-709fd43a63f )