diff options
author | 2022-07-12 04:40:12 -0400 | |
---|---|---|
committer | 2022-07-12 01:40:12 -0700 | |
commit | a9e4ff2029a769737982fcf7e0b7d76d35cf35e4 (patch) | |
tree | 497832408d926e2bed779fcec4ba655624a29792 /bench/snippets/concat.js | |
parent | 7eea306b0ff46a27f134809a9b3c12bf4b38fa7e (diff) | |
download | bun-a9e4ff2029a769737982fcf7e0b7d76d35cf35e4.tar.gz bun-a9e4ff2029a769737982fcf7e0b7d76d35cf35e4.tar.zst bun-a9e4ff2029a769737982fcf7e0b7d76d35cf35e4.zip |
cleanup benchmarks folder (#587)
* cleanup benchmarks
* run prettier
Diffstat (limited to 'bench/snippets/concat.js')
-rw-r--r-- | bench/snippets/concat.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/bench/snippets/concat.js b/bench/snippets/concat.js new file mode 100644 index 000000000..46c6e0f7d --- /dev/null +++ b/bench/snippets/concat.js @@ -0,0 +1,66 @@ +import { bench, group, run } from "mitata"; +import { readFileSync } from "fs"; +import { allocUnsafe } from "bun"; + +function polyfill(chunks) { + var size = 0; + for (const chunk of chunks) { + size += chunk.byteLength; + } + var buffer = new ArrayBuffer(size); + var view = new Uint8Array(buffer); + var offset = 0; + for (const chunk of chunks) { + view.set(chunk, offset); + offset += chunk.byteLength; + } + return buffer; +} + +function polyfillUninitialized(chunks) { + var size = 0; + for (const chunk of chunks) { + size += chunk.byteLength; + } + var view = allocUnsafe(size); + + var offset = 0; + for (const chunk of chunks) { + view.set(chunk, offset); + offset += chunk.byteLength; + } + return view.buffer; +} + +const chunkGroups = [ + [Uint8Array.from([123]), Uint8Array.from([456]), Uint8Array.from([789])], + Array.from(readFileSync(import.meta.path)).map((a) => Uint8Array.from([a])), + [readFileSync(import.meta.path)], + Array.from({ length: 42 }, () => readFileSync(import.meta.path)), + Array.from({ length: 2 }, () => + new TextEncoder().encode(readFileSync(import.meta.path, "utf8").repeat(100)) + ), +]; + +for (const chunks of chunkGroups) { + group( + `${chunks.reduce( + (prev, curr, i, a) => prev + curr.byteLength, + 0 + )} bytes for ${chunks.length} chunks`, + () => { + bench("Bun.concatArrayBuffers", () => { + Bun.concatArrayBuffers(chunks); + }); + bench("Uint8Array.set", () => { + polyfill(chunks); + }); + + bench("Uint8Array.set (uninitialized memory)", () => { + polyfillUninitialized(chunks); + }); + } + ); +} + +await run(); |