AnyEvent-Monitor-CPU
view release on metacpan or search on metacpan
lib/AnyEvent/Monitor/CPU.pm view on Meta::CPAN
croak("Parameter 'cb' must be a coderef, ") unless ref $self->{cb} eq 'CODE';
$self->start;
return $self;
}
sub start {
my $self = shift;
$self->{timer} = AnyEvent->timer(
after => $self->{interval},
interval => $self->{interval},
cb => sub { $self->_check_cpu },
);
$self->{usage} = $self->{cpu}->usage;
$self->reset_stats;
return;
}
sub stop { delete $_[0]->{timer} }
sub is_running { $_[0]->{timer} }
sub usage { return $_[0]->{usage} }
sub is_low { return $_[0]->{state} == 1 }
sub is_high { return $_[0]->{state} == 0 }
sub reset_stats {
my ($self) = @_;
$self->{usage_sum} = 0;
$self->{usage_count} = 0;
t/02-overhead.t view on Meta::CPAN
use AnyEvent::Monitor::CPU;
use Proc::CPUUsage;
#
# Measure the overhead of our CPU monitor
#
## Run the test for 5 seconds
diag("Measure overhead for 5 seconds...");
my $cv = AnyEvent->condvar;
my $timer = AnyEvent->timer(
after => 5,
cb => sub {
$cv->send;
},
);
## Start a monitor
my $m = AnyEvent::Monitor::CPU->new(
{ cb => sub { }
}
t/author-simple.t view on Meta::CPAN
use AnyEvent::Monitor::CPU qw( monitor_cpu );
#
# This test will steadly increase the CPU load until the watcher triggers,
# and then steadly decrease it until it triggers again
#
## the load generator
my $iters = 50_000;
my $incr = 25_000;
my $load_gen_timer = AnyEvent->timer(
after => .5,
interval => .1,
cb => sub {
note(" ... generating $iters count of load") if $ENV{AUTHOR_TESTING};
my $i = $iters;
my $a = 0;
while ($i--) {
$a += $i * $incr / $iters;
}
},
);
## the load modifier
my $direction = 1;
my $load_mod_timer = AnyEvent->timer(
after => 1,
interval => .2,
cb => sub {
my $delta = $direction * $incr;
$iters += $delta;
$iters = 0 if $iters < 0;
note(" !!! Delta is $delta, iters now $iters") if $ENV{AUTHOR_TESTING};
},
);
t/author-simple.t view on Meta::CPAN
my ($name, $params) = @$tc;
my $high_lim = $params->{high};
my $low_lim = $params->{low};
my $cycles = $params->{cycles} ||= $ENV{WARM_UP_CYCLES} || 1;
my $cv = AnyEvent->condvar;
diag("Starting test '$name': high => $high_lim, low => $low_lim");
## Make sure we stop it at some point
my $secs = 10 * ($cycles || 1);
my $time_limit = AnyEvent->timer(
after => $secs,
cb => sub {
$cv->send();
}
);
my $mon = start_load_watcher($name, $cv, $params);
my $stats = $mon->stats;
ok(!$stats->{usage_count});
ok(!$stats->{usage_sum});
( run in 1.282 second using v1.01-cache-2.11-cpan-49f99fa48dc )