How can I programmatically get memory usage (JS and total) of my website in Google Chrome?
I looked at doing it from a Chrome extension using the undocumented HeapProfiler (see here), but I can't find a way to get data from that.
I want to measure the memory consumption it at every release, so this needs to be programmatic.
EDIT: I figured out how to get the HeapProfiler method to work. Each addHeapSnapshotChunk
event has a chunk of a JSON object.
chrome.browserAction.onClicked.addListener(function(tab) {
var heapData,
debugId = {tabId:tab.id};
chrome.debugger.attach(debugId, '1.0', function() {
chrome.debugger.sendCommand(debugId, 'Debugger.enable', {}, function() {
function headerListener(source, name, data) {
if(source.tabId == tab.id && name == 'HeapProfiler.addProfileHeader') {
function chunkListener(source, name, data) {
if(name == 'HeapProfiler.addHeapSnapshotChunk') {
heapData += data.chunk;
} else if(name == 'HeapProfiler.finishHeapSnapshot') {
chrome.debugger.onEvent.removeListener(chunkListener);
chrome.debugger.detach(debugId);
//do something with data
console.log('Collected ' + heapData.length + ' bytes of JSON data');
}
}
chrome.debugger.onEvent.addListener(chunkListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.getHeapSnapshot', {uid:data.header.uid, type:data.header.typeId});
}
chrome.debugger.onEvent.removeListener(headerListener);
}
chrome.debugger.onEvent.addListener(headerListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.takeHeapSnapshot');
});
});
});
When parsed, the JSON has nodes, edges, and descriptive metadata about the node and edge types and fields.
Alternatively, I could use Timeline events if I just want totals.
That said, are there any better ways than what I've found out here?
window.performance
object? It gives a brief overview of memory usage and doesn't require extension to be accessed. – Wenwindow.performance.memory
. It doesn't seem to match the heap profile, though. I actually don't need a lot of details; the total memory usage would be sufficient. – Merla