summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/unit/test_bug1555798.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_bug1555798.js')
-rw-r--r--toolkit/components/telemetry/tests/unit/test_bug1555798.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_bug1555798.js b/toolkit/components/telemetry/tests/unit/test_bug1555798.js
new file mode 100644
index 0000000000..f5a84c200c
--- /dev/null
+++ b/toolkit/components/telemetry/tests/unit/test_bug1555798.js
@@ -0,0 +1,48 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+*/
+
+ChromeUtils.defineESModuleGetters(this, {
+ TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
+});
+
+add_task(async function test_bug1555798() {
+ /*
+ The idea behind this bug is that the registration of dynamic scalars causes
+ the position of the scalarinfo for telemetry.dynamic_events_count to move
+ which causes things to asplode.
+
+ So to test this we'll be registering two dynamic events, recording to one of
+ the events (to ensure the Scalar for event1 is allocated from the unmoved
+ DynamicScalarInfo&), registering several dynamic scalars to cause the
+ nsTArray of DynamicScalarInfo to realloc, and then recording to the second
+ event to make the Event Summary Scalar for event2 try to allocate from where
+ the DynamicScalarInfo used to be.
+ */
+ Telemetry.clearEvents();
+
+ const DYNAMIC_CATEGORY = "telemetry.test.dynamic.event";
+ Telemetry.registerEvents(DYNAMIC_CATEGORY, {
+ an_event: {
+ methods: ["a_method"],
+ objects: ["an_object", "another_object"],
+ record_on_release: true,
+ expired: false,
+ },
+ });
+ Telemetry.recordEvent(DYNAMIC_CATEGORY, "a_method", "an_object");
+
+ for (let i = 0; i < 100; ++i) {
+ Telemetry.registerScalars("telemetry.test.dynamic" + i, {
+ scalar_name: {
+ kind: Ci.nsITelemetry.SCALAR_TYPE_COUNT,
+ record_on_release: true,
+ },
+ });
+ Telemetry.scalarAdd("telemetry.test.dynamic" + i + ".scalar_name", 1);
+ }
+
+ Telemetry.recordEvent(DYNAMIC_CATEGORY, "a_method", "another_object");
+
+ TelemetryTestUtils.assertNumberOfEvents(2, {}, { process: "dynamic" });
+});