1
0
Fork 0
forked from wry/wry

autocommit 2022-04-27 20:37:49 CEST

This commit is contained in:
Julian Orth 2022-04-27 20:37:49 +02:00
parent 57899b3f35
commit 324eb835bb
24 changed files with 478 additions and 68 deletions

View file

@ -2,6 +2,7 @@ use {
crate::{
async_engine::Phase,
client::{Client, ClientError},
ifs::wp_presentation_feedback::{KIND_HW_COMPLETION, KIND_VSYNC},
object::ObjectId,
utils::{
buffd::{BufFdIn, BufFdOut, MsgParser},
@ -16,6 +17,8 @@ use {
pub async fn client(data: Rc<Client>) {
let mut recv = data.state.eng.spawn(receive(data.clone())).fuse();
let mut dispatch_fr = data.state.eng.spawn(dispatch_fr(data.clone())).fuse();
let discard_fb = data.state.eng.spawn(discard_fb(data.clone())).fuse();
let dispatch_fb = data.state.eng.spawn(dispatch_fb(data.clone())).fuse();
let mut shutdown = data.shutdown.triggered().fuse();
let _send = data.state.eng.spawn2(Phase::PostLayout, send(data.clone()));
select! {
@ -25,6 +28,8 @@ pub async fn client(data: Rc<Client>) {
}
drop(recv);
drop(dispatch_fr);
drop(discard_fb);
drop(dispatch_fb);
data.flush_request.trigger();
match data.state.eng.timeout(5000) {
Ok(timeout) => {
@ -56,6 +61,38 @@ async fn dispatch_fr(data: Rc<Client>) {
}
}
async fn discard_fb(data: Rc<Client>) {
loop {
data.discard_presentation_feedback.non_empty().await;
while let Some(fr) = data.discard_presentation_feedback.try_pop() {
fr.send_discarded();
let _ = data.remove_obj(&*fr);
}
}
}
async fn dispatch_fb(data: Rc<Client>) {
loop {
data.dispatch_presentation_feedback.non_empty().await;
while let Some(fr) = data.dispatch_presentation_feedback.try_pop() {
let bindings = fr.output.bindings.borrow_mut();
if let Some(bindings) = bindings.get(&data.id) {
for binding in bindings.values() {
fr.feedback.send_sync_output(binding);
}
}
fr.feedback.send_presented(
fr.tv_sec,
fr.tv_nsec,
fr.refresh,
fr.seq,
KIND_VSYNC | KIND_HW_COMPLETION,
);
let _ = data.remove_obj(&*fr.feedback);
}
}
}
async fn receive(data: Rc<Client>) {
let display = data.display().unwrap();
let recv = async {