draco/javascript/time_draco_decode.html
2016-12-12 16:39:06 -08:00

116 lines
3.1 KiB
HTML

<html>
<head>
<title>Draco Javascript Decode Timing</title>
<script type="text/javascript" src="draco_decoder.js"> </script>
<script type="text/javascript">
// String to hold table output.
var dt = '';
function startTable() {
dt += '<table><tr>';
dt += '<td>Filename</td>';
dt += '<td>Total milli</td>';
dt += '<td>Decode milli</td>';
dt += '<td>Size bytes</td>';
dt += '<td>Num Faces</td>';
}
function addCell(str, newRow) {
if (newRow)
dt += '</tr><tr>';
dt += '<td>' + str + '</td>';
}
function finishTable() {
dt += '</table>';
document.getElementById('tableOutput').innerHTML = dt;
}
function onDecodeClick() {
startTable();
var inputs = document.getElementById('u').value.split(',');
s_log('Decoding ' + inputs.length + ' files...', true, true);
TestMeshDecodingAsync(inputs, 0);
}
function onDecodeMultipleClick() {
startTable();
var inputs = document.getElementById('u').value.split(',');
var decode_count = parseInt(document.getElementById('decode_count').value);
s_log('Decoding ' + (decode_count * inputs.length) + ' files...', true, true);
var fileList = [];
for (var i = 0; i < decode_count; ++i) {
fileList = fileList.concat(inputs);
}
TestMeshDecodingAsync(fileList, 0);
}
function TestMeshDecodingAsync(filenameList, index) {
var xhr = new XMLHttpRequest();
xhr.open("GET", filenameList[index], true);
xhr.responseType = "arraybuffer";
xhr.onload = function(event) {
var arrayBuffer = xhr.response;
if (arrayBuffer) {
var byteArray = new Uint8Array(arrayBuffer);
var total_t0 = performance.now();
var buffer = new Module.DecoderBuffer();
buffer.Init(byteArray, byteArray.length);
var wrapper = new Module.WebIDLWrapper();
var decode_t0 = performance.now();
var mesh = wrapper.DecodeMeshFromBuffer(buffer);
var t1 = performance.now();
addCell(filenameList[index], true);
addCell('' + (t1 - total_t0), false);
addCell('' + (t1 - decode_t0), false);
addCell('' + byteArray.length, false);
addCell('' + mesh.num_faces(), false);
destroy(mesh);
destroy(wrapper);
destroy(buffer);
if (index < filenameList.length - 1) {
index = index + 1;
TestMeshDecodingAsync(filenameList, index);
} else {
finishTable();
}
}
};
xhr.send(null);
}
function s_log(str, end_line, reset) {
if (reset)
document.getElementById('status').innerHTML = '';
document.getElementById('status').innerHTML += str;
if (end_line)
document.getElementById('status').innerHTML += "<br/>";
}
</script>
</head>
<body>
<H1>Draco Javascript Decode Timing</H1>
Draco file to be decoded. If more than one file, add as comma separated list. E.g. "file1.drc,file2.drc,file3.drc"</br>
<input id="u" type="text" size="80" value="input.drc"/><input type="button" value="Decode" onClick="onDecodeClick();">
<input id="decode_count" type="text" size="10" value="10"/><input type="button" value="Decode Multiple" onClick="onDecodeMultipleClick();">
<br/>
<div id="status"> </div></br>
<div id="tableOutput"> </div>
</body>
</html>