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 }