Mercurial > hg > config
comparison chrome/memory.js @ 206:beca399c3a16
Bug 685632 - Please collect RSS (memory) data during Talos testing on Android. r=jlebar,njn
| author | Joel Maher <jmaher@mozilla.com> |
|---|---|
| date | Wed, 09 Nov 2011 10:41:03 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 205:eaef28f55f92 | 206:beca399c3a16 |
|---|---|
| 1 | |
| 2 var gChildProcess = true; | |
| 3 var gMemCallback = null; | |
| 4 | |
| 5 | |
| 6 /* | |
| 7 * Initialize memory collector. Determine if we have a child process. | |
| 8 */ | |
| 9 function initializeMemoryCollector(callback, args) { | |
| 10 gMemCallback = function() { return callback(args); }; | |
| 11 | |
| 12 var os = Components.classes["@mozilla.org/observer-service;1"]. | |
| 13 getService(Components.interfaces.nsIObserverService); | |
| 14 | |
| 15 os.addObserver(function () { | |
| 16 var os = Components.classes["@mozilla.org/observer-service;1"]. | |
| 17 getService(Components.interfaces.nsIObserverService); | |
| 18 | |
| 19 memTimer.cancel(); | |
| 20 memTimer = null; | |
| 21 | |
| 22 os.removeObserver(arguments.callee, "child-memory-reporter-update", false); | |
| 23 os.addObserver(collectAndReport, "child-memory-reporter-update", false); | |
| 24 gMemCallback(); | |
| 25 }, "child-memory-reporter-update", false); | |
| 26 | |
| 27 /* | |
| 28 * Assume we have a child process, but if timer fires before we call the observer | |
| 29 * we will assume there is no child process. | |
| 30 */ | |
| 31 var event = { | |
| 32 notify: function(timer) { | |
| 33 memTimer = null; | |
| 34 gChildProcess = false; | |
| 35 gMemCallback(); | |
| 36 } | |
| 37 } | |
| 38 | |
| 39 memTimer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer); | |
| 40 memTimer.initWithCallback(event, 10000, Components.interfaces.nsITimer.TYPE_ONE_SHOT); | |
| 41 | |
| 42 os.notifyObservers(null, "child-memory-reporter-request", null); | |
| 43 } | |
| 44 | |
| 45 /* | |
| 46 * Collect memory from all processes and callback when done collecting. | |
| 47 */ | |
| 48 function collectMemory(callback, args) { | |
| 49 gMemCallback = function() { return callback(args); }; | |
| 50 | |
| 51 if (gChildProcess) { | |
| 52 var os = Components.classes["@mozilla.org/observer-service;1"]. | |
| 53 getService(Components.interfaces.nsIObserverService); | |
| 54 | |
| 55 os.notifyObservers(null, "child-memory-reporter-request", null); | |
| 56 } else { | |
| 57 collectAndReport(null, null, null); | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 function collectAndReport(aSubject, aTopic, aData) { | |
| 62 dumpLine(collectRSS()); | |
| 63 gMemCallback(); | |
| 64 } | |
| 65 | |
| 66 function collectRSS() { | |
| 67 var mgr = Components.classes["@mozilla.org/memory-reporter-manager;1"]. | |
| 68 getService(Components.interfaces.nsIMemoryReporterManager); | |
| 69 var e = mgr.enumerateReporters(); | |
| 70 text = ""; | |
| 71 while (e.hasMoreElements()) { | |
| 72 var reporter = e.getNext().QueryInterface(Components.interfaces.nsIMemoryReporter); | |
| 73 if (reporter.path == 'resident') { | |
| 74 procName = reporter.process; | |
| 75 if (procName == '') | |
| 76 procName = "Main"; | |
| 77 | |
| 78 //For content process it is in the format "Content (<PID>)", we just want Content | |
| 79 procName = procName.split(' ')[0]; | |
| 80 text += "RSS: " + procName + ": " + reporter.amount + "\n"; | |
| 81 } | |
| 82 } | |
| 83 return text; | |
| 84 } | |
| 85 | |
| 86 /* | |
| 87 * Cleanup and stop memory collector. | |
| 88 */ | |
| 89 function stopMemCollector() { | |
| 90 if (gChildProcess) { | |
| 91 var os = Cc["@mozilla.org/observer-service;1"]. | |
| 92 getService(Ci.nsIObserverService); | |
| 93 os.removeObserver(collectAndReport, "child-memory-reporter-update"); | |
| 94 } | |
| 95 } |
