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>
39 lines
1.4 KiB
JavaScript
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) });
|
|
}
|
|
};
|