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.performanceobject? It gives a brief overview of memory usage and doesn't require extension to be accessed.window.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.