зеркало из https://github.com/mozilla/gecko-dev.git
Bug 969324 Remove unnecessary ReporterEnumerator r=njn
This commit is contained in:
Родитель
9db150a9ce
Коммит
5c623b13c4
|
@ -10,7 +10,6 @@
|
|||
#include "nsCOMArray.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "nsMemoryReporterManager.h"
|
||||
#include "nsISimpleEnumerator.h"
|
||||
#include "nsITimer.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
|
@ -884,83 +883,6 @@ nsMemoryReporterManager::Init()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// ReporterEnumerator takes the two hashtables of reporters in its constructor
|
||||
// and creates an nsISimpleEnumerator from its contents.
|
||||
//
|
||||
// The resultant enumerator works over a copy of the hashtable elements, so
|
||||
// it's safe to mutate or destroy the hashtables after the enumerator is
|
||||
// created.
|
||||
//
|
||||
class ReporterEnumerator MOZ_FINAL : public nsISimpleEnumerator
|
||||
{
|
||||
public:
|
||||
ReporterEnumerator(
|
||||
nsMemoryReporterManager::StrongReportersTable* aStrongReporters,
|
||||
nsMemoryReporterManager::WeakReportersTable* aWeakReporters)
|
||||
: mIndex(0)
|
||||
{
|
||||
aStrongReporters->EnumerateEntries(StrongEnumerator, this);
|
||||
aWeakReporters->EnumerateEntries(WeakEnumerator, this);
|
||||
}
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSISIMPLEENUMERATOR
|
||||
|
||||
private:
|
||||
static PLDHashOperator
|
||||
StrongEnumerator(nsISupportsHashKey* aEntry, void* aData);
|
||||
|
||||
static PLDHashOperator
|
||||
WeakEnumerator(nsPtrHashKey<nsISupports>* aEntry, void* aData);
|
||||
|
||||
uint32_t mIndex;
|
||||
nsCOMArray<nsISupports> mArray;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS1(ReporterEnumerator, nsISimpleEnumerator)
|
||||
|
||||
/* static */ PLDHashOperator
|
||||
ReporterEnumerator::StrongEnumerator(nsISupportsHashKey* aElem, void* aData)
|
||||
{
|
||||
ReporterEnumerator* enumerator = static_cast<ReporterEnumerator*>(aData);
|
||||
enumerator->mArray.AppendObject(aElem->GetKey());
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
/* static */ PLDHashOperator
|
||||
ReporterEnumerator::WeakEnumerator(nsPtrHashKey<nsISupports>* aElem,
|
||||
void* aData)
|
||||
{
|
||||
ReporterEnumerator* enumerator = static_cast<ReporterEnumerator*>(aData);
|
||||
enumerator->mArray.AppendObject(aElem->GetKey());
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
ReporterEnumerator::HasMoreElements(bool* aResult)
|
||||
{
|
||||
*aResult = mIndex < mArray.Length();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
ReporterEnumerator::GetNext(nsISupports** aNext)
|
||||
{
|
||||
if (mIndex < mArray.Length()) {
|
||||
nsCOMPtr<nsISupports> next = mArray.ObjectAt(mIndex);
|
||||
next.forget(aNext);
|
||||
mIndex++;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
*aNext = nullptr;
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
nsMemoryReporterManager::nsMemoryReporterManager()
|
||||
: mMutex("nsMemoryReporterManager::mMutex"),
|
||||
mIsRegistrationBlocked(false),
|
||||
|
@ -1078,6 +1000,24 @@ nsMemoryReporterManager::GetReports(
|
|||
: NS_OK;
|
||||
}
|
||||
|
||||
typedef nsCOMArray<nsIMemoryReporter> MemoryReporterArray;
|
||||
|
||||
static PLDHashOperator
|
||||
StrongEnumerator(nsRefPtrHashKey<nsIMemoryReporter>* aElem, void* aData)
|
||||
{
|
||||
MemoryReporterArray *allReporters = static_cast<MemoryReporterArray*>(aData);
|
||||
allReporters->AppendElement(aElem->GetKey());
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
static PLDHashOperator
|
||||
WeakEnumerator(nsPtrHashKey<nsIMemoryReporter>* aElem, void* aData)
|
||||
{
|
||||
MemoryReporterArray *allReporters = static_cast<MemoryReporterArray*>(aData);
|
||||
allReporters->AppendElement(aElem->GetKey());
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMemoryReporterManager::GetReportsForThisProcess(
|
||||
nsIHandleReportCallback* aHandleReport,
|
||||
|
@ -1089,16 +1029,14 @@ nsMemoryReporterManager::GetReportsForThisProcess(
|
|||
MOZ_CRASH();
|
||||
}
|
||||
|
||||
nsRefPtr<ReporterEnumerator> e;
|
||||
MemoryReporterArray allReporters;
|
||||
{
|
||||
mozilla::MutexAutoLock autoLock(mMutex);
|
||||
e = new ReporterEnumerator(mStrongReporters, mWeakReporters);
|
||||
mStrongReporters->EnumerateEntries(StrongEnumerator, &allReporters);
|
||||
mWeakReporters->EnumerateEntries(WeakEnumerator, &allReporters);
|
||||
}
|
||||
bool more;
|
||||
while (NS_SUCCEEDED(e->HasMoreElements(&more)) && more) {
|
||||
nsCOMPtr<nsIMemoryReporter> r;
|
||||
e->GetNext(getter_AddRefs(r));
|
||||
r->CollectReports(aHandleReport, aHandleReportData);
|
||||
for (uint32_t i = 0; i < allReporters.Length(); i++) {
|
||||
allReporters[i]->CollectReports(aHandleReport, aHandleReportData);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
|
|
@ -39,8 +39,8 @@ public:
|
|||
return static_cast<nsMemoryReporterManager*>(imgr.get());
|
||||
}
|
||||
|
||||
typedef nsTHashtable<nsISupportsHashKey> StrongReportersTable;
|
||||
typedef nsTHashtable<nsPtrHashKey<nsISupports> > WeakReportersTable;
|
||||
typedef nsTHashtable<nsRefPtrHashKey<nsIMemoryReporter> > StrongReportersTable;
|
||||
typedef nsTHashtable<nsPtrHashKey<nsIMemoryReporter> > WeakReportersTable;
|
||||
|
||||
void IncrementNumChildProcesses();
|
||||
void DecrementNumChildProcesses();
|
||||
|
|
Загрузка…
Ссылка в новой задаче