refactor(wayland): continue implementing better buffer release
Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user