atuq: la tasa con perfil sano es +97 y +98 s — y PINTAR NO ES TERMINAR el arranque

Cuatro arranques fríos en serie, el perfil partiendo del 5 que dejó la corrida del umbral:

  S1  pin 0   antes 5  después 1   el navegador   ✓ +97 s
  S2  sin pin antes 1  después 2   el navegador   ✓ +98 s
  S3  sin pin antes 2  después 3   (matada a los 60 s)
  S4  sin pin antes 3  después 4   EL DIÁLOGO     ✗ en 420 s

Tres cosas:

· la tasa, por fin con perfil sano: dos corridas independientes y pegadas, +97 y +98 s, contra los
  +123/+195/+197/+204 de antes. Con el anfitrión descargado el mismo artefacto pinta en la mitad del
  tiempo ⇒ el número es de la máquina y la carga tanto como del producto, y se publica con sus
  condiciones;
· el umbral se reprodujo solo y en otra secuencia: S4 arrancó con 3, sumó a 4 y abrió el diálogo —
  segunda medición independiente del mismo borde, esta vez identificando la ventana por `min_size`
  y no por el título (que está traducido, así que un grep por «Troubleshoot Mode» en una imagen en
  castellano no engancha y su ausencia se lee como la conclusión contraria);
· ⚠ y una corrida que PINTA no limpia el contador: S2 pintó y dejó 2. Más todavía,
  `toolkit.startup.last_success` vale lo mismo en las CUATRO (1789494795, las 17:53) ⇒ el gancho de
  cierre no corrió ni una vez, ni en las que pintaron. Pintar no es terminar de arrancar.

Entonces «quién limpia el contador» SIGUE SIN MEDIR, y el propio documento decía que esta serie lo
cerraría: no lo cierra, y queda escrito así. Hace falta una corrida que deje al navegador terminar
de arrancar y salir limpio.

Lo más caro es para el instrumento: con `--until-paint` cada corrida suma uno, pinte o no, así que
una serie se rompe sola a la cuarta — que es lo que pasó ayer sin que nadie lo viera. El arnés ahora
AVISA cuando el contador está en 3 («esta corrida va a abrir el diálogo, no el navegador») y la
receta para una serie queda escrita: pinnear `--crashes 0` en cada corrida, que resetea la base
(S1 lo muestra partiendo de 5).

