refactor(wayland): continue implementing better buffer release

Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
Schmarni
2025-07-18 02:37:30 +02:00
parent eca5bb4bf2
commit 9466e97dd1
4 changed files with 46 additions and 24 deletions

View File

@@ -16,24 +16,22 @@ use waynest::{
#[derive(Debug)]
pub struct BufferUsage {
pub buffer: Weak<Buffer>,
pub buffer: Arc<Buffer>,
message_sink: MessageSink,
}
impl BufferUsage {
pub fn new(client: &Client, buffer: &Arc<Buffer>) -> Arc<Self> {
Arc::new(Self {
buffer: Arc::downgrade(buffer),
buffer: buffer.clone(),
message_sink: client.message_sink(),
})
}
}
impl Drop for BufferUsage {
fn drop(&mut self) {
if let Some(buffer) = self.buffer.upgrade() {
self.message_sink
.send(Message::ReleaseBuffer(buffer))
.unwrap();
}
self.message_sink
.send(Message::ReleaseBuffer(self.buffer.clone()))
.unwrap();
}
}
@@ -42,7 +40,6 @@ pub enum BufferBacking {
Shm(ShmBufferBacking),
Dmabuf(DmabufBacking),
}
impl BufferBacking {}
#[derive(Debug, Dispatcher)]
pub struct Buffer {
@@ -83,6 +80,9 @@ impl Buffer {
BufferBacking::Dmabuf(backing) => backing.size(),
}
}
pub fn uses_buffer_usage(&self) -> bool {
matches!(self.backing, BufferBacking::Dmabuf(_))
}
}
impl WlBuffer for Buffer {

View File

@@ -38,7 +38,7 @@ pub enum SurfaceRole {
#[derive(Debug, Clone)]
pub struct BufferState {
pub buffer: Arc<Buffer>,
pub usage: Arc<BufferUsage>,
pub usage: Option<Arc<BufferUsage>>,
}
#[derive(Debug, Clone)]
@@ -232,7 +232,9 @@ impl WlSurface for Surface {
self.state.lock().pending.buffer = buffer.and_then(|b| {
let buffer = client.get::<Buffer>(b)?;
Some(BufferState {
usage: BufferUsage::new(client, &buffer),
usage: buffer
.uses_buffer_usage()
.then(|| BufferUsage::new(client, &buffer)),
buffer,
})
});