1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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" });
});
|