mirror of
https://github.com/google/brotli.git
synced 2024-11-09 13:40:06 +00:00
60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
|
#!/usr/bin/env node
|
||
|
|
||
|
let defaults =
|
||
|
{input: 'input.br', output: 'output.txt', test_iters: 0, test_repeat: 100};
|
||
|
|
||
|
/* Parse command line arguments. */
|
||
|
let argv =
|
||
|
require('yargs')
|
||
|
.usage('Usage: $0 -i file -o file')
|
||
|
.option(
|
||
|
'input',
|
||
|
{alias: 'i', default: defaults.input, describe: 'compressed file'})
|
||
|
.option('output', {
|
||
|
alias: 'o',
|
||
|
default: defaults.output,
|
||
|
describe: 'decompressed file'
|
||
|
})
|
||
|
.option('test_iters', {
|
||
|
default: defaults.test_iters,
|
||
|
describe: '# of times to run performance test'
|
||
|
})
|
||
|
.option('test_repeat', {
|
||
|
default: defaults.test_repeat,
|
||
|
describe: '# of times to decompress file in performance test'
|
||
|
})
|
||
|
.argv;
|
||
|
|
||
|
/* Read input. */
|
||
|
const fs = require('fs');
|
||
|
data = fs.readFileSync(argv.input);
|
||
|
if (!Buffer.isBuffer(data)) throw 'not a buffer';
|
||
|
const bytes = new Uint8Array(data);
|
||
|
|
||
|
/* Load and map brotli decoder module. */
|
||
|
global.window = {};
|
||
|
require('./decode.js')
|
||
|
const brotliDecode = window['BrotliDecode'];
|
||
|
|
||
|
/* Load "performance" module. */
|
||
|
const {PerformanceObserver, performance} = require('perf_hooks');
|
||
|
|
||
|
/* Performance test. */
|
||
|
for (let i = 0; i < argv.test_iters; ++i) {
|
||
|
const a = performance.now();
|
||
|
let result;
|
||
|
for (let j = 0; j < argv.test_repeat; ++j) {
|
||
|
result = brotliDecode(bytes);
|
||
|
}
|
||
|
const b = performance.now();
|
||
|
const total_length = argv.test_repeat * result.length / (1024 * 1024);
|
||
|
const total_time = (b - a) / 1000;
|
||
|
|
||
|
console.log(
|
||
|
total_length + 'MB / ' + total_time +
|
||
|
's = ' + (total_length / total_time) + 'MB/s');
|
||
|
}
|
||
|
|
||
|
/* Decode and write output file. */
|
||
|
fs.writeFileSync(argv.output, new Buffer(brotliDecode(bytes)));
|