author | Nathan Froyd <froydnj@mozilla.com> |
Mon, 09 Jan 2012 15:42:34 -0500 | |
changeset 84424 | 465bacf25d61c97a4189044067c545671a6d8584 |
parent 84423 | 020e61c8efeda9aa2f88fa68e88b90fabea96d7a |
child 84425 | 47c464033fa8353e9bd04bc035409ef46d3543a4 |
push id | 21848 |
push user | mak77@bonardo.net |
push date | Sat, 14 Jan 2012 09:02:20 +0000 |
treeherder | mozilla-central@27a7f197c6fc [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | taras |
bugs | 704176 |
milestone | 12.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/toolkit/components/telemetry/Telemetry.cpp +++ b/toolkit/components/telemetry/Telemetry.cpp @@ -70,16 +70,17 @@ public: ~TelemetryImpl(); static bool CanRecord(); static already_AddRefed<nsITelemetry> CreateTelemetryInstance(); static void ShutdownTelemetry(); static void RecordSlowStatement(const nsACString &statement, const nsACString &dbName, PRUint32 delay); + static nsresult GetHistogramEnumId(const char *name, Telemetry::ID &id); struct StmtStats { PRUint32 hitCount; PRUint32 totalTime; }; typedef nsBaseHashtableET<nsCStringHashKey, StmtStats> SlowSQLEntryType; private: bool AddSQLInfo(JSContext *cx, JSObject *rootObj, bool mainThread); @@ -407,38 +408,58 @@ TelemetryImpl::AddSQLInfo(JSContext *cx, PRUint32 num = sqlMap->EnumerateEntries(StatementEnumerator, static_cast<void*>(&args)); if (num != sqlMap->Count()) return false; return true; } +nsresult +TelemetryImpl::GetHistogramEnumId(const char *name, Telemetry::ID *id) +{ + if (!sTelemetry) { + return NS_ERROR_FAILURE; + } -nsresult -TelemetryImpl::GetHistogramByName(const nsACString &name, Histogram **ret) -{ // Cache names // Note the histogram names are statically allocated - if (!mHistogramMap.Count()) { + TelemetryImpl::HistogramMapType *map = &sTelemetry->mHistogramMap; + if (!map->Count()) { for (PRUint32 i = 0; i < Telemetry::HistogramCount; i++) { - CharPtrEntryType *entry = mHistogramMap.PutEntry(gHistograms[i].id); + CharPtrEntryType *entry = map->PutEntry(gHistograms[i].id); if (NS_UNLIKELY(!entry)) { - mHistogramMap.Clear(); + map->Clear(); return NS_ERROR_OUT_OF_MEMORY; } entry->mData = (Telemetry::ID) i; } } - CharPtrEntryType *entry = mHistogramMap.GetEntry(PromiseFlatCString(name).get()); - if (!entry) - return NS_ERROR_FAILURE; + CharPtrEntryType *entry = map->GetEntry(name); + // A histogram might not be in our static list of names (e.g. secret + // histograms maintained by Histogram itself or addon histograms). + // Use a separate error code to help the caller. + if (!entry) { + return NS_ERROR_INVALID_ARG; + } + *id = entry->mData; + return NS_OK; +} - nsresult rv = GetHistogramByEnumId(entry->mData, ret); +nsresult +TelemetryImpl::GetHistogramByName(const nsACString &name, Histogram **ret) +{ + Telemetry::ID id; + nsresult rv = GetHistogramEnumId(PromiseFlatCString(name).get(), &id); + if (NS_FAILED(rv)) { + return rv; + } + + rv = GetHistogramByEnumId(id, ret); if (NS_FAILED(rv)) return rv; return NS_OK; } NS_IMETHODIMP TelemetryImpl::HistogramFrom(const nsACString &name, const nsACString &existing_name,