Compteur FPS et profilage du rendu

Senzoukria embarque deux affichages de fréquence d'images, un compteur global basculé par Ctrl+Maj+F et un compteur par graphique à côté de l'axe des prix, plus un profileur des passes de rendu dont les temps partent dans la console en développement ou sur activation explicite.

Senzoukria · Documentation · Mis à jour en septembre 2026


Où le trouver

Compteur global
Ctrl+Maj+F le bascule ; le choix est retenu d'un lancement à l'autre
Compteur du graphique
En haut du graphique, à gauche de l'axe des prix, rafraîchi toutes les 500 ms
Netteté du rendu
Réglages → Performance → 1×, 1,5× ou 2× ; défaut 1,5×
Sortie du profileur de passes
Lignes de console marquées [fp-perf], une par seconde, en version de développement ou sur activation

Ce que cela fait

Le compteur FPS global est une bande de diagnostic, faite pour être allumée trente secondes afin de vérifier un chiffre. Il montre les images par seconde de la dernière seconde, le temps de la pire image de cette seconde en millisecondes, la cadence de rafraîchissement détectée de l'écran (médiane de 60 intervalles d'images mesurés au montage) et, après un retour de la fenêtre au premier plan, la moyenne et le minimum de FPS mesurés pendant qu'elle était en arrière-plan. Ce dernier chiffre répond à la question de savoir si l'application est bridée derrière une autre. Quand Windows demande moins d'animations, la bande indique « animations OFF (Windows) », parce que le fond est alors volontairement figé.

Le compteur du graphique est une autre mesure : depuis septembre 2026, il compte les images que le thread principal livre réellement à l'écran pendant que le graphique est visible, pas le nombre de repeints. Il suit donc la cadence de la dalle (60, 100, 144, 240) et ne chute qu'en cas de vrai à-coup. Le décompte des repeints est resté dans les journaux [fp-perf], sous painted=. Une pause de plus d'une seconde sans image, par exemple un graphique masqué ou une fenêtre réduite, relance la mesure au lieu de compter comme un enlisement, et le graphique lui-même ne se peint que lorsque quelque chose change, via une boucle d'images qui ne garde au plus qu'une image en attente, et aucune quand le graphique est masqué.

Affichages et seuils

Couleurs telles que calculées dans le code
AffichageVertJauneRouge
Compteur global (par rapport à la cadence détectée)≥ 92 % de la cadence de rafraîchissement≥ 70 %sous 70 %
Compteur du graphique (par rapport au meilleur des 10 derniers relevés)≥ 90 % du pic récent et ≥ 50 fps≥ 70 % du pic, ou 30 à 49 fpssous 70 % du pic, ou sous 30 fps
Statistiques d'arrière-planminimum ≥ 60 fpsminimum sous 60 fps

Les réglages

Ce qui change le coût du rendu
RéglageDéfautCe que cela change
Netteté du rendu1,5×Plafond du rapport de pixels du canvas. 1× divise par deux les pixels sur les écrans HiDPI ; 2× est le plus net et le plus lourd. Options : 1×, 1,5×, 2×.
Mode de performanceÉquilibréPerformance impose 1×, Équilibré 1,5×, Précision 2× (avec d'autres curseurs). Toucher un curseur à la main fait passer le mode sur Manuel.
Journaux de performanceÉteints dans les versions publiéesMettez la clé localStorage senzoukria.perfLogs à 1 et rechargez pour activer les lignes de console [fp-perf] sur une version publiée.

Le profilage des passes de rendu

Chaque passe de dessin du renderer footprint (cellules, profils, niveaux GEX, repères d'actualités, commit du panneau DOM, commits React) est chronométrée par un profileur partagé. Une fois par seconde, le canvas le vide et imprime une ligne classée dans la console : millisecondes totales et moyennes par passe, pire passe, nombre de commits React et coût du panneau DOM. Le profileur ne garde aucune référence au canvas ni à React, et les fenêtres détachées ont leur propre instance : les mesures ne se mélangent donc jamais d'une fenêtre à l'autre.

Ces journaux sont muets dans les versions distribuées, parce que la console de la WebView retient ce qu'on y écrit, et qu'un journal par seconde pendant des heures a un coût en mémoire. Ils sont actifs en npm run dev et peuvent être activés sur la machine d'un utilisateur avec la clé d'activation ci-dessus.

Limites et pièges

Comment lire les chiffres :

  • Le compteur du graphique s'arrête plutôt que d'afficher zéro : quand le graphique est masqué ou la fenêtre inactive, la mesure est mise en pause et repart de zéro à l'image suivante.
  • Les couleurs sont relatives au pic récent : les mêmes 120 fps sont verts sur un écran 120 Hz et ambre sur un 240 Hz.
  • La cadence de rafraîchissement détectée est une médiane d'intervalles d'images ; sur une machine qui ne suit pas, elle peut s'afficher sous la cadence réelle de la dalle.
  • Le compteur global fait tourner sa propre boucle requestAnimationFrame ; laissez-le éteint hors diagnostic.
  • Les mesures d'arrière-plan demandent que la fenêtre perde le focus puis revienne ; la bande n'affiche que la dernière période d'arrière-plan.

Cette page dans d’autres langues

Questions fréquentes

Comment afficher le compteur FPS ?
Appuyez sur Ctrl+Maj+F. Appuyez à nouveau ou cliquez sur ✕ pour le masquer. L'état est conservé sous senz.fpsMeter et restauré au lancement suivant.
Le compteur du graphique indique 45 fps sur un moniteur 144 Hz. Qu'est-ce que cela veut dire ?
Que le thread principal a livré 45 images dans la dernière seconde pendant que le graphique était visible : quelque chose le retient donc. La couleur est relative : le vert demande au moins 90 % du meilleur des dix derniers relevés et 50 fps, et tout ce qui passe sous 30 fps est rouge quel que soit l'écran. Comparez avec le compteur global, qui mesure la boucle d'animation par rapport à la cadence détectée.
Où sont les chiffres du profilage du rendu ?
Dans la console de développement, en lignes [fp-perf] une fois par seconde, disponibles dans les versions de développement ou après avoir mis la clé localStorage senzoukria.perfLogs à 1 et rechargé.