use crate::stream_writer::StreamWriter;
use perfetto_sdk_sys::*;
use std::os::raw::c_void;
pub struct HeapBuffer<'a> {
buffer: *mut PerfettoHeapBuffer,
writer: &'a StreamWriter,
}
impl<'a> HeapBuffer<'a> {
pub fn new(writer: &'a StreamWriter) -> Self {
let mut inner_writer = writer.writer.borrow_mut();
let buffer = unsafe { PerfettoHeapBufferCreate(&mut *inner_writer as *mut _) };
HeapBuffer { buffer, writer }
}
pub fn copy_into(&self, dst: &mut [u8]) {
let mut inner_writer = self.writer.writer.borrow_mut();
unsafe {
PerfettoHeapBufferCopyInto(
self.buffer,
&mut *inner_writer as *mut _,
dst.as_mut_ptr() as *mut c_void,
dst.len(),
)
};
}
}
impl Drop for HeapBuffer<'_> {
fn drop(&mut self) {
let mut inner_writer = self.writer.writer.borrow_mut();
unsafe { PerfettoHeapBufferDestroy(self.buffer, &mut *inner_writer as *mut _) };
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn init() {
let writer = StreamWriter::new();
let _hb = HeapBuffer::new(&writer);
}
}