cart_tmp_gmem/heaps/
heap.rs

1use crate::{
2    stats::{MemoryHeapUtilization, MemoryUtilization},
3    Size,
4};
5
6#[derive(Debug)]
7pub(super) struct MemoryHeap {
8    size: Size,
9    used: Size,
10    effective: Size,
11}
12
13impl MemoryHeap {
14    pub(super) fn new(size: Size) -> Self {
15        MemoryHeap {
16            size,
17            used: 0,
18            effective: 0,
19        }
20    }
21
22    pub(super) fn available(&self) -> Size {
23        if self.used > self.size {
24            log::warn!("Heap size exceeded");
25            0
26        } else {
27            self.size - self.used
28        }
29    }
30
31    pub(super) fn allocated(&mut self, used: Size, effective: Size) {
32        self.used += used;
33        self.effective += effective;
34        debug_assert!(self.used >= self.effective);
35    }
36
37    pub(super) fn freed(&mut self, used: Size, effective: Size) {
38        self.used -= used;
39        self.effective -= effective;
40        debug_assert!(self.used >= self.effective);
41    }
42
43    pub(super) fn utilization(&self) -> MemoryHeapUtilization {
44        MemoryHeapUtilization {
45            utilization: MemoryUtilization {
46                used: self.used,
47                effective: self.effective,
48            },
49            size: self.size,
50        }
51    }
52}