webrtc_sctp/association/
association_stats.rs

1use portable_atomic::AtomicU64;
2use std::sync::atomic::Ordering;
3
4#[derive(Default, Debug)]
5pub(crate) struct AssociationStats {
6    n_datas: AtomicU64,
7    n_sacks: AtomicU64,
8    n_t3timeouts: AtomicU64,
9    n_ack_timeouts: AtomicU64,
10    n_fast_retrans: AtomicU64,
11}
12
13impl AssociationStats {
14    pub(crate) fn inc_datas(&self) {
15        self.n_datas.fetch_add(1, Ordering::SeqCst);
16    }
17
18    pub(crate) fn get_num_datas(&self) -> u64 {
19        self.n_datas.load(Ordering::SeqCst)
20    }
21
22    pub(crate) fn inc_sacks(&self) {
23        self.n_sacks.fetch_add(1, Ordering::SeqCst);
24    }
25
26    pub(crate) fn get_num_sacks(&self) -> u64 {
27        self.n_sacks.load(Ordering::SeqCst)
28    }
29
30    pub(crate) fn inc_t3timeouts(&self) {
31        self.n_t3timeouts.fetch_add(1, Ordering::SeqCst);
32    }
33
34    pub(crate) fn get_num_t3timeouts(&self) -> u64 {
35        self.n_t3timeouts.load(Ordering::SeqCst)
36    }
37
38    pub(crate) fn inc_ack_timeouts(&self) {
39        self.n_ack_timeouts.fetch_add(1, Ordering::SeqCst);
40    }
41
42    pub(crate) fn get_num_ack_timeouts(&self) -> u64 {
43        self.n_ack_timeouts.load(Ordering::SeqCst)
44    }
45
46    pub(crate) fn inc_fast_retrans(&self) {
47        self.n_fast_retrans.fetch_add(1, Ordering::SeqCst);
48    }
49
50    pub(crate) fn get_num_fast_retrans(&self) -> u64 {
51        self.n_fast_retrans.load(Ordering::SeqCst)
52    }
53
54    pub(crate) fn reset(&self) {
55        self.n_datas.store(0, Ordering::SeqCst);
56        self.n_sacks.store(0, Ordering::SeqCst);
57        self.n_t3timeouts.store(0, Ordering::SeqCst);
58        self.n_ack_timeouts.store(0, Ordering::SeqCst);
59        self.n_fast_retrans.store(0, Ordering::SeqCst);
60    }
61}