Skip to content

Commit 95777be

Browse files
committed
memoryprofiler: show allocations from threads
1 parent da8b92b commit 95777be

4 files changed

Lines changed: 19 additions & 13 deletions

File tree

src/lib/libmemoryprofiler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var memoryProfiler = {
22
emscripten_memprof_sbrk_grow: (old_brk, new_brk) => {
33
#if MEMORYPROFILER
4-
emscriptenMemoryProfiler.onSbrkGrow(old_brk, new_brk);
4+
Module['onSbrkGrow']?.(old_brk, new_brk) || postMessage({cmd: 'callHandler', handler: 'onSbrkGrow', args: [old_brk, new_brk, new Error().stack.toString()]});
55
#endif
66
},
77
};

src/lib/libtrace.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ var LibraryTracing = {
210210
},
211211

212212
emscripten_trace_record_allocation: (address, size) => {
213-
Module['onMalloc']?.(address, size);
213+
Module['onMalloc']?.(address, size) || postMessage({cmd: 'callHandler', handler: 'onMalloc', args: [address, size, new Error().stack.toString()]});
214214
if (EmscriptenTrace.postEnabled) {
215215
var now = EmscriptenTrace.now();
216216
EmscriptenTrace.post([EmscriptenTrace.EVENT_ALLOCATE,
@@ -219,7 +219,7 @@ var LibraryTracing = {
219219
},
220220

221221
emscripten_trace_record_reallocation: (old_address, new_address, size) => {
222-
Module['onRealloc']?.(old_address, new_address, size);
222+
Module['onRealloc']?.(old_address, new_address, size) || postMessage({cmd: 'callHandler', handler: 'onRealloc', args: [old_address, new_address, size, new Error().stack.toString()]});
223223
if (EmscriptenTrace.postEnabled) {
224224
var now = EmscriptenTrace.now();
225225
EmscriptenTrace.post([EmscriptenTrace.EVENT_REALLOCATE,
@@ -228,7 +228,7 @@ var LibraryTracing = {
228228
},
229229

230230
emscripten_trace_record_free: (address) => {
231-
Module['onFree']?.(address);
231+
Module['onFree']?.(address) || postMessage({cmd: 'callHandler', handler: 'onFree', args: [address]});
232232
if (EmscriptenTrace.postEnabled) {
233233
var now = EmscriptenTrace.now();
234234
EmscriptenTrace.post([EmscriptenTrace.EVENT_FREE,

src/memoryprofiler.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ var emscriptenMemoryProfiler = {
118118
return '#' + toHex(r) + toHex(g) + toHex(b);
119119
},
120120

121-
onSbrkGrow(oldLimit, newLimit) {
121+
onSbrkGrow(oldLimit, newLimit, loc) {
122122
var self = emscriptenMemoryProfiler;
123123
// On first sbrk(), account for the initial size.
124124
if (self.sbrkSources.length == 0) {
@@ -130,8 +130,11 @@ var emscriptenMemoryProfiler = {
130130
});
131131
}
132132
if (newLimit <= oldLimit) return;
133+
if (loc == undefined) {
134+
loc = new Error().stack.toString();
135+
}
133136
self.sbrkSources.push({
134-
stack: self.filterCallstackForHeapResize(new Error().stack.toString()),
137+
stack: self.filterCallstackForHeapResize(loc),
135138
begin: oldLimit,
136139
end: newLimit,
137140
color: self.hsvToRgb(self.sbrkSources.length * 0.618033988749895 % 1, 0.5, 0.95)
@@ -166,7 +169,7 @@ var emscriptenMemoryProfiler = {
166169
}
167170
},
168171

169-
onMalloc(ptr, size) {
172+
onMalloc(ptr, size, loc) {
170173
if (!ptr) return;
171174
if (emscriptenMemoryProfiler.sizeOfAllocatedPtr[ptr])
172175
{
@@ -189,7 +192,9 @@ var emscriptenMemoryProfiler = {
189192
// Also track if this was a _malloc performed at preRun time.
190193
if (!self.pagePreRunIsFinished) self.sizeOfPreRunAllocatedPtr[ptr] = size;
191194

192-
var loc = new Error().stack.toString();
195+
if(loc == undefined) {
196+
loc = new Error().stack.toString();
197+
}
193198
self.allocationsAtLoc[loc] ||= [0, 0, self.filterCallstackForMalloc(loc)];
194199
self.allocationsAtLoc[loc][0] += 1;
195200
self.allocationsAtLoc[loc][1] += size;
@@ -229,9 +234,9 @@ var emscriptenMemoryProfiler = {
229234
++self.totalTimesFreeCalled;
230235
},
231236

232-
onRealloc(oldAddress, newAddress, size) {
237+
onRealloc(oldAddress, newAddress, size, loc) {
233238
emscriptenMemoryProfiler.onFree(oldAddress);
234-
emscriptenMemoryProfiler.onMalloc(newAddress, size);
239+
emscriptenMemoryProfiler.onMalloc(newAddress, size, loc);
235240
},
236241

237242
onPreloadComplete() {
@@ -241,9 +246,10 @@ var emscriptenMemoryProfiler = {
241246
// Installs startup hook and periodic UI update timer.
242247
initialize() {
243248
// Inject the memoryprofiler hooks.
244-
Module['onMalloc'] = (ptr, size) => emscriptenMemoryProfiler.onMalloc(ptr, size);
245-
Module['onRealloc'] = (oldAddress, newAddress, size) => emscriptenMemoryProfiler.onRealloc(oldAddress, newAddress, size);;
249+
Module['onMalloc'] = (ptr, size, loc) => emscriptenMemoryProfiler.onMalloc(ptr, size, loc);
250+
Module['onRealloc'] = (oldAddress, newAddress, size, loc) => emscriptenMemoryProfiler.onRealloc(oldAddress, newAddress, size, loc);;
246251
Module['onFree'] = (ptr) => emscriptenMemoryProfiler.onFree(ptr);
252+
Module['onSbrkGrow'] = (old_brk, new_brk, loc) => emscriptenMemoryProfiler.onSbrkGrow(old_brk, new_brk, loc);
247253
emscriptenMemoryProfiler.recordStackWatermark();
248254

249255
// Add a tracking mechanism to detect when VFS loading is complete.

src/settings.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,7 +999,7 @@ var INCOMING_MODULE_JS_API = [
999999
'loadSplitModule', 'locateFile', 'logReadFiles', 'mainScriptUrlOrBlob', 'mem',
10001000
'monitorRunDependencies', 'noExitRuntime', 'noInitialRun', 'onAbort',
10011001
'onExit', 'onFree', 'onFullScreen', 'onMalloc',
1002-
'onRealloc', 'onRuntimeInitialized', 'postMainLoop', 'postRun', 'preInit',
1002+
'onRealloc', 'onRuntimeInitialized', 'onSbrkGrow', 'postMainLoop', 'postRun', 'preInit',
10031003
'preMainLoop', 'preRun',
10041004
'preinitializedWebGLContext', 'preloadPlugins',
10051005
'print', 'printErr', 'setStatus', 'statusMessage', 'stderr',

0 commit comments

Comments
 (0)