bug 1440673 - Summarize dynamic events to a dynamic scalar r?Dexter
MozReview-Commit-ID: KD9ADGJZZCM
--- a/toolkit/components/telemetry/TelemetryScalar.cpp
+++ b/toolkit/components/telemetry/TelemetryScalar.cpp
@@ -1504,16 +1504,29 @@ TelemetryScalar::InitializeGlobalState(b
// Populate the static scalar name->id cache. Note that the scalar names are
// statically allocated and come from the automatically generated TelemetryScalarData.h.
uint32_t scalarCount = static_cast<uint32_t>(mozilla::Telemetry::ScalarID::ScalarCount);
for (uint32_t i = 0; i < scalarCount; i++) {
CharPtrEntryType *entry = gScalarNameIDMap.PutEntry(gScalars[i].name());
entry->mData = ScalarKey{i, false};
}
+ // To summarize dynamic events we need a dynamic scalar.
+ const nsTArray<DynamicScalarInfo> initialDynamicScalars({
+ DynamicScalarInfo{
+ nsITelemetry::SCALAR_TYPE_COUNT,
+ true /* recordOnRelease */,
+ false /* expired */,
+ nsAutoCString("telemetry.dynamic_event_counts"),
+ true /* keyed */,
+ false /* built-in */,
+ },
+ });
+ internal_RegisterScalars(locker, initialDynamicScalars);
+
gInitDone = true;
}
void
TelemetryScalar::DeInitializeGlobalState()
{
StaticMutexAutoLock locker(gTelemetryScalarsMutex);
gCanRecordBase = false;
@@ -2541,22 +2554,33 @@ TelemetryScalar::SummarizeEvent(const ns
ProcessID aProcessType, bool aDynamic)
{
MOZ_ASSERT(XRE_IsParentProcess(), "Only summarize events in the parent process");
if (!XRE_IsParentProcess()) {
return;
}
StaticMutexAutoLock lock(gTelemetryScalarsMutex);
+
ScalarKey scalarKey{static_cast<uint32_t>(ScalarID::TELEMETRY_EVENT_COUNTS), aDynamic};
+ if (aDynamic) {
+ nsresult rv = internal_GetEnumByScalarName(lock,
+ nsAutoCString("telemetry.dynamic_event_counts"),
+ &scalarKey);
+ if (NS_FAILED(rv)) {
+ NS_WARNING("NS_FAILED getting ScalarKey for telemetry.dynamic_event_counts");
+ return;
+ }
+ }
+
KeyedScalar* scalar = nullptr;
nsresult rv = internal_GetKeyedScalarByEnum(lock, scalarKey, aProcessType, &scalar);
if (NS_FAILED(rv)) {
- NS_WARNING("NS_FAILED getting keyed scalar telemetry.event_counts. Wut.");
+ NS_WARNING("NS_FAILED getting keyed scalar for event summary. Wut.");
return;
}
static uint32_t sMaxEventSummaryKeys =
Preferences::GetUint("toolkit.telemetry.maxEventSummaryKeys", 500);
// Set this each time as it may have been cleared and recreated between calls
scalar->SetMaximumNumberOfKeys(sMaxEventSummaryKeys);