/* -*- Mode: C++; tab-width: 50; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsISupports.idl" [scriptable, builtinclass, uuid(ede09623-d793-4355-9682-b3adfe307126)] interface nsIMemoryInfoDumper : nsISupports { /** * DumpMemoryReportsToFile dumps the memory reports for this process and * possibly our child processes (and their children, recursively) to a file in * the tmp directory called memory-reports--.json.gz (or * something similar, such as memory-reports---1.json.gz; no * existing file will be overwritten). * * @param aIdentifier this identifier will appear in the filename of our * about:memory dump and those of our children (if aDumpChildProcesses is * true). * * If the identifier is empty, the dumpMemoryReportsToFile implementation * may set it arbitrarily and use that new value for its own dump and the * dumps of its child processes. For example, the dumpMemoryReportsToFile * implementation may set |aIdentifier| to the number of seconds since the * epoch. * * @param aMinimizeMemoryUsage indicates whether we should run a series of * gc/cc's in an attempt to reduce our memory usage before collecting our * memory report. * * @param aDumpChildProcesses indicates whether we should call * dumpMemoryReportsToFile in our child processes. If so, the child * processes will also dump their children, and so on. * * * Sample output: * * { * "hasMozMallocUsableSize":true, * "reports": [ * {"process":"", "path":"explicit/foo/bar", "kind":1, "units":0, * "amount":2000000, "description":"Foo bar."}, * {"process":"", "path":"heap-allocated", "kind":1, "units":0, * "amount":3000000, "description":"Heap allocated."}, * {"process":"", "path":"vsize", "kind":1, "units":0, * "amount":10000000, "description":"Vsize."} * ] * } * * JSON schema for the output. * * { * "properties": { * "hasMozMallocUsableSize": { * "type": "boolean", * "description": "nsIMemoryReporterManager::hasMozMallocUsableSize", * "required": true * }, * "reports": { * "type": "array", * "description": "The memory reports.", * "required": true * "minItems": 1, * "items": { * "type": "object", * "properties": { * "process": { * "type": "string", * "description": "nsIMemoryReporter::process", * "required": true * }, * "path": { * "type": "string", * "description": "nsIMemoryReporter::path", * "required": true, * "minLength": 1 * }, * "kind": { * "type": "integer", * "description": "nsIMemoryReporter::kind", * "required": true * }, * "units": { * "type": "integer", * "description": "nsIMemoryReporter::units", * "required": true * }, * "amount": { * "type": "integer", * "description": "nsIMemoryReporter::amount", * "required": true * }, * "description": { * "type": "string", * "description": "nsIMemoryReporter::description", * "required": true * } * } * } * } * } * } */ void dumpMemoryReportsToFile(in AString aIdentifier, in bool aMinimizeMemoryUsage, in bool aDumpChildProcesses); /** * Dump GC and CC logs to files in the OS's temp directory (or in * $MOZ_CC_LOG_DIRECTORY, if that environment variable is specified). * * @param aIdentifier If aIdentifier is non-empty, this string will appear in * the filenames of the logs we create (both for this process and, if * aDumpChildProcesses is true, for our child processes). * * If aIdentifier is empty, the implementation may set it to an * arbitrary value; for example, it may set aIdentifier to the number * of seconds since the epoch. * * @param aDumpChildProcesses indicates whether we should call * DumpGCAndCCLogsToFile in our child processes. If so, the child processes * will dump their children, and so on. */ void dumpGCAndCCLogsToFile(in AString aIdentifier, in bool aDumpChildProcesses); };