File Coverage

blib/lib/Linux/Event/Scheduler.pm
Criterion Covered Total %
statement 57 57 100.0
branch 10 16 62.5
condition n/a
subroutine 11 11 100.0
pod 6 6 100.0
total 84 90 93.3


line stmt bran cond sub pod time code
1             package Linux::Event::Scheduler;
2 14     14   80318 use v5.36;
  14         36  
3 14     14   69 use strict;
  14         35  
  14         303  
4 14     14   56 use warnings;
  14         22  
  14         861  
5              
6             our $VERSION = '0.012';
7              
8 14     14   62 use Carp qw(croak);
  14         15  
  14         621  
9 14     14   5146 use Linux::Event::XS ();
  14         30  
  14         6131  
10              
11 22     22 1 123081 sub new ($class, %args) {
  22         47  
  22         40  
  22         28  
12 22         36 my $clock = delete $args{clock};
13 22 100       183 croak "clock is required" if !$clock;
14 21 50       74 croak "unknown args: " . join(", ", sort keys %args) if %args;
15              
16 21         35 for my $m (qw(now_ns deadline_in_ns)) {
17 42 50       107 croak "clock missing method '$m'" if !$clock->can($m);
18             }
19              
20 21         160 return bless {
21             clock => $clock,
22             heap => Linux::Event::XS::timer_heap_new(),
23             }, $class;
24             }
25              
26 20     20 1 36 sub at_ns ($self, $deadline_ns, $cb) {
  20         20  
  20         21  
  20         28  
  20         21  
27 20 50       51 croak "deadline_ns is required" if !defined $deadline_ns;
28 20 50       32 croak "callback is required" if !defined $cb;
29 20 100       207 croak "callback must be a coderef" if ref($cb) ne 'CODE';
30              
31             return Linux::Event::XS::timer_heap_at_ns(
32             $self->{heap},
33 19         112 int($deadline_ns),
34             $cb,
35             );
36             }
37              
38 17     17 1 27 sub after_ns ($self, $delta_ns, $cb) {
  17         58  
  17         27  
  17         30  
  17         19  
39 17 50       42 croak "delta_ns is required" if !defined $delta_ns;
40 17         19 $delta_ns = int($delta_ns);
41 17         85 my $deadline = $self->{clock}->deadline_in_ns($delta_ns);
42 17         117 return $self->at_ns($deadline, $cb);
43             }
44              
45 3     3 1 6 sub cancel ($self, $id) {
  3         4  
  3         3  
  3         3  
46 3 50       8 return 0 if !defined $id;
47 3         29 return Linux::Event::XS::timer_heap_cancel($self->{heap}, int($id));
48             }
49              
50 76     76 1 3166 sub next_deadline_ns ($self) {
  76         88  
  76         79  
51 76         236 return Linux::Event::XS::timer_heap_next_deadline_ns($self->{heap});
52             }
53              
54 46     46 1 62 sub pop_expired ($self) {
  46         69  
  46         71  
55 46         153 my $now = $self->{clock}->now_ns;
56 46         447 return Linux::Event::XS::timer_heap_pop_expired($self->{heap}, int($now));
57             }
58              
59             1;
60              
61             __END__