pixi.js
Version:
PixiJS — The HTML5 Creation Engine =============
1 lines • 7.47 kB
Source Map (JSON)
{"version":3,"file":"WorkerManager.mjs","sources":["../../../../src/assets/loader/workers/WorkerManager.ts"],"sourcesContent":["import CheckImageBitmapWorker from 'worker:./checkImageBitmap.worker.ts';\nimport LoadImageBitmapWorker from 'worker:./loadImageBitmap.worker.ts';\n\nimport type { TextureSourceOptions } from '../../../rendering/renderers/shared/texture/sources/TextureSource';\nimport type { ResolvedAsset } from '../../types';\n\nlet UUID = 0;\nlet MAX_WORKERS: number;\n\ntype LoadImageBitmapResult = {\n data?: ImageBitmap,\n error?: Error,\n uuid: number,\n id: string,\n};\n\nclass WorkerManagerClass\n{\n public worker: Worker;\n private _resolveHash: {\n [key: string]: {\n resolve: (...param: any[]) => void;\n reject: (...param: any[]) => void;\n }\n };\n private readonly _workerPool: Worker[];\n private readonly _queue: {\n id: string;\n arguments: any[];\n resolve: (...param: any[]) => void;\n reject: (...param: any[]) => void;\n }[];\n private _initialized = false;\n private _createdWorkers = 0;\n private _isImageBitmapSupported?: Promise<boolean>;\n\n constructor()\n {\n this._workerPool = [];\n this._queue = [];\n\n this._resolveHash = {};\n }\n\n public isImageBitmapSupported(): Promise<boolean>\n {\n if (this._isImageBitmapSupported !== undefined) return this._isImageBitmapSupported;\n\n this._isImageBitmapSupported = new Promise((resolve) =>\n {\n const { worker } = new CheckImageBitmapWorker();\n\n worker.addEventListener('message', (event: MessageEvent<boolean>) =>\n {\n worker.terminate();\n CheckImageBitmapWorker.revokeObjectURL();\n resolve(event.data);\n });\n });\n\n return this._isImageBitmapSupported;\n }\n\n public loadImageBitmap(src: string, asset?: ResolvedAsset<TextureSourceOptions<any>>): Promise<ImageBitmap>\n {\n return this._run('loadImageBitmap', [src, asset?.data?.alphaMode]) as Promise<ImageBitmap>;\n }\n\n private async _initWorkers()\n {\n if (this._initialized) return;\n\n this._initialized = true;\n }\n\n private _getWorker(): Worker\n {\n if (MAX_WORKERS === undefined)\n {\n MAX_WORKERS = navigator.hardwareConcurrency || 4;\n }\n let worker = this._workerPool.pop();\n\n if (!worker && this._createdWorkers < MAX_WORKERS)\n {\n // only create as many as MAX_WORKERS allows..\n this._createdWorkers++;\n worker = new LoadImageBitmapWorker().worker;\n\n worker.addEventListener('message', (event: MessageEvent) =>\n {\n this._complete(event.data);\n\n this._returnWorker(event.target as Worker);\n this._next();\n });\n }\n\n return worker;\n }\n\n private _returnWorker(worker: Worker)\n {\n this._workerPool.push(worker);\n }\n\n private _complete(data: LoadImageBitmapResult): void\n {\n if (data.error !== undefined)\n {\n this._resolveHash[data.uuid].reject(data.error);\n }\n else\n {\n this._resolveHash[data.uuid].resolve(data.data);\n }\n\n this._resolveHash[data.uuid] = null;\n }\n\n private async _run(id: string, args: any[]): Promise<any>\n {\n await this._initWorkers();\n // push into the queue...\n\n const promise = new Promise((resolve, reject) =>\n {\n this._queue.push({ id, arguments: args, resolve, reject });\n });\n\n this._next();\n\n return promise;\n }\n\n private _next(): void\n {\n // nothing to do\n if (!this._queue.length) return;\n\n const worker = this._getWorker();\n\n // no workers available...\n if (!worker)\n {\n return;\n }\n\n const toDo = this._queue.pop();\n\n const id = toDo.id;\n\n this._resolveHash[UUID] = { resolve: toDo.resolve, reject: toDo.reject };\n\n worker.postMessage({\n data: toDo.arguments,\n uuid: UUID++,\n id,\n });\n }\n}\n\nconst WorkerManager = new WorkerManagerClass();\n\nexport {\n WorkerManager,\n};\n"],"names":["CheckImageBitmapWorker","LoadImageBitmapWorker"],"mappings":"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"}