From 21381b598fbea84afcda61f7ec2b845b93eebc73 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 14 Sep 2026 21:11:18 +0000 Subject: [PATCH] =?UTF-8?q?atuq:=20la=20serie=20con=20UNA=20sola=20tarjeta?= =?UTF-8?q?=20=E2=80=94=202=20de=2010,=20y=20el=20hueco=20resulta=20real?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con -vga none la captura ya no tiene punto ciego, asi que un ✗ significa «la ventana no esta». Clasificado el ultimo cuadro de las 10: 2 con la pagina pintada, 1 con la ventana en blanco y 7 con SOLO el escritorio. Las dos salidas explicaban los ✗ inflados de las series VGA=1, no el fenomeno. El MOZ_LOG separa los dos regimenes: las que tienen ventana escriben 952-1505 lineas hasta el apagado; las 7 sin ventana se cortan a los ~40s y quedan 6 minutos de silencio, sin crash (WebRender arranca). Quedan como hipotesis NO medida los frame callbacks que el compositor no manda. Ademas: tasa-primera-pintura.sh nombra el log por VGA (la serie nueva habia sobrescrito los crudos de la anterior). --- docs/26-atuq-envoltorio-gecko.md | 62 +++++++++- docs/state/primera-pintura.json | 160 +++++++++++++++++++++++++ scripts/cosmic/tasa-primera-pintura.sh | 13 +- 3 files changed, 230 insertions(+), 5 deletions(-) diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index 9eab1405..b143bec3 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -1855,7 +1855,67 @@ cada corrida, y `scripts/vigia-imagen.py` **no cuenta las ciegas** — las nombr **Lo que sigue**, y ahora es otra pregunta: no «por qué no pinta» sino **por qué el escritorio abre la ventana en la salida que no tiene el foco** —y si con una sola salida (`-vga none`, que es como se va -a usar la imagen de verdad) eso desaparece—. Es barato: la misma serie con una tarjeta. +a usar la imagen de verdad) eso desaparece—. Es barato: la misma serie con una tarjeta. **Hecha: §6.10.nonies — y el hueco es real, 2 de 10.** + +#### 6.10.nonies Con UNA sola salida: **2 de 10** — y el hueco resulta ser real (2026-09-14) + +El §6.10.octies cerró pidiendo exactamente esta serie: las mismas diez corridas pero con `-vga none`, +una sola tarjeta (`drm: card0`), que es como se usa la imagen de verdad. Con una sola salida la +captura es COMPLETA, así que por primera vez **un ✗ significa «la ventana no está»** y no «no está en +la que fotografié». + +| vídeo | pintaron | qué dice el ✗ | +|---|---|---| +| `vga+virtio-gpu` (dos DRM) | 4 de 14 | nada: la cámara miraba una de dos pantallas | +| **`virtio-gpu` solo (`-vga none`)** | **2 de 10** | **concluyente** | + +Y como la captura ya no tiene punto ciego, se puede clasificar **el último cuadro de cada corrida** por +su color dominante, que separa dos fallos que hasta ahora eran el mismo ✗: + +| último cuadro | corridas | qué es | +|---|---|---| +| `#ff00ff` 68 % | 2 | ✓ la página, pintada | +| `#f9f9fb` 68 % | 1 | la **ventana está** —misma geometría que la que pinta— pero **en blanco** | +| `#214a87` 91 % | 7 | **sólo el escritorio**: fondo, panel y dock. **No hay ventana** | + +⇒ **el hueco del §6.10.ter existe y no era la cámara.** Las dos salidas explicaban el número inflado +de ✗ de las series con `VGA=1`, no el fenómeno. + +**Y el `MOZ_LOG` separa los dos regímenes con un número, no con una impresión:** + +| | líneas de `moz.moz_log` | último apunte del log | +|---|---|---| +| las 3 con ventana | 952 – 1505 | sigue escribiendo hasta que se apaga la VM | +| las 7 sin ventana | 573 – 727 | **se corta a los ~40 s del lanzamiento**, y quedan **6 minutos de silencio** | + +No es que dibuje invisible: **deja de trabajar**. Y no muere por un crash — `atuq.log` de una fallida +llega hasta `WebRender - OpenGL version new 3.2` / `Renderer: Software WebRender` sin una sola línea +de error. Las últimas líneas que escribe son justo el bucle de vsync emulado: + + WaylandSurface::VSyncCallbackHandler() marked as visible & has buffer + WaylandSurface::SetVSyncCallbackLocked(), enabled 1 mapped 1 + WaylandSurface::Commit() allowed [1] needs commit 1 + fire VSync callback aEmulated [0] cb.mEmulated [1] ← y aquí se acaba + +Que es la forma que tiene Gecko de decir «commiteo a ciegas porque **nadie me devuelve frame +callbacks**». La hipótesis que queda —**no medida todavía**, y hay que decirlo así— es que +`cosmic-comp` nunca le da a esa superficie el estado de visible, así que el cliente se queda sin +callbacks y se detiene. Lo contesta el log del compositor, no el del navegador. + +⚠ **Condición de la medida:** anfitrión a **load ~15** (la tanda de KDE del otro agente más VMs de +otra sesión, en 4 cores) — más alta que el ~10 de la serie anterior. Las dos que pintaron lo hicieron +a **+175 s** y **+319 s**, en línea con los +184…+312 de antes. Y hay un orden sospechoso que la serie +no puede resolver sola: las 3 con ventana son las corridas 1-3 y las 7 sin ventana las 4-10, todas +seguidas. Eso puede ser la carga subiendo o puede ser estado que dejan las corridas entre sí; **con +diez corridas no se separa**. + +⚠ **Dos deudas del arnés que esta serie dejó a la vista**, ninguna barrida: +· la cuenta de «procesos atuq» **nunca volvió**: el eco del serial se come la salida, así que no se + puede afirmar si el proceso seguía vivo en las fallidas (el `atuq.log` sin crash es evidencia + indirecta, no la misma cosa); +· `tasa-primera-pintura.sh` quedó parametrizado por `VGA` pero **el nombre del log no**: la serie + nueva sobrescribió los crudos de la anterior (se salvaron 9 de 10 en `work/serie-dos-tarjetas/`). + Arreglado después de la serie — no durante: bash lee el guion a medida que lo ejecuta. ### 6.11 Y ahora la pregunta que faltaba: ¿REPRODUCE? (2026-09-07) diff --git a/docs/state/primera-pintura.json b/docs/state/primera-pintura.json index c761244c..e0a658f6 100644 --- a/docs/state/primera-pintura.json +++ b/docs/state/primera-pintura.json @@ -256,6 +256,166 @@ "pantallas_fotografiadas": 2, "pantalla": "vga0", "nota": "la ventana apareció en vga0 mientras gpu0 seguía mostrando el escritorio sin navegador" + }, + { + "medido": "2026-09-14T19:14:09Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T19:23:09Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": 175, + "pantalla": "gpu0", + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T19:34:16Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": 319, + "pantalla": "gpu0", + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T19:47:56Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T20:02:02Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T20:15:20Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T20:28:09Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T20:41:17Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T20:53:55Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" + }, + { + "medido": "2026-09-14T21:06:15Z", + "imagen": "/mnt/cosecha/takana-cosmic-qemu.img", + "segundos_primera_pintura": null, + "pantalla": null, + "pantallas_fotografiadas": 1, + "presupuesto_s": 420, + "ventana_s": 480, + "cadencia_s": 30, + "lanzamiento": "perfil del usuario", + "video": "virtio-gpu solo (-vga none)", + "mem_mb": 2560, + "vcpus": 2, + "acel": "tcg", + "guion": "scripts/cosmic/atuq-en-imagen.py" } ] } diff --git a/scripts/cosmic/tasa-primera-pintura.sh b/scripts/cosmic/tasa-primera-pintura.sh index 36f50720..6b69da2b 100755 --- a/scripts/cosmic/tasa-primera-pintura.sh +++ b/scripts/cosmic/tasa-primera-pintura.sh @@ -2,6 +2,7 @@ # tasa-primera-pintura.sh — corre N veces `atuq-en-imagen.py` y saca la TASA, no una anécdota. # # scripts/cosmic/tasa-primera-pintura.sh [N] (def 10) +# VGA=0 scripts/cosmic/tasa-primera-pintura.sh 10 una sola salida (así se usa la imagen de verdad) # # ── POR QUÉ UNA TASA ─────────────────────────────────────────────────────────────────────────── # El §6.10.sexies del SDD 26 midió cinco corridas sobre la MISMA imagen: pintó en tres (+197, +197, @@ -18,13 +19,17 @@ set -u ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT" N="${1:-10}" WAIT="${WAIT:-480}"; CADENCE="${CADENCE:-30}" +# ⚠ Con `VGA=1` hay DOS salidas y la ventana cae en cualquiera (§6.10.octies): la serie de diez del +# 2026-09-14 midió con eso puesto y su «2 de 10» era dónde apuntaba la cámara. Con `VGA=0` hay una +# sola salida y la captura es completa ⇒ el ✗ sí significa «no está». +VGA="${VGA:-1}" ok=0; fallo=0; aborto=0; i=1 -echo "== $N corridas · --as-user · VGA=1 · ventana ${WAIT}s · cadencia ${CADENCE}s" +echo "== $N corridas · --as-user · VGA=$VGA · ventana ${WAIT}s · cadencia ${CADENCE}s" while [ "$i" -le "$N" ]; do - log="work/tasa-$i.txt" - VGA=1 MEM="${MEM:-2560}" SMP="${SMP:-2}" timeout 2400 \ + log="work/tasa-vga$VGA-$i.txt" + VGA="$VGA" MEM="${MEM:-2560}" SMP="${SMP:-2}" timeout 2400 \ python3 scripts/cosmic/atuq-en-imagen.py --as-user --until-paint \ - --wait "$WAIT" --cadence "$CADENCE" --out "work/tasa-corrida-$i" > "$log" 2>&1 + --wait "$WAIT" --cadence "$CADENCE" --out "work/tasa-corrida-vga$VGA-$i" > "$log" 2>&1 if grep -qa "PRIMERA PINTURA" "$log"; then t=$(grep -a "primera pintura:" "$log" | head -1) ok=$((ok+1)); echo " [$i/$N] ✓ ${t#*✓ }"