Add wasm-feature-detect

This commit is contained in:
Maximilian Ammann 2022-04-11 15:50:18 +02:00
parent 13709b7cb7
commit 9c1fe63c9a
3 changed files with 406 additions and 938 deletions

View File

@ -1,6 +1,19 @@
import init, {create_pool_scheduler, new_thread_local_state, run} from "./dist/libs/mapr"
import {Spector} from "spectorjs"
import {WebWorkerMessageType} from "./types"
import {
bigInt,
bulkMemory,
exceptions,
multiValue,
mutableGlobals,
referenceTypes,
saturatedFloatToInt,
signExtensions,
simd,
tailCall,
threads
} from "wasm-feature-detect"
declare global {
interface Window {
@ -19,6 +32,30 @@ const isWebGLSupported = () => {
}
}
const checkWasmFeatures = async () => {
const checkFeature = async function (feature: () => Promise<boolean>) {
let result = await feature();
let msg = `The feature ${feature.name} returned: ${result}`;
if (result) {
console.log(msg);
} else {
console.warn(msg);
}
}
await checkFeature(bulkMemory);
await checkFeature(exceptions);
await checkFeature(multiValue);
await checkFeature(mutableGlobals);
await checkFeature(referenceTypes);
await checkFeature(saturatedFloatToInt);
await checkFeature(signExtensions);
await checkFeature(simd);
await checkFeature(tailCall);
await checkFeature(threads);
await checkFeature(bigInt);
}
const alertUser = (message: string) => {
console.error(message)
alert(message)
@ -72,7 +109,7 @@ const registerServiceWorker = () => {
}
}
const setupLegacyWebWorker = (schedulerPtr: number, memory: WebAssembly.Memory) => {
const setupLegacyWebWorker = (schedulerPtr: number, memory: WebAssembly.Memory) => {
let WORKER_COUNT = 4
const createWorker = (id: number) => {
const worker = new Worker(new URL('./worker.ts', import.meta.url), {
@ -101,6 +138,8 @@ const setupLegacyWebWorker = (schedulerPtr: number, memory: WebAssembly.Memory)
}
const start = async () => {
await checkWasmFeatures()
if (!checkRequirements()) {
return
}

1302
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -18,6 +18,7 @@
},
"dependencies": {
"spectorjs": "^0.9.27",
"wasm-feature-detect": "^1.2.11",
"workbox-cacheable-response": "^6.4.2",
"workbox-routing": "^6.4.2",
"workbox-strategies": "^6.4.2"