1
0
Fork 0
forked from wry/wry

portal: track if current buffers have been sent to peer

This commit is contained in:
Julian Orth 2024-04-19 00:23:13 +02:00
parent 02e8d9eb80
commit 9de741f529

View file

@ -87,6 +87,7 @@ pub struct StartedScreencast {
node: Rc<PwClientNode>, node: Rc<PwClientNode>,
port: Rc<PwClientNodePort>, port: Rc<PwClientNodePort>,
buffers: RefCell<PlaneVec<DmaBuf>>, buffers: RefCell<PlaneVec<DmaBuf>>,
buffers_valid: Cell<bool>,
dpy: Rc<PortalDisplay>, dpy: Rc<PortalDisplay>,
jay_screencast: Rc<UsrJayScreencast>, jay_screencast: Rc<UsrJayScreencast>,
} }
@ -142,6 +143,7 @@ impl PwClientNodeOwner for StartingScreencast {
node: self.node.clone(), node: self.node.clone(),
port, port,
buffers: Default::default(), buffers: Default::default(),
buffers_valid: Cell::new(false),
dpy: self.dpy.clone(), dpy: self.dpy.clone(),
jay_screencast: jsc, jay_screencast: jsc,
}); });
@ -161,6 +163,7 @@ impl PwClientNodeOwner for StartedScreencast {
fn use_buffers(&self, port: &Rc<PwClientNodePort>) { fn use_buffers(&self, port: &Rc<PwClientNodePort>) {
self.node self.node
.send_port_output_buffers(port, &self.buffers.borrow_mut()); .send_port_output_buffers(port, &self.buffers.borrow_mut());
self.buffers_valid.set(true);
} }
fn start(self: Rc<Self>) { fn start(self: Rc<Self>) {
@ -303,10 +306,15 @@ impl UsrJayScreencastOwner for StartedScreencast {
self.node.send_port_update(&self.port, true); self.node.send_port_update(&self.port, true);
self.node.send_active(true); self.node.send_active(true);
*self.buffers.borrow_mut() = buffers; *self.buffers.borrow_mut() = buffers;
self.buffers_valid.set(false);
} }
fn ready(&self, ev: &Ready) { fn ready(&self, ev: &Ready) {
let idx = ev.idx as usize; let idx = ev.idx as usize;
if !self.buffers_valid.get() {
self.jay_screencast.release_buffer(idx);
return;
}
unsafe { unsafe {
let mut used = false; let mut used = false;
if let Some(io) = self.port.io_buffers.lock().values().next() { if let Some(io) = self.port.io_buffers.lock().values().next() {