chore(mirada-compositor): backend DRM — log del tamaño de las superficies
El panel sólo ofrece modos 1920×1080, así que la franja negra no es del
modo. Para localizarla, el bucle DRM registra cada ~2 s la posición y el
tamaño real de cada superficie — así se ve si el cliente llena la
pantalla o se queda corto.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
97a10aa17334ac905ea2e2adf8e40220a5a618cc · por sergio · 2026-05-21T02:58:52Z (hace 5 meses) · padre 30669f970 · ver el árbol en este commit
Delta semántico · 3
crates/apps/mirada-compositor/src/drm_backend.rs
cambió de firma struct DrmState cambió por dentro fn run pub cambió por dentro fn tick
diff --git a/crates/apps/mirada-compositor/src/drm_backend.rs b/crates/apps/mirada-compositor/src/drm_backend.rs
index 6baec05..c9125cb 100644
--- a/crates/apps/mirada-compositor/src/drm_backend.rs
+++ b/crates/apps/mirada-compositor/src/drm_backend.rs
@@ -32,6 +32,7 @@ use smithay::backend::renderer::element::surface::{
};
use smithay::backend::renderer::element::Kind;
use smithay::backend::renderer::gles::GlesRenderer;
+use smithay::backend::renderer::utils::with_renderer_surface_state;
use smithay::backend::renderer::ImportDma;
use smithay::backend::session::libseat::LibSeatSession;
use smithay::backend::session::{Event as SessionEvent, Session};
@@ -74,6 +75,8 @@ struct DrmState {
start: Instant,
/// Nº de ventanas en el último `tick` — para registrar los cambios.
last_windows: usize,
+ /// Cuenta de `tick`s — para registrar diagnósticos cada cierto rato.
+ tick_count: u32,
}
impl DrmState {
@@ -134,6 +137,18 @@ impl DrmState {
self.last_windows = n;
}
+ // Diagnóstico cada ~2 s: dónde y de qué tamaño está cada superficie.
+ self.tick_count = self.tick_count.wrapping_add(1);
+ if self.tick_count % 120 == 0 {
+ for w in &self.app.windows {
+ let size = with_renderer_surface_state(&w.surface, |s| s.surface_size());
+ eprintln!(
+ "mirada-compositor · ventana id={} loc={:?} visible={} superficie={size:?}",
+ w.id, w.loc, w.visible,
+ );
+ }
+ }
+
if self.keymap_watch.as_ref().is_some_and(|w| w.changed()) {
if let Some(path) = &self.keymap_path {
match Keymap::load(path) {
@@ -484,6 +499,7 @@ pub fn run() -> Result<(), Box<dyn Error>> {
ctl,
start: Instant::now(),
last_windows: 0,
+ tick_count: 0,
};
let signal = event_loop.get_signal();