Aion-Telemetry
view release on metacpan or search on metacpan
lib/Aion/Telemetry.pm view on Meta::CPAN
package Aion::Refmark {
sub DESTROY {
my $now = Time::HiRes::time();
my $mark = pop @REFMARKS;
$mark->{count}++;
$mark->{interval} += $now - $REFMARK_LAST_TIME;
$REFMARK_LAST_TIME = $now;
}
}
sub refmark(;$) {
my ($mark) = @_ == 0? (caller 1)[3]: @_;
my $now = Time::HiRes::time();
$REFMARKS[$#REFMARKS]->{interval} += $now - $REFMARK_LAST_TIME if @REFMARKS;
$REFMARK_LAST_TIME = $now;
push @REFMARKS, $REFMARK{$mark} //= {mark => $mark};
bless \$mark, 'Aion::Refmark'
}
# СоздаÑÑ Ð¾ÑÑÑÑ Ð¿Ð¾ ÑепеÑнÑм ÑоÑкам
sub refreport(;$) {
my ($clean) = @_;
my @v = values %REFMARK;
%REFMARK = (), undef $REFMARK_LAST_TIME if $clean;
my $total = sum map $_->{interval}, @v;
$_->{percent} = ($_->{interval} / $total) * 100 for @v;
@v = sort {$b->{percent} <=> $a->{percent}} @v;
return \@v, $total if wantarray;
( run in 0.232 second using v1.01-cache-2.11-cpan-cba739cd03b )