98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
/* eslint no-console:0 */
|
|
|
|
'use strct';
|
|
|
|
var os = require('os');
|
|
var childProcess = require('child_process');
|
|
var promisify = require('../lib/utils/promisify');
|
|
var jetpack = require('..');
|
|
|
|
var humanReadableFileSize = function (bytes, si) {
|
|
var units;
|
|
var u;
|
|
var b = bytes;
|
|
var thresh = si ? 1000 : 1024;
|
|
if (Math.abs(b) < thresh) {
|
|
return b + ' B';
|
|
}
|
|
units = si
|
|
? ['kB', 'MB', 'GB', 'TB']
|
|
: ['KiB', 'MiB', 'GiB', 'TiB'];
|
|
u = -1;
|
|
do {
|
|
b /= thresh;
|
|
++u;
|
|
} while (Math.abs(b) >= thresh && u < units.length - 1);
|
|
return b.toFixed(1) + ' ' + units[u];
|
|
};
|
|
|
|
var testDirPath = function () {
|
|
return os.tmpdir() + '/jetpack-benchmark';
|
|
};
|
|
|
|
var prepareJetpackTestDir = function () {
|
|
return jetpack.dir(testDirPath(), { empty: true });
|
|
};
|
|
|
|
var prepareFiles = function (jetpackDir, creationConfig) {
|
|
return new Promise(function (resolve, reject) {
|
|
var count = 0;
|
|
var content = new Buffer(creationConfig.size);
|
|
|
|
var makeOneFile = function () {
|
|
jetpackDir.fileAsync(count + '.txt', { content: content })
|
|
.then(function () {
|
|
count += 1;
|
|
if (count < creationConfig.files) {
|
|
makeOneFile();
|
|
} else {
|
|
resolve();
|
|
}
|
|
}, reject);
|
|
};
|
|
|
|
console.log('Preparing ' + creationConfig.files + ' test files (' +
|
|
humanReadableFileSize(creationConfig.size, true) + ' each)...');
|
|
makeOneFile();
|
|
});
|
|
};
|
|
|
|
var startTimer = function (startMessage) {
|
|
var start = Date.now();
|
|
process.stdout.write(startMessage + ' ... ');
|
|
return function stop() {
|
|
var time = Date.now() - start;
|
|
console.log(time + 'ms');
|
|
return time;
|
|
};
|
|
};
|
|
|
|
var waitAWhile = function () {
|
|
return new Promise(function (resolve) {
|
|
console.log('Waiting 5s to allow hardware buffers be emptied...');
|
|
setTimeout(resolve, 5000);
|
|
});
|
|
};
|
|
|
|
var promisedExec = promisify(childProcess.exec);
|
|
|
|
var showDifferenceInfo = function (jetpackTime, nativeTime) {
|
|
var perc = Math.round(jetpackTime / nativeTime * 100) - 100;
|
|
console.log('Jetpack is ' + perc + '% slower than native');
|
|
};
|
|
|
|
var cleanAfterTest = function () {
|
|
console.log('Cleaning up after test...');
|
|
return jetpack.removeAsync(testDirPath());
|
|
};
|
|
|
|
module.exports = {
|
|
prepareJetpackTestDir: prepareJetpackTestDir,
|
|
prepareFiles: prepareFiles,
|
|
startTimer: startTimer,
|
|
waitAWhile: waitAWhile,
|
|
exec: promisedExec,
|
|
showDifferenceInfo: showDifferenceInfo,
|
|
cleanAfterTest: cleanAfterTest
|
|
};
|