cart_tmp_gmem/heaps/
heap.rs1use 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}