Mercurial > hg > config
comparison chrome/memory.js @ 208:3f290bcae11a
wtf
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 13 Feb 2012 16:24:06 -0800 |
parents | beca399c3a16 |
children |
comparison
equal
deleted
inserted
replaced
207:7bad4b7281f2 | 208:3f290bcae11a |
---|---|
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 } |