From: Ardis Lu Date: Thu, 23 Mar 2023 06:45:31 +0000 (-0700) Subject: Periodically pass worker status to main thread X-Git-Url: https://git.ardis.lu/?a=commitdiff_plain;h=abddb3e17574d5865c116cc6400f8cdb0d4c9b6f;p=4-byte-gen Periodically pass worker status to main thread --- diff --git a/index.html b/index.html index a41ca89..e41690f 100644 --- a/index.html +++ b/index.html @@ -402,13 +402,14 @@ function handleStartAll(e) { for (const row of state.values()) { row.worker = new Worker('/worker.js', { type: 'module' }); - row.worker.postMessage({ name: row.name, parametersTypes: row.parametersTypes, minimum: parseInt(minimum.value) }); + row.worker.postMessage({ name: row.name, parametersTypes: row.parametersTypes, seed: row.seed, minimum: parseInt(minimum.value) }); row.worker.addEventListener('message', e => { - const { functionName, hash, counter } = e.data; + const { functionName, hash, counter, completed } = e.data; row.optimizedName = functionName; row.optimizedSelector = hash; row.seed = counter; - updateUi(state) + row.status = completed ? 'Completed' : 'Searching'; + updateUi(state); }); } } diff --git a/worker.js b/worker.js index 43e8308..96188b4 100644 --- a/worker.js +++ b/worker.js @@ -17,20 +17,23 @@ function validate(functionName, minimum) { } } -function calculateOptimizedName(name, parametersTypes, minimum) { - let counter = 0n; +function calculateOptimizedName(name, parametersTypes, seed, minimum) { + let counter = BigInt(seed); let functionName = `${name}_${counter}(${parametersTypes})`; let hash = validate(functionName, minimum); while (!hash) { counter++; functionName = `${name}_${counter.toString(36)}(${parametersTypes})`; hash = validate(functionName, minimum); + if (counter % 1000n === 0n) { + postMessage({ functionName, hash, counter, completed: false }); + } } return { functionName, hash, counter }; } addEventListener('message', e => { - const { name, parametersTypes, minimum } = e.data; - const { functionName, hash, counter } = calculateOptimizedName(name, parametersTypes, minimum); - postMessage({ functionName, hash, counter }); + const { name, parametersTypes, seed = 0, minimum } = e.data; + const { functionName, hash, counter } = calculateOptimizedName(name, parametersTypes, seed, minimum); + postMessage({ functionName, hash, counter, completed: true }); });