También cae una candidata mía, con un cero que viene con control (medido por la otra sesión): el pref
no tiene default en este build, así que fijarlo en 0 SÍ se persiste y el «ausente» no era el pin.
This commit is contained in:
Sergio
2026-09-15 18:52:48 +00:00
parent 721845fb37
commit 98c9e4daa6
3 changed files with 150 additions and 69 deletions
+65 -7
View File
@@ -2185,13 +2185,65 @@ limpieza. Entonces la desaparición del 16 entre las 17:12 y las 17:20 **no tien
medida**, y la atribución «Gecko lo borró al mostrarlo» se retira. Dos candidatas, las dos sin
comprobar: que el `prefs.js` se perdiera en el kill (cuando se lo leyó con `debugfs` figuraba de 0
bytes, y ese volcado no es fiable — es la lección del párrafo de `debugfs`), o que un arranque que
TERMINA sí lo limpie, que es lo que hace upstream pero que acá no se puede atribuir: **todas las
corridas que pintaron llevaban `--crashes 0` pinneado, o sea el valor por defecto, y un pref igual al
default no se persiste**. El «ausente» de esas corridas puede ser eso.
TERMINA sí lo limpie, que es lo que hace upstream.
La medición que lo cierra, y que sale gratis de la serie sana: dejar el contador en 1 o 2 **sin
pinnearlo**, correr hasta que pinte y leerlo después. Si pasa a ausente, limpia el arranque que
termina; si sigue en 2, no limpia nada y lo del 16 fue el fichero.
⚠ Hubo una tercera candidata, mía, y **está descartada con un cero que viene con control**: «el
`--crashes 0` fija el valor por DEFECTO y un pref igual al default no se persiste, así que el
“ausente” prueba el pin y no una limpieza». No: `toolkit.startup.recent_crashes` **no tiene default
en este build**, y por eso un 0 puesto a mano sí se escribe. Tres lugares del artefacto sellado lo
dicen y el cuarto es el que convierte a los otros en evidencia:
greprefs.js (omni de toolkit) → 0 líneas con «toolkit.startup»
browser/omni.ja defaults/preferences/*.js → 0 líneas con «recent_crashes»
libxul.so, strings «sMirror_toolkit_startup*» → 0 ⇒ no es pref de StaticPrefList
libxul.so, strings «sMirror_browser_crashReporter*» → 2 ⇐ EL CONTROL, que TENÍA que dar positivo
Los dos primeros ceros no valen solos, y el primero es el ejemplo de por qué: `greprefs.js` da cero
porque ahí no vive **ningún** `toolkit.startup.*`, no porque el pref no exista. Un `grep` que
devuelve 0 puede ser una ausencia o un sitio equivocado, y las dos se ven igual; lo único que las
separa es un patrón hermano que tenga que dar positivo en el mismo fichero. (Y una distinción que se
parece a otra y no lo es: el binario lee ese pref con un **0 de respaldo en el sitio del `GetInt`**,
que no es un default registrado y no evita que el valor se escriba.)
##### La serie sana — y lo que refuta: **pintar no es TERMINAR**
Cuatro arranques FRÍOS en serie, el perfil partiendo del 5 que dejó la corrida del umbral, con
`--until-paint` salvo la tercera (matada a los 60 s a propósito):
| corrida | pin | antes | después | ventana | primera pintura |
|---|---|---|---|---|---|
| **S1** 18:27 | `--crashes 0` | 5 | 1 | el navegador | ✓ **+97 s** |
| **S2** 18:33 | — | 1 | 2 | el navegador | ✓ **+98 s** |
| **S3** 18:38 | — | 2 | 3 | (matada a los 60 s) | — |
| **S4** 18:50 | — | 3 | 4 | **el diálogo** (`min_size(117, 37)`, título Troubleshoot) | ✗ en 420 s |
Tres cosas, y la tercera no la esperaba nadie:
1. **el número de la tasa, por fin con perfil sano: +97 s y +98 s**, dos corridas independientes y
pegadas —contra los +123, +195, +197 y +204 de antes—. Con el anfitrión más descargado el mismo
artefacto pinta en la mitad de tiempo, o sea que el número de esta serie es de **la máquina y la
carga tanto como del producto**: se publica con sus condiciones o no se publica;
2. **el umbral se reprodujo solo, en otra secuencia y sin buscarlo**: S4 arrancó con 3 guardado,
sumó a 4 y abrió el diálogo. Es la segunda medición independiente del mismo borde, y esta vez la
ventana se identificó por `min_size` y no por el título;
3. ⚠⚠ **y una corrida que PINTA no limpia el contador.** S2 pintó y dejó el 2; S1 pintó y dejó 1.
Más todavía: `toolkit.startup.last_success` vale **1789494795 en las cuatro corridas** —la marca
del arranque de las 17:53— o sea que **el gancho de cierre no llegó a correr ni una sola vez**,
incluso en las que pintaron. Pintar no es terminar el arranque.
⇒ **la pregunta de quién limpia el contador sigue SIN medir**, y el §6.10.terdecies decía que esta
serie la iba a cerrar. No la cierra: ninguna corrida nuestra llegó nunca al gancho, así que las dos
candidatas del 16 siguen vivas y hace falta una corrida que deje al navegador **terminar de
arrancar** (y salir limpio) para preguntárselo.
**Y la consecuencia para el instrumento es lo más caro de la serie:** con `--until-paint`, **cada
corrida suma uno**, pinte o no pinte. Cuatro corridas envenenan cualquier perfil, así que una serie
larga se rompe sola a la cuarta — que es exactamente lo que había pasado ayer sin que nadie lo viera.
Dos formas de convivir con eso, las dos escritas en el arnés: **pinnear `--crashes 0` en cada corrida
de una serie** (S1 muestra que el pin funciona incluso partiendo de 5: resetea la base y el
incremento del arranque la deja en 1, lejos del borde), o dejar que el navegador llegue al gancho de
cierre, que cuesta más tiempo de VM del que cuesta medir la pintura. Y mientras tanto el arnés
**avisa** cuando el contador está en 3: la corrida siguiente va a abrir el diálogo y no el navegador.
**Un discriminador que salió gratis y sirve para siempre:** el `ATUQ-EXIT` de una fase que matamos es
**137** (128+9) y el de una corrida que se fue sola por el diálogo es **0**. El código de salida
@@ -2266,7 +2318,13 @@ con el árbol de fuentes, pero con la mitigación ya puesta. Dos consecuencias:
**De ahí sale el discriminador barato entre las dos ventanas**, y vale para cualquier corrida
futura: el navegador pide `set_min_size(638, 120)` —después (690, 172)— y
`set_max_size(16332, 16332)`; el diálogo pide `set_min_size(117, 37)` y `set_max_size(348, 16332)`.
Con mirar el `min_size` se sabe cuál abrió, sin leer el título.
Con mirar el `min_size` se sabe cuál abrió, **y hay que mirar ése y no el título**: `set_title`
también las separa pero está TRADUCIDO, así que en una imagen en castellano el `grep` por
«Troubleshoot Mode» deja de enganchar y su ausencia se lee como «no salió el diálogo» — la
conclusión contraria a la verdadera. El `min_size` es la misma pregunta hecha a un número. (Y el
`348` del diálogo sale de su propio Fluent: `troubleshoot-mode-window .style = max-width: 400px`.
Una cadena de localización decidiendo geometría, que es por qué el 117×70 no se parecía al tamaño
de nada.)
Dos cosas más de esa corrida: el `xulstore` quedó igual ⇒ **una corrida sana no ensucia lo que el
perfil recuerda**; y `recent_crashes_despues` salió **ausente**, que en su momento se leyó como
+76 -62
View File
@@ -1,67 +1,5 @@
{
"corridas": [
{
"medido": "2026-09-14T17:51:50Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": null,
"presupuesto_s": 420,
"ventana_s": 480,
"cadencia_s": 30,
"lanzamiento": "perfil del usuario",
"video": "vga+virtio-gpu (dos DRM)",
"mem_mb": 2560,
"vcpus": 2,
"acel": "tcg",
"guion": "scripts/cosmic/atuq-en-imagen.py",
"pantallas_fotografiadas": 1
},
{
"medido": "2026-09-14T18:10:43Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": null,
"presupuesto_s": 420,
"ventana_s": 480,
"cadencia_s": 30,
"lanzamiento": "perfil del usuario",
"video": "vga+virtio-gpu (dos DRM)",
"mem_mb": 2560,
"vcpus": 2,
"acel": "tcg",
"guion": "scripts/cosmic/atuq-en-imagen.py",
"pantallas_fotografiadas": 1
},
{
"medido": "2026-09-14T18:25:53Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": null,
"presupuesto_s": 420,
"ventana_s": 480,
"cadencia_s": 30,
"lanzamiento": "perfil del usuario",
"video": "vga+virtio-gpu (dos DRM)",
"mem_mb": 2560,
"vcpus": 2,
"acel": "tcg",
"guion": "scripts/cosmic/atuq-en-imagen.py",
"pantallas_fotografiadas": 1
},
{
"medido": "2026-09-14T18:54:22Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": 312,
"presupuesto_s": 420,
"ventana_s": 480,
"cadencia_s": 40,
"lanzamiento": "perfil del usuario",
"video": "vga+virtio-gpu (dos DRM)",
"mem_mb": 2560,
"vcpus": 2,
"acel": "tcg",
"guion": "scripts/cosmic/atuq-en-imagen.py",
"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",
@@ -501,6 +439,82 @@
"recent_crashes_fijado": null,
"recent_crashes_antes": 4,
"recent_crashes_despues": 5
},
{
"medido": "2026-09-15T18:27:01Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": 97,
"pantalla": "gpu0",
"pantallas_fotografiadas": 1,
"presupuesto_s": 420,
"ventana_s": 420,
"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",
"recent_crashes_fijado": 0,
"recent_crashes_antes": 5,
"recent_crashes_despues": 1
},
{
"medido": "2026-09-15T18:33:05Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": 98,
"pantalla": "gpu0",
"pantallas_fotografiadas": 1,
"presupuesto_s": 420,
"ventana_s": 420,
"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",
"recent_crashes_fijado": null,
"recent_crashes_antes": 1,
"recent_crashes_despues": 2
},
{
"medido": "2026-09-15T18:38:38Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": null,
"pantalla": null,
"pantallas_fotografiadas": 1,
"presupuesto_s": 420,
"ventana_s": 60,
"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",
"recent_crashes_fijado": null,
"recent_crashes_antes": 2,
"recent_crashes_despues": 3
},
{
"medido": "2026-09-15T18:50:31Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
"segundos_primera_pintura": null,
"pantalla": null,
"pantallas_fotografiadas": 1,
"presupuesto_s": 420,
"ventana_s": 420,
"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",
"recent_crashes_fijado": null,
"recent_crashes_antes": 3,
"recent_crashes_despues": 4
}
]
}