deno.land / x / deno@v1.28.2 / test_ffi / tests / bench.js
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.// deno-lint-ignore-file
const targetDir = Deno.execPath().replace(/[^\/\\]+$/, "");const [libPrefix, libSuffix] = { darwin: ["lib", "dylib"], linux: ["lib", "so"], windows: ["", "dll"],}[Deno.build.os];const libPath = `${targetDir}/${libPrefix}test_ffi.${libSuffix}`;
const dylib = Deno.dlopen(libPath, { "nop": { parameters: [], result: "void" }, "add_u32": { parameters: ["u32", "u32"], result: "u32" }, "add_u64": { parameters: ["u64", "u64"], result: "u64" }, "ffi_string": { parameters: [], result: "pointer" }, "hash": { parameters: ["buffer", "u32"], result: "u32" }, "nop_bool": { parameters: ["bool"], result: "void" }, "nop_u8": { parameters: ["u8"], result: "void" }, "nop_i8": { parameters: ["i8"], result: "void" }, "nop_u16": { parameters: ["u16"], result: "void" }, "nop_i16": { parameters: ["i16"], result: "void" }, "nop_u32": { parameters: ["u32"], result: "void" }, "nop_i32": { parameters: ["i32"], result: "void" }, "nop_u64": { parameters: ["u64"], result: "void" }, "nop_i64": { parameters: ["i64"], result: "void" }, "nop_usize": { parameters: ["usize"], result: "void" }, "nop_isize": { parameters: ["isize"], result: "void" }, "nop_f32": { parameters: ["f32"], result: "void" }, "nop_f64": { parameters: ["f64"], result: "void" }, "nop_buffer": { parameters: ["buffer"], result: "void" }, "return_bool": { parameters: [], result: "bool" }, "return_u8": { parameters: [], result: "u8" }, "return_i8": { parameters: [], result: "i8" }, "return_u16": { parameters: [], result: "u16" }, "return_i16": { parameters: [], result: "i16" }, "return_u32": { parameters: [], result: "u32" }, "return_i32": { parameters: [], result: "i32" }, "return_u64": { parameters: [], result: "u64" }, "return_i64": { parameters: [], result: "i64" }, "return_usize": { parameters: [], result: "usize" }, "return_isize": { parameters: [], result: "isize" }, "return_f32": { parameters: [], result: "f32" }, "return_f64": { parameters: [], result: "f64" }, "return_buffer": { parameters: [], result: "buffer" }, // Nonblocking calls "nop_nonblocking": { name: "nop", parameters: [], result: "void" }, "nop_bool_nonblocking": { name: "nop_bool", parameters: ["bool"], result: "void", }, "nop_u8_nonblocking": { name: "nop_u8", parameters: ["u8"], result: "void" }, "nop_i8_nonblocking": { name: "nop_i8", parameters: ["i8"], result: "void" }, "nop_u16_nonblocking": { name: "nop_u16", parameters: ["u16"], result: "void", }, "nop_i16_nonblocking": { name: "nop_i16", parameters: ["i16"], result: "void", }, "nop_u32_nonblocking": { name: "nop_u32", parameters: ["u32"], result: "void", }, "nop_i32_nonblocking": { name: "nop_i32", parameters: ["i32"], result: "void", }, "nop_u64_nonblocking": { name: "nop_u64", parameters: ["u64"], result: "void", }, "nop_i64_nonblocking": { name: "nop_i64", parameters: ["i64"], result: "void", }, "nop_usize_nonblocking": { name: "nop_usize", parameters: ["usize"], result: "void", }, "nop_isize_nonblocking": { name: "nop_isize", parameters: ["isize"], result: "void", }, "nop_f32_nonblocking": { name: "nop_f32", parameters: ["f32"], result: "void", }, "nop_f64_nonblocking": { name: "nop_f64", parameters: ["f64"], result: "void", }, "nop_buffer_nonblocking": { name: "nop_buffer", parameters: ["buffer"], result: "void", }, "return_bool_nonblocking": { name: "return_bool", parameters: [], result: "bool", }, "return_u8_nonblocking": { name: "return_u8", parameters: [], result: "u8" }, "return_i8_nonblocking": { name: "return_i8", parameters: [], result: "i8" }, "return_u16_nonblocking": { name: "return_u16", parameters: [], result: "u16", }, "return_i16_nonblocking": { name: "return_i16", parameters: [], result: "i16", }, "return_u32_nonblocking": { name: "return_u32", parameters: [], result: "u32", }, "return_i32_nonblocking": { name: "return_i32", parameters: [], result: "i32", }, "return_u64_nonblocking": { name: "return_u64", parameters: [], result: "u64", }, "return_i64_nonblocking": { name: "return_i64", parameters: [], result: "i64", }, "return_usize_nonblocking": { name: "return_usize", parameters: [], result: "usize", }, "return_isize_nonblocking": { name: "return_isize", parameters: [], result: "isize", }, "return_f32_nonblocking": { name: "return_f32", parameters: [], result: "f32", }, "return_f64_nonblocking": { name: "return_f64", parameters: [], result: "f64", }, "return_buffer_nonblocking": { name: "return_buffer", parameters: [], result: "buffer", }, // Parameter checking "nop_many_parameters": { parameters: [ "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "usize", "isize", "f32", "f64", "buffer", "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "usize", "isize", "f32", "f64", "buffer", ], result: "void", }, "nop_many_parameters_nonblocking": { name: "nop_many_parameters", parameters: [ "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "usize", "isize", "f32", "f64", "pointer", "u8", "i8", "u16", "i16", "u32", "i32", "u64", "i64", "usize", "isize", "f32", "f64", "pointer", ], result: "void", nonblocking: true, },});
const { nop } = dylib.symbols;Deno.bench("nop()", () => { nop();});
const bytes = new Uint8Array(64);
const { hash } = dylib.symbols;Deno.bench("hash()", () => { hash(bytes, bytes.byteLength);});
const { ffi_string } = dylib.symbols;Deno.bench( "c string", () => Deno.UnsafePointerView.getCString(ffi_string()),);
const { add_u32 } = dylib.symbols;Deno.bench("add_u32()", () => { add_u32(1, 2);});
const { return_buffer } = dylib.symbols;Deno.bench("return_buffer()", () => { return_buffer();});
const { add_u64 } = dylib.symbols;Deno.bench("add_u64()", () => { add_u64(1, 2);});
const { return_u64 } = dylib.symbols;Deno.bench("return_u64()", () => { return_u64();});
const { return_i64 } = dylib.symbols;Deno.bench("return_i64()", () => { return_i64();});
const { nop_bool } = dylib.symbols;Deno.bench("nop_bool()", () => { nop_bool(true);});
const { nop_u8 } = dylib.symbols;Deno.bench("nop_u8()", () => { nop_u8(100);});
const { nop_i8 } = dylib.symbols;Deno.bench("nop_i8()", () => { nop_i8(100);});
const { nop_u16 } = dylib.symbols;Deno.bench("nop_u16()", () => { nop_u16(100);});
const { nop_i16 } = dylib.symbols;Deno.bench("nop_i16()", () => { nop_i16(100);});
const { nop_u32 } = dylib.symbols;Deno.bench("nop_u32()", () => { nop_u32(100);});
const { nop_i32 } = dylib.symbols;Deno.bench("nop_i32()", () => { nop_i32(100);});
const { nop_u64 } = dylib.symbols;Deno.bench("nop_u64()", () => { nop_u64(100);});
const { nop_i64 } = dylib.symbols;Deno.bench("nop_i64()", () => { nop_i64(100);});
const { nop_usize } = dylib.symbols;Deno.bench("nop_usize() number", () => { nop_usize(100);});
Deno.bench("nop_usize() bigint", () => { nop_usize(100n);});
const { nop_isize } = dylib.symbols;Deno.bench("nop_isize() number", () => { nop_isize(100);});
Deno.bench("nop_isize() bigint", () => { nop_isize(100n);});
const { nop_f32 } = dylib.symbols;Deno.bench("nop_f32()", () => { nop_f32(100.1);});
const { nop_f64 } = dylib.symbols;Deno.bench("nop_f64()", () => { nop_f64(100.1);});
const { nop_buffer } = dylib.symbols;const buffer = new Uint8Array(8).fill(5);// Make sure the buffer does not get collectedglobalThis.buffer = buffer;Deno.bench("nop_buffer()", () => { nop_buffer(buffer);});
const { return_bool } = dylib.symbols;Deno.bench("return_bool()", () => { return_bool();});
const { return_u8 } = dylib.symbols;Deno.bench("return_u8()", () => { return_u8();});
const { return_i8 } = dylib.symbols;Deno.bench("return_i8()", () => { return_i8();});
const { return_u16 } = dylib.symbols;Deno.bench("return_u16()", () => { return_u16();});
const { return_i16 } = dylib.symbols;Deno.bench("return_i16()", () => { return_i16();});
const { return_u32 } = dylib.symbols;Deno.bench("return_u32()", () => { return_u32();});
const { return_i32 } = dylib.symbols;Deno.bench("return_i32()", () => { return_i32();});
const { return_usize } = dylib.symbols;Deno.bench("return_usize()", () => { return_usize();});
const { return_isize } = dylib.symbols;Deno.bench("return_isize()", () => { return_isize();});
const { return_f32 } = dylib.symbols;Deno.bench("return_f32()", () => { return_f32();});
const { return_f64 } = dylib.symbols;Deno.bench("return_f64()", () => { return_f64();});
// Nonblocking calls
const { nop_nonblocking } = dylib.symbols;Deno.bench("nop_nonblocking()", async () => { await nop_nonblocking();});
const { nop_bool_nonblocking } = dylib.symbols;Deno.bench("nop_bool_nonblocking()", async () => { await nop_bool_nonblocking(true);});
const { nop_u8_nonblocking } = dylib.symbols;Deno.bench("nop_u8_nonblocking()", async () => { await nop_u8_nonblocking(100);});
const { nop_i8_nonblocking } = dylib.symbols;Deno.bench("nop_i8_nonblocking()", async () => { await nop_i8_nonblocking(100);});
const { nop_u16_nonblocking } = dylib.symbols;Deno.bench("nop_u16_nonblocking()", async () => { await nop_u16_nonblocking(100);});
const { nop_i16_nonblocking } = dylib.symbols;Deno.bench("nop_i16_nonblocking()", async () => { await nop_i16_nonblocking(100);});
const { nop_u32_nonblocking } = dylib.symbols;Deno.bench("nop_u32_nonblocking()", async () => { await nop_u32_nonblocking(100);});
const { nop_i32_nonblocking } = dylib.symbols;
Deno.bench("nop_i32_nonblocking()", async () => { await nop_i32_nonblocking(100);});
const { nop_u64_nonblocking } = dylib.symbols;Deno.bench("nop_u64_nonblocking()", async () => { await nop_u64_nonblocking(100);});
const { nop_i64_nonblocking } = dylib.symbols;Deno.bench("nop_i64_nonblocking()", async () => { await nop_i64_nonblocking(100);});
const { nop_usize_nonblocking } = dylib.symbols;Deno.bench("nop_usize_nonblocking()", async () => { await nop_usize_nonblocking(100);});
const { nop_isize_nonblocking } = dylib.symbols;Deno.bench("nop_isize_nonblocking()", async () => { await nop_isize_nonblocking(100);});
const { nop_f32_nonblocking } = dylib.symbols;Deno.bench("nop_f32_nonblocking()", async () => { await nop_f32_nonblocking(100);});
const { nop_f64_nonblocking } = dylib.symbols;Deno.bench("nop_f64_nonblocking()", async () => { await nop_f64_nonblocking(100);});
const { nop_buffer_nonblocking } = dylib.symbols;Deno.bench("nop_buffer_nonblocking()", async () => { await nop_buffer_nonblocking(buffer);});
const { return_bool_nonblocking } = dylib.symbols;Deno.bench("return_bool_nonblocking()", async () => { await return_bool_nonblocking();});
const { return_u8_nonblocking } = dylib.symbols;Deno.bench("return_u8_nonblocking()", async () => { await return_u8_nonblocking();});
const { return_i8_nonblocking } = dylib.symbols;Deno.bench("return_i8_nonblocking()", async () => { await return_i8_nonblocking();});
const { return_u16_nonblocking } = dylib.symbols;Deno.bench("return_u16_nonblocking()", async () => { await return_u16_nonblocking();});
const { return_i16_nonblocking } = dylib.symbols;Deno.bench("return_i16_nonblocking()", async () => { await return_i16_nonblocking();});
const { return_u32_nonblocking } = dylib.symbols;Deno.bench("return_u32_nonblocking()", async () => { await return_u32_nonblocking();});
const { return_i32_nonblocking } = dylib.symbols;Deno.bench("return_i32_nonblocking()", async () => { await return_i32_nonblocking();});
const { return_u64_nonblocking } = dylib.symbols;Deno.bench("return_u64_nonblocking()", async () => { await return_u64_nonblocking();});
const { return_i64_nonblocking } = dylib.symbols;Deno.bench("return_i64_nonblocking()", async () => { await return_i64_nonblocking();});
const { return_usize_nonblocking } = dylib.symbols;Deno.bench("return_usize_nonblocking()", async () => { await return_usize_nonblocking();});
const { return_isize_nonblocking } = dylib.symbols;Deno.bench("return_isize_nonblocking()", async () => { await return_isize_nonblocking();});
const { return_f32_nonblocking } = dylib.symbols;Deno.bench("return_f32_nonblocking()", async () => { await return_f32_nonblocking();});
const { return_f64_nonblocking } = dylib.symbols;Deno.bench("return_f64_nonblocking()", async () => { await return_f64_nonblocking();});
const { return_buffer_nonblocking } = dylib.symbols;Deno.bench("return_buffer_nonblocking()", async () => { await return_buffer_nonblocking();});
const { nop_many_parameters } = dylib.symbols;const buffer2 = new Uint8Array(8).fill(25);// Make sure the buffer does not get collectedglobalThis.buffer2 = buffer2;Deno.bench("nop_many_parameters()", () => { nop_many_parameters( 135, 47, 356, -236, 7457, -1356, 16471468n, -1334748136n, 132658769535n, -42745856824n, 13567.26437, 7.686234e-3, buffer, 64, -42, 83, -136, 3657, -2376, 3277918n, -474628146n, 344657895n, -2436732n, 135.26437e3, 264.3576468623546834, buffer2, );});
const { nop_many_parameters_nonblocking } = dylib.symbols;Deno.bench("nop_many_parameters_nonblocking()", () => { nop_many_parameters_nonblocking( 135, 47, 356, -236, 7457, -1356, 16471468n, -1334748136n, 132658769535n, -42745856824n, 13567.26437, 7.686234e-3, buffer, 64, -42, 83, -136, 3657, -2376, 3277918n, -474628146n, 344657895n, -2436732n, 135.26437e3, 264.3576468623546834, buffer2, );});
Deno.bench("Deno.UnsafePointer.of", () => { Deno.UnsafePointer.of(buffer);});
const cstringBuffer = new TextEncoder().encode("Best believe it!\0");// Make sure the buffer does not get collectedglobalThis.cstringBuffer = cstringBuffer;const cstringPointerView = new Deno.UnsafePointerView( Deno.UnsafePointer.of(cstringBuffer),);Deno.bench("Deno.UnsafePointerView#getCString", () => { cstringPointerView.getCString();});
const bufferPointerView = new Deno.UnsafePointerView( Deno.UnsafePointer.of(buffer),);
Deno.bench("Deno.UnsafePointerView#getBool", () => { bufferPointerView.getBool();});
Deno.bench("Deno.UnsafePointerView#getUint8", () => { bufferPointerView.getUint8();});
Deno.bench("Deno.UnsafePointerView#getInt8", () => { bufferPointerView.getInt8();});
Deno.bench("Deno.UnsafePointerView#getUint16", () => { bufferPointerView.getUint16();});
Deno.bench("Deno.UnsafePointerView#getInt16", () => { bufferPointerView.getInt16();});
Deno.bench("Deno.UnsafePointerView#getUint32", () => { bufferPointerView.getUint32();});
Deno.bench("Deno.UnsafePointerView#getInt32", () => { bufferPointerView.getInt32();});
Deno.bench("Deno.UnsafePointerView#getBigUint64", () => { bufferPointerView.getBigUint64();});
Deno.bench("Deno.UnsafePointerView#getBigInt64", () => { bufferPointerView.getBigInt64();});
Deno.bench("Deno.UnsafePointerView#getFloat32", () => { bufferPointerView.getFloat32();});
Deno.bench("Deno.UnsafePointerView#getFloat64", () => { bufferPointerView.getFloat64();});
Version Info