Changes

Jump to: navigation, search

Performance:Leak Tools

155 bytes removed, 19:24, 29 January 2014
Cycle collector heap dump
The cycle collector heap dump is useful for figuring out why the cycle collector is keeping an object alive. These can either be manually or automatically generated.
To manually generate a CC dump, even in any a non-debug build, enable the Error Console, by going to about:config and setting devtools.errorconsole.enabled to true. Then open a new window, go to Tools, Web Developer, Error Web Console.
Then evaluate this expression:
.createInstance(Components.interfaces.nsICycleCollectorListener))
In version 11 or earlierBy default, you probably want this version, which will run the GC first: window.QueryInterface(Components.interfaces.nsIInterfaceRequestor). getInterface(Components.interfaces.nsIDOMWindowUtils). garbageCollect(Components.classes["@mozilla.org/cycle-collector-logger;1"] will only log the objects it normally looks at.createInstance(Components.interfaces.nsICycleCollectorListener)) Nightly builds before 2012 defaulted Sometimes it can be useful to all traces, newer builds logs disable the optimizations thesame edges what cycle collector normally usesdoes in order to get more detailed information.A new In this case, the method allTraces() was added so the old behavior can be achieved whenneededused:
window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
getInterface(Components.interfaces.nsIDOMWindowUtils).
.createInstance(Components.interfaces.nsICycleCollectorListener).allTraces())
This creates a file named cc-edges-NNNN.log and writes a dump of the heap known to the cycle collector, which includes JS objects and also native C++ objects that participate in cycle collection, to the file. It will also log the contents of the Javascript heap to a file named gc-edges-NNNN.log.
Since Firefox 18 (night builds after 2012-09-13) one can override the default location of the log files by setting the MOZ_CC_LOG_DIRECTORY environment variable. http://people.mozilla.com/~mleibovic/cc-dump.xpi is an addon for Android Firefox which uses that to save files to /sdcard. The code for this addon is available on [https://github.com/leibovic/skeleton-addon-fxandroid/tree/cc Github].
* Older builds created the file in Firefox's current working directory (usually the current working directory where Firefox was started). That meant that on Windows 7 and Vista, you typically had to run Firefox as Administrator to create the file.
To automatically generate a log every cycle collector dumpcollection, set gAlwaysLogCCGraphs to true in xpcom/base/nsCycleCollectorthe XPCOM_CC_LOG_ALL environment variable.cpp To log only shutdown collections, set XPCOM_CC_LOG_SHUTDOWN. This will To make every cycle collection produce a dumpany shutdown CCs AllTraces() at shutdown, set XPCOM_CC_ALL_TRACES_AT_SHUTDOWN. This is primarily The latter two are useful for debugging shutdown leaks.
To analyze a cycle collector dump, you need the scripts from [https://github.com/amccreight/heapgraph/tree/master/cc Github]. The relevant scripts are find_roots.py and parse_cc_graph.py (which is called by find_roots). Calling find_roots on a CC file with a specific object or kind of object will produce paths from rooting objects to the specified objects. Most big leaks include an nsGlobalWindow, so that's a good class to try if you don't have any better idea.
* Simple, ugly, yet rather powerful [https://bugzilla.mozilla.org/show_bug.cgi?id=726346 about:cc]
* Prettier but a bit slower [https://addons.mozilla.org/en-US/firefox/addon/cycle-collector-analyzer/?src=ss about:ccdump]
 
=== Leak tools for medium-size object graphs ===
Confirm
557
edits

Navigation menu