atuq: la serie con UNA sola tarjeta — 2 de 10, y el hueco resulta real

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).
This commit is contained in:
Sergio
2026-09-14 21:11:18 +00:00
parent 52fea61cbd
commit 21381b598f
3 changed files with 230 additions and 5 deletions
+61 -1
View File
@@ -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)
+160
View File
@@ -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"
}
]
}
+9 -4
View File
@@ -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#*✓ }"