starting work on glb(s) management 2

This commit is contained in:
Yeicor
2024-02-16 21:49:01 +01:00
parent ee160c1ee4
commit 7f7ff86f9f

View File

@@ -51,28 +51,24 @@ async function singleBlob(reader: ReadableStream<Uint8Array>, stopAfter: number
// Make sure the reader reads the entire stream at once. // Make sure the reader reads the entire stream at once.
const readerImpl = reader.getReader(); const readerImpl = reader.getReader();
let bufferedChunks: Uint8Array = new Uint8Array(); let bufferedChunks: Uint8Array = new Uint8Array();
try { let done = false;
let done = false; let length = 0;
let length = 0; while (!done) {
while (!done) { let {value, done: d} = await readerImpl.read();
let {value, done: d} = await readerImpl.read(); if (value) {
if (value) { // TODO: This is inefficient. We should be able to avoid copying the buffer each time. byob?
// TODO: This is inefficient. We should be able to avoid copying the buffer each time. byob? let oldBuffer = bufferedChunks;
let oldBuffer = bufferedChunks; let newLength = bufferedChunks.length + value.length;
let newLength = bufferedChunks.length + value.length; if (stopAfter !== null && newLength > stopAfter) {
if (stopAfter !== null && newLength > stopAfter) { newLength = stopAfter;
newLength = stopAfter; value = value.slice(0, stopAfter - bufferedChunks.length);
value = value.slice(0, stopAfter - bufferedChunks.length);
}
bufferedChunks = new Uint8Array(newLength);
bufferedChunks.set(oldBuffer);
bufferedChunks.set(value, length);
length += value.length;
} }
done = d; bufferedChunks = new Uint8Array(newLength);
bufferedChunks.set(oldBuffer);
bufferedChunks.set(value, length);
length += value.length;
} }
} finally { done = d;
await readerImpl.cancel();
} }
return new ReadableStream<Uint8Array>({ return new ReadableStream<Uint8Array>({
start(controller) { start(controller) {