feat: report optional render performance metrics

This commit is contained in:
Samuel Onoja committed 2026-09-25 04:19:08 +01:00
1 parent cd3961bdef
commit 4eb456fb2b
5 files changed
+150 -3

No files matched your search

+4 -1
View File
@@ -48,7 +48,7 @@ use smithay::{
wayland::{compositor::with_states, presentation::Refresh},
};
use crate::Ferese;
use crate::{Ferese, metrics::RenderMetrics};
type SurfaceRenderElement = CropRenderElement<
RelocateRenderElement<RescaleRenderElement<WaylandSurfaceRenderElement<GlesRenderer>>>,
@@ -379,6 +379,7 @@ pub fn init(event_loop: &mut EventLoop<Ferese>, state: &mut Ferese) -> Result<()
let clock = Clock::<Monotonic>::new();
let mut sequence = 0_u64;
let mut output_scale = initial_scale;
let mut render_metrics = RenderMetrics::from_environment(output.name());
event_loop
.handle()
@@ -407,6 +408,7 @@ pub fn init(event_loop: &mut EventLoop<Ferese>, state: &mut Ferese) -> Result<()
WinitEvent::Redraw => {
state.advance_animations(Instant::now());
let age = backend.buffer_age().unwrap_or(0);
let render_started = Instant::now();
let rendered = (|| -> DamageRenderResult {
{
let (renderer, mut framebuffer) = backend.bind()?;
@@ -470,6 +472,7 @@ pub fn init(event_loop: &mut EventLoop<Ferese>, state: &mut Ferese) -> Result<()
state.loop_signal.stop();
return;
}
render_metrics.record_frame(render_started.elapsed(), &damage, 0);
let mut presentation = OutputPresentationFeedback::new(&output);
state.space.elements().for_each(|window| {