blob: de3e0da61e9505d176e4fcf3a1c2cc7969b8cb69 [file] [log] [blame] [edit]
<!doctype html>
<meta charset="utf-8">
<div id=log></div>
<script>
function write(s) {
let pre = document.querySelector('#results');
if (!pre) {
pre = document.createElement('pre');
pre.id = 'results';
document.body.appendChild(pre);
}
pre.textContent += s + '\n';
}
async function timeCompressArrayBuffer(input, format, level, fileName) {
const cs = new CompressionStream(format, {level});
const writer = cs.writable.getWriter();
writer.write(input);
writer.close();
const out = [];
const reader = cs.readable.getReader();
let totalSize = 0;
let start = performance.now();
while (true) {
const { value, done } = await reader.read();
if (done)
break;
out.push(value);
totalSize += value.byteLength;
}
let stop = performance.now();
let ms = stop - start;
let time = ms / 1000;
const concatenated = new Uint8Array(totalSize);
let offset = 0;
for (const array of out) {
concatenated.set(array, offset);
offset += array.byteLength;
}
return { concatenated, time };
}
async function timeDecompressArrayBuffer(input, format, bufferSize) {
const ds = new DecompressionStream(format, {bufferSize});
const writer = ds.writable.getWriter();
writer.write(input);
writer.close();
const out = [];
const reader = ds.readable.getReader();
let totalSize = 0;
let start = performance.now();
while (true) {
const { value, done } = await reader.read();
if (done)
break;
out.push(value);
totalSize += value.byteLength;
}
let stop = performance.now();
let ms = stop - start;
let time = ms / 1000; // convert to per second
return time;
}
const jsonFiles = [
"/fetch/api/resources/data.json", //input length: 17
"/fetch/nosniff/resources/x-content-type-options.json", // input length:1248
"/fetch/data-urls/resources/base64.json", // input lengh: 1683
"/url/resources/toascii.json", // input length: 4639
"/mixed-content/spec.src.json", // input length: 10077
"/url/resources/urltestdata.json", // input length: 148535
];
const htmlFiles = [
"/compression/test_wiki_google.html", //input length: 488183
"/compression/test_wiki_inazuma.html", // input length: 705909
];
const mp4Files = [
"/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4", //input length: 95171
"/media-source/mp4/test.mp4", // input length: 187227
];
async function timeCountLevelChange(files, format, bufferSize) {
for (const file of files) {
write(`${format}, ${file}`);
write(`level, time`);
for (let level = 0; level <= 9; ++level) {
const response = await fetch(file);
const buffer = await response.arrayBuffer();
const bufferView = new Uint8Array(buffer);
const { concatenated } =
await timeCompressArrayBuffer(
bufferView, format, level, bufferSize);
let sum = 0.0;
const numberOfRuns = 5000;
for (let i = 0; i < numberOfRuns; ++i) {
const time = await timeDecompressArrayBuffer(
concatenated, format);
sum += time;
}
let average = sum / numberOfRuns;
write(`${level},${average}`);
}
}
}
async function timeCountBufferSizeChange(files, format, level, compressBufferSize) {
for (const file of files) {
write(`${format}, ${file}`);
write(`level, time`);
const response = await fetch(file);
const buffer = await response.arrayBuffer();
const bufferView = new Uint8Array(buffer);
const { concatenated } =
await timeCompressArrayBuffer(
bufferView, format, level, compressBufferSize);
for (let bufferSize = 2048; bufferSize <= 1048576; bufferSize *= 2) {
let sum = 0.0;
const numberOfRuns = 3000;
for (let i = 0; i < numberOfRuns; ++i) {
const time = await timeDecompressArrayBuffer(
concatenated, format, bufferSize);
sum += time;
}
let average = sum / numberOfRuns;
write(`${level},${average}`);
}
}
}
async function test() {
const bufferSize = 65536;
timeCountLevelChange(jsonFiles, 'deflate', bufferSize);
const level = 6;
const compressBufferSize = 16384;
timeCountBufferSizeChange(jsonFiles, 'deflate', level);
}
test()
</script>