using System.Diagnostics; using Microsoft.JSInterop; namespace MaBibli.Client.Scan; /// /// Mesure du coût réel du décodage dans le navigateur. /// /// CLAUDE.md ne dispose que de chiffres JIT x64 (0,53 ms/frame dans le pire cas) et d'une /// extrapolation non vérifiée pour le WASM interprété (~5-10 ms/frame). Ce banc d'essai /// donne le chiffre constaté, sur la machine de l'utilisateur, sans caméra ni code-barres. /// /// On mesure volontairement le pire cas — une frame de bruit sans code-barres — /// car c'est l'échec de décodage qui coûte le plus cher, et la quasi-totalité des frames /// d'une caméra sont dans ce cas. C'est donc lui qui gouverne le framerate atteignable. /// /// Depuis la console du navigateur : /// await DotNet.invokeMethodAsync('MaBibli.Client', 'MesurerScan', 640, 288, 20) /// public static class BancEssaiScan { [JSInvokable("MesurerScan")] public static double MesurerPireCasMs(int largeur, int hauteur, int iterations) { var rgba = new byte[largeur * hauteur * 4]; new Random(1234).NextBytes(rgba); // Un tour à blanc : la première exécution paie l'initialisation de ZXing, // qui n'a rien à voir avec le coût par frame en régime établi. IsbnScanner.TryDecode(rgba, largeur, hauteur); var depart = Stopwatch.GetTimestamp(); for (var i = 0; i < iterations; i++) { IsbnScanner.TryDecode(rgba, largeur, hauteur); } return Stopwatch.GetElapsedTime(depart).TotalMilliseconds / iterations; } }