Fixing memory leak.

This commit is contained in:
sergiotarxz 2023-03-15 03:10:17 +01:00
parent 508b781b5a
commit c3c9e0769c
1 changed files with 31 additions and 17 deletions

View File

@ -27,7 +27,7 @@
<label for="rom">
Rom file
<input type="file" id="rom" name="rom"/>
</label
</label>
<label for="savestate">
Savestate (A ss file from mgba...)
<input type="file" id="savestate" name="savestate"/>
@ -48,6 +48,7 @@
const PACKET_ID_HELLO = 0n;
// Send is sent from server, so it is get here but whatever, it is the bad naming of the protocol.
const PACKET_ID_SEND_FRAME = 1n;
let printing_frame = false;
let is_little_endian = true;
(()=>{
let buf = new ArrayBuffer(4);
@ -101,26 +102,33 @@
console.log('Opened websocket.');
sendHello(websocket, rom_array, savestate_array);
};
websocket.addEventListener('message', (e) => {
const buffer = e.data;
let packet_u8 = new Uint8Array(buffer);
const id = byteArrayToU64BigEndian(packet_u8.slice(0, 8));
packet_u8 = packet_u8.slice(8, packet_u8.length);
const size = byteArrayToU64BigEndian(packet_u8.slice(0, 8));
const raw_data = packet_u8.slice(8, packet_u8.length);
switch (id) {
case PACKET_ID_SEND_FRAME:
handleSendFrame(raw_data);
break;
default:
console.log(`Received unknown packet ${id}`);
}
});
websocket.addEventListener('message', onWebSocketPacket);
});
});
});
function onWebSocketPacket(event) {
const buffer = event.data;
let packet_u8 = new Uint8Array(buffer);
const id = byteArrayToU64BigEndian(packet_u8.slice(0, 8));
packet_u8 = packet_u8.slice(8, packet_u8.length);
const size = byteArrayToU64BigEndian(packet_u8.slice(0, 8));
const raw_data = packet_u8.slice(8, packet_u8.length);
packet_u8 = null;
switch (id) {
case PACKET_ID_SEND_FRAME:
handleSendFrame(raw_data);
break;
default:
console.log(`Received unknown packet ${id}`);
}
}
function handleSendFrame(raw_data) {
if (printing_frame) {
return;
}
printing_frame = true;
let data = raw_data;
const stride = byteArrayToU32BigEndian(data.slice(0, 4));
data = data.slice(4, data.length);
@ -136,7 +144,13 @@
}
img_data_u8[i] = data[i];
}
ctx.putImageData(img_data, 0, 0);
data = null;
createImageBitmap(img_data).then(drawBitmap);
}
function drawBitmap(bitmap) {
ctx.drawImage(bitmap, 0, 0, canvas.width, canvas.height);
printing_frame = false;
}
function byteArrayToU32BigEndian(input_array) {