webrtc_sctp/association/
association_stats.rs1use 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}