Fixing memory leak.
This commit is contained in:
parent
508b781b5a
commit
c3c9e0769c
|
@ -27,7 +27,7 @@
|
||||||
<label for="rom">
|
<label for="rom">
|
||||||
Rom file
|
Rom file
|
||||||
<input type="file" id="rom" name="rom"/>
|
<input type="file" id="rom" name="rom"/>
|
||||||
</label
|
</label>
|
||||||
<label for="savestate">
|
<label for="savestate">
|
||||||
Savestate (A ss file from mgba...)
|
Savestate (A ss file from mgba...)
|
||||||
<input type="file" id="savestate" name="savestate"/>
|
<input type="file" id="savestate" name="savestate"/>
|
||||||
|
@ -48,6 +48,7 @@
|
||||||
const PACKET_ID_HELLO = 0n;
|
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.
|
// 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;
|
const PACKET_ID_SEND_FRAME = 1n;
|
||||||
|
let printing_frame = false;
|
||||||
let is_little_endian = true;
|
let is_little_endian = true;
|
||||||
(()=>{
|
(()=>{
|
||||||
let buf = new ArrayBuffer(4);
|
let buf = new ArrayBuffer(4);
|
||||||
|
@ -101,26 +102,33 @@
|
||||||
console.log('Opened websocket.');
|
console.log('Opened websocket.');
|
||||||
sendHello(websocket, rom_array, savestate_array);
|
sendHello(websocket, rom_array, savestate_array);
|
||||||
};
|
};
|
||||||
websocket.addEventListener('message', (e) => {
|
websocket.addEventListener('message', onWebSocketPacket);
|
||||||
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}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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) {
|
function handleSendFrame(raw_data) {
|
||||||
|
if (printing_frame) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printing_frame = true;
|
||||||
let data = raw_data;
|
let data = raw_data;
|
||||||
const stride = byteArrayToU32BigEndian(data.slice(0, 4));
|
const stride = byteArrayToU32BigEndian(data.slice(0, 4));
|
||||||
data = data.slice(4, data.length);
|
data = data.slice(4, data.length);
|
||||||
|
@ -136,7 +144,13 @@
|
||||||
}
|
}
|
||||||
img_data_u8[i] = data[i];
|
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) {
|
function byteArrayToU32BigEndian(input_array) {
|
||||||
|
|
Loading…
Reference in New Issue