author | Nicholas Nethercote <nnethercote@mozilla.com> |
Thu, 15 Nov 2012 14:06:34 -0800 | |
changeset 113418 | b88cc468573471024fa4404004ace9a83613e7a0 |
parent 113417 | 38a94424d2234aba78e1ea04f2f33430fd50cb69 |
child 113419 | 5935517adf4d8a866f8752787b46a9c1684589d5 |
push id | 18143 |
push user | nnethercote@mozilla.com |
push date | Thu, 15 Nov 2012 22:37:21 +0000 |
treeherder | mozilla-inbound@b88cc4685734 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jlebar |
bugs | 811018 |
milestone | 19.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/xpcom/base/nsMemoryReporterManager.cpp +++ b/xpcom/base/nsMemoryReporterManager.cpp @@ -1049,19 +1049,40 @@ DMDVCheckAndDump() // Do vanilla reporters. nsCOMPtr<nsISimpleEnumerator> e; mgr->EnumerateReporters(getter_AddRefs(e)); bool more; while (NS_SUCCEEDED(e->HasMoreElements(&more)) && more) { nsCOMPtr<nsIMemoryReporter> r; e->GetNext(getter_AddRefs(r)); - // Just getting the amount is enough for the reporter to report to DMDV. - int64_t amount; - (void)r->GetAmount(&amount); + int32_t kind; + nsresult rv = r->GetKind(&kind); + if (NS_FAILED(rv)) { + continue; + } + nsCString path; + rv = r->GetPath(path); + if (NS_FAILED(rv)) { + continue; + } + + // We're only interested in HEAP explicit reporters. (In particular, + // some heap blocks are deliberately measured once inside an "explicit" + // reporter and once outside, which isn't a problem. This condition + // prevents them being reported as double-counted. See bug 811018 + // comment 2.) + if (kind == nsIMemoryReporter::KIND_HEAP && + path.Find("explicit") == 0) + { + // Just getting the amount is enough for the reporter to report to + // DMDV. + int64_t amount; + (void)r->GetAmount(&amount); + } } // Do multi-reporters. nsCOMPtr<nsISimpleEnumerator> e2; mgr->EnumerateMultiReporters(getter_AddRefs(e2)); nsRefPtr<NullMultiReporterCallback> cb = new NullMultiReporterCallback(); while (NS_SUCCEEDED(e2->HasMoreElements(&more)) && more) { nsCOMPtr<nsIMemoryMultiReporter> r;