-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
116 lines (116 loc) · 5.17 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Memory Testing</title>
<script>
const savedBuffers = [];
const savedAudioBuffers = [];
const largestBufferSize = 2145386496;
const ipcRenderer = window.require?.("electron").ipcRenderer;
var mainBufferSize = 0;
var resultElement, undecodedAudio, audioContext, decodedAudioSize;
window.onload = () => {
var resultElement = document.querySelector("#result");
const calcRenderMemoryFilled = () => {
document.querySelector("#size").innerText = Math.round( ( (largestBufferSize * savedBuffers.length) + ((decodedAudioSize || 0) * savedAudioBuffers.length) + (undecodedAudio ? undecodedAudio.byteLength : 0) )/1024 ).toLocaleString()+" kB";
resultElement.innerText = "ok";
}
document.querySelector("#fillMemory").addEventListener("click", (e) => {
e.target.setAttribute("disabled", "");
resultElement.innerText = "waiting...";
setImmediate(() => {
try {
savedBuffers.push(Buffer.alloc(largestBufferSize, 1));
calcRenderMemoryFilled();
} catch(e) {
resultElement.innerText = e.name+": "+e.message;
//console.log("error", e);
}
e.target.removeAttribute("disabled");
});
});
document.querySelector("#fillMemoryAudio").addEventListener("click", async (e) => {
e.target.setAttribute("disabled", "");
resultElement.innerText = "waiting...";
if (!undecodedAudio) {
//init audio context & fetch sound file into array buffer
audioContext = new AudioContext({sampleRate: 96000});
try {
undecodedAudio = await (await fetch("long.mp4")).arrayBuffer();
} catch(e) {
resultElement.innerText = e.name+": "+e.message;
return;
}
}
try {
savedAudioBuffers.push(await audioContext.decodeAudioData(undecodedAudio.slice(0)));
decodedAudioSize = decodedAudioSize || savedAudioBuffers[0].length * savedAudioBuffers[0].numberOfChannels * 4;
calcRenderMemoryFilled();
} catch(e) {
resultElement.innerText = e.name+": "+e.message;
//console.log("error", e);
}
e.target.removeAttribute("disabled");
});
document.querySelector("#mainFillMemory").addEventListener("click", async (e) => {
e.target.setAttribute("disabled", "");
resultElement.innerText = "waiting...";
const result = await ipcRenderer.invoke("mainFillMemory");
resultElement.innerText = result;
if (result === "ok") {
mainBufferSize += largestBufferSize;
document.querySelector("#mainSize").innerText = (mainBufferSize/1024).toLocaleString()+" kB";
}
e.target.removeAttribute("disabled");
});
const displayMemoryInfo = (whichID, infoObject) => {
let displayString = "";
for (const [key, value] of Object.entries(infoObject)) {
displayString += key+": "+value.toLocaleString()+" kB\n";
}
document.getElementById(whichID).innerText = displayString;
}
if (window.process) {
setInterval(async () => {
displayMemoryInfo("memoryInfo", await window.process?.getProcessMemoryInfo());
if (ipcRenderer.invoke) displayMemoryInfo("mainMemoryInfo", await ipcRenderer.invoke("getMainProcessMemoryInfo"));
}, 1500);
}
document.querySelector("#refresh").addEventListener("click", async () => {
savedAudioBuffers.length = savedBuffers.length = 0;
if (ipcRenderer.invoke) await ipcRenderer.invoke("clearMainProcessMemory");
location.reload();
});
document.querySelector("#versions").innerText = "electron: "+window.process?.versions.electron+", abi: "+window.process?.versions.modules+", node: "+window.process?.versions.node+", chromium: "+window.process?.versions.chrome;
if (parseInt(window.process?.versions.electron) < 6) document.querySelector("#fillMemoryAudio").innerHTML = document.querySelector("#fillMemoryAudio").innerHTML.replace("2.7", "1.3"); //earlier Chrome had lower res audio context
};
</script>
</head>
<body style="background-color: white;">
<b id="versions"></b>
<br><br>
<button id="fillMemory">fill <b>render</b> process RAM with 2GB via Buffer.alloc()</button> <button id="fillMemoryAudio">fill <b>render</b> process RAM with 2.7GB via decodeAudioData()</button>
<br><br>
<button id="mainFillMemory">fill <b>main</b> process RAM with 2GB via Buffer.alloc()</button>
<br><br>
Last operation result: <span id="result"></span>
<br><br>
Total renderer process memory filled: <span id="size">0</span>
<br><br>
Total main process memory filled: <span id="mainSize">0</span>
<br><br>
<div style="display:flex;align-items:center;">
<span>Renderer Process Memory Info:</span>
<pre id="memoryInfo" style="margin:0 10px"></pre>
</div>
<br><br>
<div style="display:flex;align-items:center;">
<span>Main Process Memory Info:</span>
<pre id="mainMemoryInfo" style="margin:0 10px"></pre>
</div>
<br><br>
<button id="refresh">clear memory & refresh</button>
<br><br>
</body>
</html>