3 lines
2.8 KiB
JavaScript
3 lines
2.8 KiB
JavaScript
const u=self;let l,x,_,k,F,T;async function S(o){const e=new URL(o,u.location.origin).href,t=await import(new URL("nvsim-pkg/nvsim.js",e).href);await t.default(),l=t.WasmPipeline,x=t.referenceSceneJson,_=t.expectedReferenceWitnessHex,k=t.hexWitness,F=t.referenceWitness,T=t.runTransient}let c=null,b="",y="",W=BigInt(3405691582),g=!1,d=null,a=0,w=0;function f(){y||(y=x()),b||(b=JSON.stringify({digitiser:{f_s_hz:1e4,f_mod_hz:1e3},sensor:{gamma_fwhm_hz:1e6,t1_s:.005,t2_s:1e-6,t2_star_s:2e-7,contrast:.03,n_spins:1e12,shot_noise_disabled:!1},dt_s:null})),c?.free?.(),c=new l(y,b,Number(W&0xFFFFFFFFn))}function s(o,e=[]){u.postMessage(o,e)}function H(){if(d!==null)return;w=performance.now(),a=0;const o=()=>{if(!g||!c)return;const e=32,n=c.run(e);a+=e;const t=(performance.now()-w)/1e3,i=t>0?a/t:0;s({type:"frames",batch:n.buffer,count:e,fps:i,framesEmitted:a},[n.buffer]),d=u.setTimeout(o,16)};d=u.setTimeout(o,0)}function h(){d!==null&&(u.clearTimeout(d),d=null)}u.addEventListener("message",async o=>{const e=o.data;try{switch(e.type){case"boot":{const n=e.base??"/";await S(n),f(),s({type:"booted",id:e.id,buildVersion:l.buildVersion(),frameMagic:l.frameMagic(),frameBytes:l.frameBytes(),expectedWitnessHex:_()});break}case"setScene":{y=e.json,f(),s({type:"ack",id:e.id});break}case"setConfig":{b=e.json,f(),s({type:"ack",id:e.id});break}case"setSeed":{W=BigInt(e.seed),f(),s({type:"ack",id:e.id});break}case"reset":{h(),g=!1,f(),a=0,s({type:"ack",id:e.id}),s({type:"state",running:!1,framesEmitted:a});break}case"run":{c||f(),g=!0,H(),s({type:"ack",id:e.id}),s({type:"state",running:!0,framesEmitted:a});break}case"pause":{g=!1,h(),s({type:"ack",id:e.id}),s({type:"state",running:!1,framesEmitted:a});break}case"step":{c||f();const n=c.run(1);a+=1,s({type:"frames",batch:n.buffer,count:1,fps:0,framesEmitted:a},[n.buffer]),s({type:"ack",id:e.id});break}case"witnessGenerate":{c||f();const n=e.samples??256,t=c.runWithWitness(n),i=k(t.witness);s({type:"witness",id:e.id,witness:t.witness.buffer,hex:i,frameCount:t.frameCount},[t.witness.buffer]);break}case"witnessVerify":{const n=e.expected,t=new Uint8Array(n),i=F();let p=i.length===t.length;if(p){for(let m=0;m<t.length;m++)if(i[m]!==t[m]){p=!1;break}}const r=i.slice().buffer;s({type:"verify",id:e.id,ok:p,actual:r,actualHex:k(i)},[r]);break}case"runTransient":{const n=e.scene,t=e.config,i=e.seed??0,p=e.samples??64,r=T(n,t,i,p);s({type:"transient",id:e.id,bRecoveredT:Array.from(r.bRecoveredT),bMagT:r.bMagT,noiseFloorPtSqrtHz:r.noiseFloorPtSqrtHz,sigmaPt:Array.from(r.sigmaPt),nFrames:r.nFrames,witnessHex:r.witnessHex});break}case"buildId":{s({type:"buildId",id:e.id,buildId:`nvsim@${l.buildVersion()}`});break}default:s({type:"err",id:e.id,msg:`unknown op ${e.type}`})}}catch(n){s({type:"err",id:e.id,msg:n.message??String(n)})}});s({type:"ready"});
|
|
//# sourceMappingURL=worker-C19MRcXs.js.map
|