86 lines
4.2 KiB
JavaScript
86 lines
4.2 KiB
JavaScript
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
|
|
import * as all_benchmarks from "./cross_platform_suite.mjs";
|
|
import * as perspective_bench from "./src/js/benchmark.mjs";
|
|
import * as puppeteer from "puppeteer";
|
|
|
|
import * as fs from "node:fs";
|
|
import * as path from "node:path";
|
|
import * as url from "node:url";
|
|
import * as process from "node:process";
|
|
|
|
const __dirname = url.fileURLToPath(new URL(".", import.meta.url)).slice(0, -1);
|
|
|
|
/**
|
|
* We use the `dependencies` of this package for the benchmark candidate
|
|
* module list, so that we only need specify the dependencies and benchmark
|
|
* candidates in one place.
|
|
*/
|
|
const VERSIONS = [
|
|
"@perspective-dev/client",
|
|
"perspective-3-0-0",
|
|
"perspective-2-10-0",
|
|
];
|
|
|
|
perspective_bench.suite(
|
|
[...VERSIONS],
|
|
path.join(__dirname, "dist/benchmark-js.arrow"),
|
|
async function (path, version_idx) {
|
|
let client, metadata;
|
|
console.log(path);
|
|
const browser = await puppeteer.launch({
|
|
headless: true,
|
|
protocolTimeout: 100_000_000,
|
|
});
|
|
const page = await browser.newPage();
|
|
|
|
await page.goto("http://localhost:8081/empty.html");
|
|
|
|
async function test_suite(suite) {
|
|
const items = await page.evaluate(
|
|
async ([version, suite, version_idx]) => {
|
|
const { default: perspective } = await import(
|
|
`/tools/bench/node_modules/${version}/dist/esm/perspective.inline.js`
|
|
);
|
|
const benchmarks = await import(
|
|
"/tools/bench/cross_platform_suite.mjs"
|
|
);
|
|
|
|
const metadata = {
|
|
version,
|
|
version_idx,
|
|
};
|
|
const total = [];
|
|
window.__SEND__ = (x) => {
|
|
total.push(x);
|
|
};
|
|
|
|
const client = await perspective.worker();
|
|
await benchmarks[suite](client, metadata);
|
|
return total;
|
|
},
|
|
[path, suite, version_idx],
|
|
);
|
|
|
|
for (const { obs_records, stats } of items) {
|
|
process.send({ obs_records, stats });
|
|
}
|
|
}
|
|
|
|
await test_suite("table_suite");
|
|
await test_suite("view_suite");
|
|
await test_suite("to_data_suite");
|
|
await test_suite("join_suite");
|
|
},
|
|
);
|