Medidor de FPS y perfilado del renderizado

Senzoukria incluye dos lecturas de tasa de fotogramas, un medidor global que se activa con Ctrl+Mayús+F y un contador por gráfico junto al eje de precios, además de un perfilador de las pasadas de renderizado cuyos tiempos van a la consola en desarrollo o si lo habilitas.

Senzoukria · Documentación · Actualizado en septiembre de 2026


Dónde encontrarlo

Medidor global
Ctrl+Mayús+F lo alterna; la elección se recuerda entre arranques
Contador del gráfico
Arriba del gráfico, a la izquierda del eje de precios, refrescado cada 500 ms
Nitidez del renderizado
Ajustes → Rendimiento → 1×, 1,5× o 2×; por defecto 1,5×
Salida del perfilador
Líneas de consola con la etiqueta [fp-perf], una por segundo, en versiones de desarrollo o si lo activas

Qué hace

El medidor global de FPS es una tira de diagnóstico pensada para encenderla treinta segundos y comprobar una cifra. Muestra los fotogramas por segundo del último segundo, el peor tiempo de fotograma de ese segundo en milisegundos, la frecuencia de refresco detectada de la pantalla (mediana de 60 intervalos medidos al montarse) y, cuando la ventana recupera el foco, los FPS medios y mínimos medidos mientras estaba en segundo plano. Esa última cifra responde a si la aplicación está siendo estrangulada detrás de otra. Cuando Windows pide movimiento reducido, la tira indica «animaciones OFF (Windows)», porque el fondo se congela entonces a propósito.

El contador del gráfico es otra medida: desde septiembre de 2026 cuenta los fotogramas que el hilo principal entrega realmente a la pantalla mientras el gráfico está visible, no el número de repintados. Por eso sigue la tasa del panel (60, 100, 144, 240) y solo baja ante un tirón real. El recuento de repintados se quedó en los registros [fp-perf], bajo painted=. Una pausa de más de un segundo sin fotograma, por ejemplo un gráfico oculto o una ventana minimizada, reinicia la medición en lugar de contarla como bloqueo, y el propio gráfico solo pinta cuando algo cambia, mediante un bucle de fotogramas que mantiene como mucho uno pendiente y ninguno mientras el gráfico está oculto.

Lecturas y umbrales

Colores tal como se calculan en el código
LecturaVerdeAmarilloRojo
Medidor global (frente a la frecuencia detectada)≥ 92 % de la frecuencia de refresco≥ 70 %por debajo del 70 %
Contador del gráfico (frente al mejor de las 10 últimas lecturas)≥ 90 % del pico reciente y ≥ 50 fps≥ 70 % del pico, o de 30 a 49 fpspor debajo del 70 % del pico, o menos de 30 fps
Estadísticas en segundo planomínimo ≥ 60 fpsmínimo por debajo de 60 fps

Ajustes

Qué cambia el coste del renderizado
AjustePor defectoQué cambia
Nitidez del renderizado1,5×Límite de la relación de píxeles del lienzo. 1× reduce a la mitad los píxeles en pantallas HiDPI; 2× es lo más nítido y lo más pesado. Opciones: 1×, 1,5×, 2×.
Modo de rendimientoEquilibradoRendimiento fija 1×, Equilibrado 1,5× y Precisión 2× (junto con otros parámetros). Tocar un parámetro a mano pasa el modo a Manual.
Registros de rendimientoDesactivados en las versiones de distribuciónPon senzoukria.perfLogs a 1 en localStorage y recarga para habilitar las líneas [fp-perf] en una versión de distribución.

Perfilado de las pasadas de renderizado

Cada pasada de dibujo del renderizador del footprint (celdas, perfiles, niveles GEX, marcadores de noticias, el commit del panel DOM, los commits de React) se cronometra con un perfilador compartido. Una vez por segundo el lienzo lo vuelca e imprime en consola una línea ordenada: milisegundos totales y medios por pasada, la peor pasada, el número de commits de React y el coste del panel DOM. El perfilador no guarda ninguna referencia al lienzo ni a React, y las ventanas emergentes tienen su propia instancia, así que las mediciones nunca se mezclan entre ventanas.

Estos registros están silenciados en las versiones distribuidas porque la consola del WebView retiene todo lo que se escribe, y un registro por segundo durante horas cuesta memoria. Están activos en npm run dev y se pueden habilitar en la máquina de un usuario con la clave de activación anterior.

Límites y trampas

Cómo leer las cifras:

  • El contador del gráfico se detiene en lugar de informar cero: cuando el gráfico está oculto o la ventana inactiva, la medición se pausa y vuelve a empezar de cero en el siguiente fotograma.
  • Los colores son relativos al pico reciente, así que los mismos 120 fps se leen en verde en una pantalla de 120 Hz y en ámbar en una de 240 Hz.
  • La frecuencia de refresco detectada es una mediana de intervalos entre fotogramas; en una máquina que no da abasto puede leerse por debajo de la tasa real del panel.
  • El medidor global ejecuta su propio bucle requestAnimationFrame; déjalo apagado fuera de los diagnósticos.
  • Las mediciones en segundo plano necesitan que la ventana pierda el foco y lo recupere; la tira muestra solo el último período en segundo plano.

Esta página en otros idiomas

Preguntas frecuentes

¿Cómo muestro el medidor de FPS?
Pulsa Ctrl+Mayús+F. Vuelve a pulsarlo o haz clic en ✕ para ocultarlo. El estado se guarda en senz.fpsMeter y se restaura en el siguiente arranque.
El contador del gráfico marca 45 fps en un monitor de 144 Hz. ¿Qué significa?
Significa que el hilo principal entregó 45 fotogramas en el último segundo mientras el gráfico estaba visible, así que algo lo está frenando. El color es relativo: el verde exige al menos el 90 % del mejor de las diez últimas lecturas y 50 fps, y por debajo de 30 fps es rojo sea cual sea la pantalla. Compáralo con el medidor global, que mide el bucle de animación frente a la frecuencia detectada.
¿Dónde están las cifras del perfilado del renderizado?
En la consola de desarrollo, como líneas [fp-perf] una vez por segundo, disponibles en versiones de desarrollo o tras poner senzoukria.perfLogs a 1 en localStorage y recargar.