120 lines
3.9 KiB
JavaScript
120 lines
3.9 KiB
JavaScript
function nextTick(cb) {
|
|
setTimeout(cb, 0);
|
|
}
|
|
|
|
function parse_query() {
|
|
var query = window.location.search.substring(1);
|
|
var parsed = {};
|
|
query.split('&').forEach(function(pair) {
|
|
pair = pair.split('=');
|
|
var key = decodeURIComponent(pair[0]);
|
|
var value = decodeURIComponent(pair[1]);
|
|
parsed[key] = value;
|
|
});
|
|
return parsed;
|
|
}
|
|
|
|
require(["Filer", "util"], function(Filer, util) {
|
|
|
|
function time(test, cb) {
|
|
var start = performance.now();
|
|
function done() {
|
|
var end = performance.now();
|
|
cb(end - start);
|
|
}
|
|
test(done);
|
|
}
|
|
|
|
var random_data = new Uint8Array(1024); // 1kB buffer
|
|
var read_buffer = new Uint8Array(1024);
|
|
|
|
function run(iter) {
|
|
iter = (undefined == iter) ? 0 : iter;
|
|
|
|
function before() {
|
|
util.setup(function() {
|
|
nextTick(during);
|
|
});
|
|
}
|
|
|
|
function during() {
|
|
var fs = util.fs();
|
|
|
|
window.crypto.getRandomValues(random_data);
|
|
time(function(done) {
|
|
fs.mkdir('/tmp', function(err) {
|
|
fs.stat('/tmp', function(err, stats) {
|
|
fs.open('/tmp/test', 'w', function(err, fd) {
|
|
fs.write(fd, random_data, null, null, null, function(err, nbytes) {
|
|
fs.close(fd, function(err) {
|
|
fs.stat('/tmp/test', function(err, stats) {
|
|
fs.open('/tmp/test', 'r', function(err, fd) {
|
|
fs.read(fd, read_buffer, null, null, null, function(err, nbytes) {
|
|
fs.close(fd, function(err) {
|
|
fs.unlink('/tmp/test', function(err) {
|
|
done();
|
|
});});});});});});});});});});
|
|
}, after);
|
|
}
|
|
|
|
function after(dt) {
|
|
util.cleanup(complete.bind(null, iter, dt));
|
|
}
|
|
|
|
before();
|
|
}
|
|
|
|
var results = [];
|
|
function complete(iter, result) {
|
|
results.push(result);
|
|
|
|
if(++iter < iterations) {
|
|
nextTick(run.bind(null, iter));
|
|
} else {
|
|
do_stats();
|
|
}
|
|
|
|
progress.value = iter;
|
|
}
|
|
|
|
function do_stats() {
|
|
var output = document.getElementById("output");
|
|
var stats = {
|
|
mean: ss.mean(results) + " ms",
|
|
min: ss.min(results),
|
|
max: ss.max(results),
|
|
med_abs_dev: ss.median_absolute_deviation(results),
|
|
};
|
|
|
|
var t = document.createElement("table");
|
|
var tbody = document.createElement("tbody");
|
|
var keys = Object.keys(stats);
|
|
keys.forEach(function(key) {
|
|
var row = document.createElement("tr");
|
|
|
|
var key_cell = document.createElement("td");
|
|
var key_cell_text = document.createTextNode(key);
|
|
key_cell.appendChild(key_cell_text);
|
|
row.appendChild(key_cell);
|
|
|
|
var val_cell = document.createElement("td");
|
|
var val_cell_text = document.createTextNode(stats[key]);
|
|
val_cell.appendChild(val_cell_text);
|
|
row.appendChild(val_cell);
|
|
|
|
tbody.appendChild(row);
|
|
});
|
|
|
|
t.appendChild(tbody);
|
|
output.appendChild(t);
|
|
}
|
|
|
|
var query = parse_query();
|
|
var iterations = query.iterations || 10;
|
|
var progress = document.getElementById("progress");
|
|
progress.max = iterations;
|
|
|
|
run();
|
|
|
|
});
|