1
0
Fork 0
forked from wry/wry

render: propagate errors

This commit is contained in:
Julian Orth 2024-03-22 13:26:56 +01:00
parent d9fa3f6732
commit 1b4492c670
14 changed files with 169 additions and 105 deletions

View file

@ -173,7 +173,7 @@ impl JayScreencast {
let mut buffer = self.buffers.borrow_mut();
for (idx, buffer) in buffer.deref_mut().iter_mut().enumerate() {
if buffer.free {
self.client.state.perform_screencopy(
let res = self.client.state.perform_screencopy(
texture,
&buffer.fb,
on.global.pos.get(),
@ -183,12 +183,20 @@ impl JayScreencast {
size,
on.global.persistent.transform.get(),
);
self.client.event(Ready {
self_id: self.id,
idx: idx as _,
});
buffer.free = false;
return;
match res {
Ok(_) => {
self.client.event(Ready {
self_id: self.id,
idx: idx as _,
});
buffer.free = false;
return;
}
Err(e) => {
log::error!("Could not perform screencopy: {}", ErrorFmt(e));
break;
}
}
}
}
self.missed_frame.set(true);

View file

@ -18,6 +18,7 @@ use {
buffd::{MsgParser, MsgParserError},
clonecell::CloneCell,
copyhashmap::CopyHashMap,
errorfmt::ErrorFmt,
linkedlist::LinkedList,
transform_ext::TransformExt,
},
@ -243,7 +244,7 @@ impl WlOutputGlobal {
if let Some(WlBufferStorage::Shm { mem, stride }) =
wl_buffer.storage.borrow_mut().deref()
{
self.state.perform_shm_screencopy(
let res = self.state.perform_shm_screencopy(
tex,
self.pos.get(),
x_off,
@ -255,6 +256,11 @@ impl WlOutputGlobal {
wl_buffer.format,
Transform::None,
);
if let Err(e) = res {
log::warn!("Could not perform shm screencopy: {}", ErrorFmt(e));
capture.send_failed();
continue;
}
} else {
let fb = match wl_buffer.famebuffer.get() {
Some(fb) => fb,
@ -264,7 +270,7 @@ impl WlOutputGlobal {
continue;
}
};
self.state.perform_screencopy(
let res = self.state.perform_screencopy(
tex,
&fb,
self.pos.get(),
@ -274,6 +280,11 @@ impl WlOutputGlobal {
size,
Transform::None,
);
if let Err(e) = res {
log::warn!("Could not perform screencopy: {}", ErrorFmt(e));
capture.send_failed();
continue;
}
}
if capture.with_damage.get() {
capture.send_damage();

View file

@ -299,13 +299,20 @@ impl WlSeatGlobal {
if extents.intersects(&Rect::new_sized(-x_rel, -y_rel, width, height).unwrap()) {
if render {
let buffer = hc.get_buffer();
buffer.render_hardware_cursor(
let res = buffer.render_hardware_cursor(
cursor.deref(),
&self.state,
scale,
transform,
);
hc.swap_buffer();
match res {
Ok(_) => {
hc.swap_buffer();
}
Err(e) => {
log::error!("Could not render hardware cursor: {}", ErrorFmt(e));
}
}
}
hc.set_enabled(true);
let mode = output.global.mode.get();