overleaf/services/clsi/test/bench/hashbench.js

73 lines
1.8 KiB
JavaScript

const ContentCacheManager = require('../../app/js/ContentCacheManager')
const fs = require('fs')
const crypto = require('crypto')
const path = require('path')
const os = require('os')
const async = require('async')
const _createHash = crypto.createHash
const files = process.argv.slice(2)
function test(hashType, filePath, callback) {
// override the default hash in ContentCacheManager
crypto.createHash = function (hash) {
if (hashType === 'hmac-sha1') {
return crypto.createHmac('sha1', 'a secret')
}
hash = hashType
return _createHash(hash)
}
fs.mkdtemp(path.join(os.tmpdir(), 'pdfcache'), (err, dir) => {
if (err) {
return callback(err)
}
const t0 = process.hrtime.bigint()
ContentCacheManager.update(dir, filePath, (x) => {
const t1 = process.hrtime.bigint()
const cold = Number(t1 - t0) / 1e6
ContentCacheManager.update(dir, filePath, (x) => {
const t2 = process.hrtime.bigint()
const warm = Number(t2 - t1) / 1e6
fs.rmdir(dir, { recursive: true }, (err) => {
if (err) {
return callback(err)
}
console.log(
'uvthreads',
process.env.UV_THREADPOOL_SIZE,
filePath,
'hashType',
hashType,
'cold-start',
cold.toFixed(2),
'ms',
'warm-start',
warm.toFixed(2),
'ms'
)
callback(null, [hashType, cold, warm])
})
})
})
})
}
var jobs = []
files.forEach((file) => {
jobs.push((cb) => {
test('md5', file, cb)
})
jobs.push((cb) => {
test('sha1', file, cb)
})
jobs.push((cb) => {
test('hmac-sha1', file, cb)
})
jobs.push((cb) => {
test('sha256', file, cb)
})
})
async.timesSeries(10, (n, cb) => {
async.series(jobs, cb)
})