1
0
Fork 0
forked from wry/wry

surface: include current time in frame requests

This commit is contained in:
Julian Orth 2024-07-11 17:48:50 +02:00
parent bb9e6ba3b5
commit ae87b3ef7a
7 changed files with 12 additions and 11 deletions

View file

@ -24,10 +24,10 @@ impl WlCallback {
}
}
pub fn send_done(&self) {
pub fn send_done(&self, data: u32) {
self.client.event(Done {
self_id: self.id,
callback_data: 0,
callback_data: data,
});
}
}

View file

@ -39,7 +39,7 @@ impl WlDisplayRequestHandler for WlDisplay {
let cb = Rc::new(WlCallback::new(req.callback, &self.client));
track!(self.client, cb);
self.client.add_client_obj(&cb)?;
cb.send_done();
cb.send_done(0);
self.client.remove_obj(&*cb)?;
Ok(())
}

View file

@ -1227,8 +1227,9 @@ impl WlSurface {
self.ext.get().after_apply_commit();
if self.visible.get() {
if self.buffer_presented.get() {
let now = self.client.state.now_msec() as _;
for fr in self.frame_requests.borrow_mut().drain(..) {
fr.send_done();
fr.send_done(now);
let _ = fr.client.remove_obj(&*fr);
}
}

View file

@ -86,11 +86,11 @@ impl Cursor for CursorSurface {
let extents = self.surface.extents.get();
renderer.render_surface(&self.surface, -extents.x1(), -extents.y1(), None);
struct FrameRequests;
struct FrameRequests(u64);
impl NodeVisitorBase for FrameRequests {
fn visit_surface(&mut self, node: &Rc<WlSurface>) {
for fr in node.frame_requests.borrow_mut().drain(..) {
fr.send_done();
fr.send_done(self.0 as _);
let _ = fr.client.remove_obj(fr.deref());
}
for fr in node.presentation_feedback.borrow_mut().drain(..) {
@ -100,7 +100,7 @@ impl Cursor for CursorSurface {
node.node_visit_children(self);
}
}
FrameRequests.visit_surface(&self.surface);
FrameRequests(self.surface.client.state.now_msec()).visit_surface(&self.surface);
}
fn extents_at_scale(&self, scale: Scale) -> Rect {