aboutsummaryrefslogtreecommitdiff
path: root/rendy-memory/src/heaps/heap.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rendy-memory/src/heaps/heap.rs')
-rw-r--r--rendy-memory/src/heaps/heap.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/rendy-memory/src/heaps/heap.rs b/rendy-memory/src/heaps/heap.rs
new file mode 100644
index 0000000..6595cbc
--- /dev/null
+++ b/rendy-memory/src/heaps/heap.rs
@@ -0,0 +1,49 @@
+use crate::utilization::*;
+
+#[derive(Debug)]
+pub(super) struct MemoryHeap {
+ size: u64,
+ used: u64,
+ effective: u64,
+}
+
+impl MemoryHeap {
+ pub(super) fn new(size: u64) -> Self {
+ MemoryHeap {
+ size,
+ used: 0,
+ effective: 0,
+ }
+ }
+
+ pub(super) fn available(&self) -> u64 {
+ if self.used > self.size {
+ log::warn!("Heap size exceeded");
+ 0
+ } else {
+ self.size - self.used
+ }
+ }
+
+ pub(super) fn allocated(&mut self, used: u64, effective: u64) {
+ self.used += used;
+ self.effective += effective;
+ debug_assert!(self.used >= self.effective);
+ }
+
+ pub(super) fn freed(&mut self, used: u64, effective: u64) {
+ self.used -= used;
+ self.effective -= effective;
+ debug_assert!(self.used >= self.effective);
+ }
+
+ pub(super) fn utilization(&self) -> MemoryHeapUtilization {
+ MemoryHeapUtilization {
+ utilization: MemoryUtilization {
+ used: self.used,
+ effective: self.effective,
+ },
+ size: self.size,
+ }
+ }
+}