Files
scratch-vm/test/unit/tw_util_async_limiter.js
T
GarboMuffin 20258b5a7d Limit number of concurrent createImageBitmap calls
Browsers, especially Chrome, crumble when we try to create too many
image bitmaps at once. So we'll queue them up when too many are
happening. Projects will load slightly slower but this is still much
faster than <img> with data: URIs
2022-07-31 14:06:51 -05:00

63 lines
1.2 KiB
JavaScript

const AsyncLimiter = require('../../src/util/async-limiter');
const {test} = require('tap');
test('Runs callback', async t => {
const callback = async (a, b) => a + b;
const limiter = new AsyncLimiter(callback, 2);
t.same(await Promise.all([
limiter.do(1, 2),
limiter.do(3, 4),
limiter.do(5, 6),
limiter.do(7, 8),
limiter.do(9, 10)
]), [
3,
7,
11,
15,
19
]);
t.end();
});
test('Errors', async t => {
t.plan(1);
const callback = () => Promise.reject('Error123!');
const limiter = new AsyncLimiter(callback, 10);
try {
await limiter.do();
} catch (e) {
t.equal(e, 'Error123!');
}
t.end();
});
test('Limit and queue', async t => {
const calls = [];
const callback = () => new Promise(resolve => {
calls.push({
resolve
});
});
const limiter = new AsyncLimiter(callback, 5);
for (let i = 0; i < 12; i++) {
limiter.do();
}
t.equal(calls.length, 5);
calls.forEach(i => i.resolve());
await Promise.resolve();
t.equal(calls.length, 10);
calls.forEach(i => i.resolve());
await Promise.resolve();
t.equal(calls.length, 12);
t.end();
});