summaryrefslogtreecommitdiffstats
path: root/toolkit/components/glean/bindings/jog/JOG.h
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/glean/bindings/jog/JOG.h')
-rw-r--r--toolkit/components/glean/bindings/jog/JOG.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/toolkit/components/glean/bindings/jog/JOG.h b/toolkit/components/glean/bindings/jog/JOG.h
new file mode 100644
index 0000000000..ce51249d00
--- /dev/null
+++ b/toolkit/components/glean/bindings/jog/JOG.h
@@ -0,0 +1,122 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#ifndef mozilla_glean_JOG_h
+#define mozilla_glean_JOG_h
+
+#include "nsStringFwd.h"
+#include "nsTArray.h"
+#include "mozilla/Maybe.h"
+
+namespace mozilla::glean {
+
+class JOG {
+ public:
+ /**
+ * Returns whether JOG knows about a category by this name
+ *
+ * @param aCategoryName The category name to check.
+ *
+ * @returns true if JOG is aware of a category by the given name at this time
+ */
+ static bool HasCategory(const nsACString& aCategoryName);
+
+ /**
+ * Runs the runtime registrar.
+ *
+ * Locates the runtime metrics file and, if present, loads and processes it.
+ *
+ * Only does any work at all if !mozilla::IsPackagedBuild()
+ *
+ * **Note:** When this function does something, it is expensive, running
+ * synchronous file I/O to ensure that the registration is complete when this
+ * call returns.
+ *
+ * @param aForce Set to `true` if you want to force the I/O to run. Defaults
+ * to `false`, which doesn't run the I/O if it's already run and
+ * returns the previous return value.
+ * @returns whether it found the runtime metrics file and succesfully loaded,
+ * processed, and registered the described metrics.
+ */
+ static bool EnsureRuntimeMetricsRegistered(bool aForce = false);
+
+ /**
+ * Returns whether, if a metric is absent in the runtime-registered metrics,
+ * you should check the compile-time-registered metrics.
+ *
+ * Runtime-registered metrics can either replace all compile-time-registered
+ * metrics (like in artefact builds) or just be supplementing compile-time-
+ * registered metrics (like addons/dynamic telemetry/etc).
+ *
+ * This is tied to the current state of runtime metric registration. So it
+ * may return false at one time and true later (e.g. if RuntimeRegistrar is
+ * run in between).
+ *
+ * @return true if you should treat the runtime-registered metrics as
+ * authoritative and comprehensive.
+ */
+ static bool AreRuntimeMetricsComprehensive();
+
+ /**
+ * Adds the runtime-registered metrics' categories to `aNames`.
+ *
+ * @param aNames The list to add the categories' names to.
+ */
+ static void GetCategoryNames(nsTArray<nsString>& aNames);
+
+ /**
+ * Get the metric id+type in a u32 for a named runtime-registered metric.
+ *
+ * Return value's only useful to GleanJSMetricsLookup.h
+ *
+ * @param aMetricName The `myCategory.myName` dotted.camelCase metric name.
+ * @return Nothing() if no metric by that name was registered at runtime.
+ * Otherwise, the encoded u32 with metric id and metric type id for
+ * the runtime-registered metric.
+ */
+ static Maybe<uint32_t> GetMetric(const nsACString& aMetricName);
+
+ /**
+ * Get the metric name for an identified runtime-registered metric.
+ *
+ * @param aMetricId The id of the runtime-registered metric.
+ * @return Nothing() if no metric by that id has been registered.
+ * Otherwise, the `myCategory.myName` dotted.camelCase metric name of
+ * the runtime-registered metric.
+ */
+ static Maybe<nsCString> GetMetricName(uint32_t aMetricId);
+
+ /**
+ * Adds `aCategoryName`'s runtime-registered metrics' names to `aNames`.
+ *
+ * @param aCategoryName The name of the category we want the metric names for.
+ * @param aNames The list to add the metrics' names to.
+ */
+ static void GetMetricNames(const nsACString& aCategoryName,
+ nsTArray<nsString>& aNames);
+
+ /**
+ * Get the ping id in a u32 for a named runtime-registered ping.
+ *
+ * Return value's only useful to GleanJSPingsLookup.h
+ *
+ * @param aPingName The ping name.
+ * @return Nothing() if no ping by that name was registered at runtime.
+ * Otherwise, the id for the runtime-registered ping.
+ */
+ static Maybe<uint32_t> GetPing(const nsACString& aPingName);
+
+ /**
+ * Adds the runtime-registered pings' names to `aNames`.
+ *
+ * @param aNames The list to add the pings' names to.
+ */
+ static void GetPingNames(nsTArray<nsString>& aNames);
+};
+
+} // namespace mozilla::glean
+
+#endif /* mozilla_glean_JOG_h */