gestion_table_tournante_libre/scripts/banc/projet.js
Mathieu Benoit 079b158587 [ADD] bench: headless Chromium harness, statistics and make banc entry
Rendering thresholds must be measured in a real browser, apart from the
test series that guard behaviour. A separate Vitest project runs
scripts/banc/**/*.banc.js in headless Chromium at 1366 x 700, scale 1,
without frame-rate limit, CPU throttling set per run; the statistics module
gives medians and spreads over repeated samples. Outputs go to an ignored
folder. make banc and npm run banc name the entry; its orchestrator comes
with the bench measures.
Checked: red first; 3410 node tests green from the index; the bench project
runs its harness.

--- FR ---

[ADD] banc : harnais Chromium sans tête, statistiques, entrée make banc

Les seuils de rendu se mesurent dans un vrai navigateur, à part des séries
qui gardent le comportement. Un projet Vitest distinct joue
scripts/banc/**/*.banc.js dans Chromium sans tête à 1366 × 700, facteur 1,
sans limite d'images, le ralentissement du processeur réglé par lancement ;
le module de statistiques rend médianes et dispersions sur des mesures
répétées. Les sorties vont dans un dossier ignoré. make banc et npm run banc
nomment l'entrée ; son orchestrateur vient avec les mesures du banc.
Vérifié : rouge d'abord ; 3410 node verts depuis l'index ; le projet du
banc joue son harnais.

Assisted-by: Claude Opus 5.5
2026-10-09 13:03:37 -04:00

66 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// © 2026 TechnoLibre (http://www.technolibre.ca)
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
// Le projet banc de Vitest (§ 19.10), décrit sans rien charger de Vitest :
// vitest.banc.config.js l'enveloppe de defineConfig et lui donne son
// fournisseur Playwright, les gardes du banc (banc.test.js) le lisent sous
// node, où une épreuve ne charge pas le lanceur hors de test/lanceur.js
// (§ 14.8).
//
// Chromium reçoit les options des épreuves du navigateur (test/chromium.js),
// plus deux drapeaux qui lui ôtent sa cadence d'images : sans eux, chaque
// intervalle entre images se cale sur 16,7 ms, et un temps par image se lit
// en marches de cette hauteur. Le harnais (harnais.banc.js) vérifie que la
// cadence n'est pas bridée avant de mesurer.
//
// Le cadre d'affichage est celui des captures, 1 366 × 700 au facteur 1
// (§ 19.4, § 19.10) : la page de Playwright a ces dimensions, le cadre de
// l'épreuve aussi, et l'orchestrateur ne le met pas à l'échelle. La page
// lit le cadre par inject('cadreBanc'), qui vient d'ici seul.
//
// Les fichiers se jouent l'un après l'autre : deux mesures en même temps se
// disputeraient les processeurs. Une épreuve du banc dispose d'une
// demi-heure, un balayage de zoom à deux ralentissements y compris.
import { optionsChromium } from '../../test/chromium.js';
const CADRE = Object.freeze({ largeur: 1366, hauteur: 700 });
const DRAPEAUX_CADENCE = Object.freeze(['--disable-frame-rate-limit', '--disable-gpu-vsync']);
const DELAI_MS = 1_800_000;
/**
* Les options du fournisseur Playwright pour le banc : celles de
* optionsChromium(env), les drapeaux de cadence ajoutés à la fin des
* arguments de lancement, et un contexte de navigation au cadre du banc, au
* facteur d'échelle 1. env n'est pas modifié.
*
* @param {Record<string, string|undefined>} env
*/
export function optionsBanc(env) {
const { launchOptions = {}, ...autres } = optionsChromium(env);
return {
...autres,
launchOptions: { ...launchOptions, args: [...(launchOptions.args ?? []), ...DRAPEAUX_CADENCE] },
contextOptions: { viewport: { width: CADRE.largeur, height: CADRE.hauteur }, deviceScaleFactor: 1 },
};
}
/**
* L'objet test du projet banc, hors du fournisseur du navigateur, que
* vitest.banc.config.js ajoute à browser. Un objet neuf à chaque appel.
*/
export function projetBanc() {
return {
name: 'banc',
include: ['scripts/banc/**/*.banc.js'],
fileParallelism: false,
testTimeout: DELAI_MS,
hookTimeout: DELAI_MS,
provide: { cadreBanc: { ...CADRE } },
browser: {
enabled: true,
headless: true,
instances: [{ browser: 'chromium' }],
viewport: { width: CADRE.largeur, height: CADRE.hauteur },
},
};
}