maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
34 lines (29 loc) • 1.1 kB
text/typescript
import WorkerPool, {PRELOAD_POOL_ID} from './worker_pool';
let globalWorkerPool;
/**
* Creates (if necessary) and returns the single, global WorkerPool instance
* to be shared across each Map
* @private
*/
export default function getGlobalWorkerPool () {
if (!globalWorkerPool) {
globalWorkerPool = new WorkerPool();
}
return globalWorkerPool;
}
export function prewarm() {
const workerPool = getGlobalWorkerPool();
workerPool.acquire(PRELOAD_POOL_ID);
}
export function clearPrewarmedResources() {
const pool = globalWorkerPool;
if (pool) {
// Remove the pool only if all maps that referenced the preloaded global worker pool have been removed.
if (pool.isPreloaded() && pool.numActive() === 1) {
pool.release(PRELOAD_POOL_ID);
globalWorkerPool = null;
} else {
console.warn('Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()');
}
}
}