diff --git a/src/bytecode/heap.rs b/src/bytecode/heap.rs index a32b47d..7f0d7c5 100644 --- a/src/bytecode/heap.rs +++ b/src/bytecode/heap.rs @@ -17,16 +17,23 @@ macro_rules! heap_log { write!(file, "{},S,0\n", timestamp).unwrap(); } }; - (ALLOCATE -> $file:expr, $memory:expr) => { + (BEFORE_GC -> $file:expr, $memory:expr) => { + if let Some(file) = &mut $file { + let timestamp = + SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_nanos(); + write!(file, "{},B,{}\n", timestamp, $memory).unwrap(); + } + }; + (AFTER_GC -> $file:expr, $memory:expr) => { if let Some(file) = &mut $file { let timestamp = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_nanos(); write!(file, "{},A,{}\n", timestamp, $memory).unwrap(); } }; - (GC -> $file:expr, $memory:expr) => { + (END -> $file:expr, $memory:expr) => { if let Some(file) = &mut $file { let timestamp = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_nanos(); - write!(file, "{},G,{}\n", timestamp, $memory).unwrap(); + write!(file, "{},E,{}\n", timestamp, $memory).unwrap(); } } } @@ -62,7 +69,6 @@ impl Heap { } pub fn allocate(&mut self, object: HeapObject) -> HeapIndex { self.size += object.size(); - heap_log!(ALLOCATE -> self.log, self.size); let index = HeapIndex::from(self.memory.len()); self.memory.push(object); index @@ -79,6 +85,12 @@ impl Heap { } } +impl Drop for Heap { + fn drop(&mut self) { + heap_log!(END -> self.log, self.size); + } +} + impl From> for Heap { fn from(objects: Vec) -> Self { Heap { @@ -529,4 +541,4 @@ impl std::fmt::Display for Pointer { Pointer::Reference(p) => write!(f, "{}", p), } } -} \ No newline at end of file +}