86 lines
3.5 KiB
JavaScript
86 lines
3.5 KiB
JavaScript
//"use strict";
|
|
|
|
var LibraryPlatformEmscripten = {
|
|
$RPE: {
|
|
powerStateChange: function(e) {
|
|
_platform_emscripten_update_power_state(true, Number.isFinite(e.target.dischargingTime) ? e.target.dischargingTime : 0x7FFFFFFF, e.target.level, e.target.charging);
|
|
},
|
|
|
|
updateMemoryUsage: function() {
|
|
// unfortunately this will be innacurate in threaded (worker) builds
|
|
var used = BigInt(performance.memory.usedJSHeapSize || 0);
|
|
var limit = BigInt(performance.memory.jsHeapSizeLimit || 0);
|
|
// emscripten currently only supports passing 32 bit ints, so pack it
|
|
_platform_emscripten_update_memory_usage(Number(used & 0xFFFFFFFFn), Number(used >> 32n), Number(limit & 0xFFFFFFFFn), Number(limit >> 32n));
|
|
setTimeout(RPE.updateMemoryUsage, 5000);
|
|
},
|
|
command_queue: [],
|
|
command_reply_queue: []
|
|
},
|
|
|
|
PlatformEmscriptenWatchCanvasSizeAndDpr__deps: ["platform_emscripten_update_canvas_dimensions"],
|
|
PlatformEmscriptenWatchCanvasSizeAndDpr: function(dpr) {
|
|
if (RPE.observer) {
|
|
RPE.observer.unobserve(Module.canvas);
|
|
RPE.observer.observe(Module.canvas);
|
|
return;
|
|
}
|
|
RPE.observer = new ResizeObserver(function(e) {
|
|
var width, height;
|
|
var entry = e.find(i => i.target == Module.canvas);
|
|
if (!entry) return;
|
|
if (entry.devicePixelContentBoxSize) {
|
|
width = entry.devicePixelContentBoxSize[0].inlineSize;
|
|
height = entry.devicePixelContentBoxSize[0].blockSize;
|
|
} else {
|
|
width = Math.round(entry.contentRect.width * window.devicePixelRatio);
|
|
height = Math.round(entry.contentRect.height * window.devicePixelRatio);
|
|
}
|
|
// doubles are too big to pass as an argument to exported functions
|
|
{{{ makeSetValue("dpr", "0", "window.devicePixelRatio", "double") }}};
|
|
_platform_emscripten_update_canvas_dimensions(width, height, dpr);
|
|
});
|
|
RPE.observer.observe(Module.canvas);
|
|
window.addEventListener("resize", function() {
|
|
RPE.observer.unobserve(Module.canvas);
|
|
RPE.observer.observe(Module.canvas);
|
|
}, false);
|
|
},
|
|
|
|
PlatformEmscriptenWatchWindowVisibility__deps: ["platform_emscripten_update_window_hidden"],
|
|
PlatformEmscriptenWatchWindowVisibility: function() {
|
|
document.addEventListener("visibilitychange", function() {
|
|
_platform_emscripten_update_window_hidden(document.visibilityState == "hidden");
|
|
}, false);
|
|
},
|
|
|
|
PlatformEmscriptenPowerStateInit__deps: ["platform_emscripten_update_power_state"],
|
|
PlatformEmscriptenPowerStateInit: function() {
|
|
if (!navigator.getBattery) return;
|
|
navigator.getBattery().then(function(battery) {
|
|
battery.addEventListener("chargingchange", RPE.powerStateChange);
|
|
battery.addEventListener("levelchange", RPE.powerStateChange);
|
|
RPE.powerStateChange({target: battery});
|
|
});
|
|
},
|
|
|
|
PlatformEmscriptenMemoryUsageInit__deps: ["platform_emscripten_update_memory_usage"],
|
|
PlatformEmscriptenMemoryUsageInit: function() {
|
|
if (!performance.memory) return;
|
|
RPE.updateMemoryUsage();
|
|
},
|
|
|
|
$EmscriptenSendCommand__deps: ["platform_emscripten_command_raise_flag"],
|
|
$EmscriptenSendCommand: function(str) {
|
|
RPE.command_queue.push(str);
|
|
_platform_emscripten_command_raise_flag();
|
|
},
|
|
|
|
$EmscriptenReceiveCommandReply: function() {
|
|
return RPE.command_reply_queue.shift();
|
|
}
|
|
};
|
|
|
|
autoAddDeps(LibraryPlatformEmscripten, '$RPE');
|
|
mergeInto(LibraryManager.library, LibraryPlatformEmscripten);
|