autocommit 2022-04-27 20:37:49 CEST
This commit is contained in:
parent
57899b3f35
commit
324eb835bb
24 changed files with 478 additions and 68 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue