portal: track if current buffers have been sent to peer
This commit is contained in:
parent
02e8d9eb80
commit
9de741f529
1 changed files with 8 additions and 0 deletions
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue