aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-09-04 08:57:11 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-09-04 08:57:11 +0400
commit14bafdf2026c59d36e4375414306a08cf0b7f416 (patch)
tree93f030b5878db865581de4889774c85118fcf4b8 /src/backend
parentacb9376d05b389ae045b6eeeafbcd06dc586430c (diff)
downloadniri-14bafdf2026c59d36e4375414306a08cf0b7f416.tar.gz
niri-14bafdf2026c59d36e4375414306a08cf0b7f416.tar.bz2
niri-14bafdf2026c59d36e4375414306a08cf0b7f416.zip
tty: Add Tracy vblank frame events
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/tty.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index d49c7762..3178b0fc 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -76,6 +76,10 @@ struct Surface {
name: String,
compositor: GbmDrmCompositor,
dmabuf_feedback: DmabufFeedback,
+ /// Tracy frame that goes from vblank to vblank.
+ vblank_frame: Option<tracy_client::Frame>,
+ /// Frame name for the VBlank frame that unfortunately has to be leaked.
+ vblank_frame_name: tracy_client::FrameName,
}
impl Tty {
@@ -283,6 +287,12 @@ impl Tty {
let name = &surface.name;
trace!("vblank on {name} {metadata:?}");
+ drop(surface.vblank_frame.take()); // Drop the old one first.
+ let vblank_frame = tracy_client::Client::running()
+ .unwrap()
+ .non_continuous_frame(surface.vblank_frame_name);
+ surface.vblank_frame = Some(vblank_frame);
+
let presentation_time = match metadata.as_mut().unwrap().time {
DrmEventTime::Monotonic(time) => time,
DrmEventTime::Realtime(_) => {
@@ -532,10 +542,16 @@ impl Tty {
.build()
.unwrap();
+ let vblank_frame_name = unsafe {
+ tracy_client::internal::create_frame_name(format!("vblank on {output_name}\0").leak())
+ };
+
let surface = Surface {
name: output_name,
compositor,
dmabuf_feedback,
+ vblank_frame: None,
+ vblank_frame_name,
};
let res = device.surfaces.insert(crtc, surface);
assert!(res.is_none(), "crtc must not have already existed");
@@ -626,6 +642,8 @@ impl Tty {
}
}
+ // We're not expecting a vblank right after this.
+ drop(surface.vblank_frame.take());
None
}