Files
Ustagammon/web/engine-worker.mjs
T
Pierre MARTINandClaude Opus 5.5 120367e6d3 Page de test et page de mesure du moteur WebAssembly
web/ : le moteur tourne dans un Web Worker (module ES) ; la page de
test donne le meilleur coup d'une position et son temps de calcul ;
la page de mesure chronomètre les positions de référence, mesure la
taille téléchargée et la mémoire, compare aux seuils de l'étape 0b et
produit un rapport à copier. make bench fait la même mesure sous Node,
make deploy-web sert les pages sur le réseau local. Guide de test pour
le Fairphone 4 dans docs/guide-test-etape-0.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 19:13:04 +01:00

39 lines
1.4 KiB
JavaScript

// engine-worker.mjs -- Web Worker qui fait tourner le moteur WebAssembly.
//
// Copyright (C) 2026 les auteurs d'Ustagammon.
// Licence : GPLv3 ou ultérieure (voir LICENSE).
//
// Le moteur calcule ici, jamais sur le fil d'affichage de la page. Messages :
// - envoyé une fois au chargement : { type: "ready", loadMs, memoryBytes }
// ou { type: "failed", message } ;
// - reçu : { id, args }, les arguments d'une commande engine-cli ;
// - répondu : { id, result, ms, memoryBytes } ou { id, error }.
// Les commandes sont traitées une à une, dans l'ordre d'arrivée.
import createEngineModule from "./wasm/engine.mjs";
import { loadEngine } from "./engine-wasm.mjs";
const start = performance.now();
const wasmDir = new URL("wasm/", import.meta.url).href;
const ready = loadEngine(createEngineModule, wasmDir);
ready.then(
(engine) => postMessage({
type: "ready",
loadMs: performance.now() - start,
memoryBytes: engine.memoryBytes(),
}),
(error) => postMessage({ type: "failed", message: String(error.message || error) }),
);
onmessage = async (event) => {
const { id, args } = event.data;
try {
const engine = await ready;
const { result, ms } = engine.run(args);
postMessage({ id, result, ms, memoryBytes: engine.memoryBytes() });
} catch (error) {
postMessage({ id, error: String(error.message || error) });
}
};