--- a/toolkit/components/telemetry/tests/unit/test_TelemetryHistograms.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryHistograms.js
@@ -823,182 +823,16 @@ add_task(async function test_datasets()
Assert.ok(registered.has("TELEMETRY_TEST_KEYED_RELEASE_OPTOUT"));
registered = Telemetry.snapshotKeyedHistograms(RELEASE_CHANNEL_OPTOUT,
false /* clear */);
registered = new Set(Object.keys(registered.parent));
Assert.ok(!registered.has("TELEMETRY_TEST_KEYED_FLAG"));
Assert.ok(registered.has("TELEMETRY_TEST_KEYED_RELEASE_OPTOUT"));
});
-add_task({
- skip_if: () => gIsAndroid
-},
-function test_subsession() {
- const COUNT = "TELEMETRY_TEST_COUNT";
- const FLAG = "TELEMETRY_TEST_FLAG";
- let h = Telemetry.getHistogramById(COUNT);
- let flag = Telemetry.getHistogramById(FLAG);
-
- // Both original and duplicate should start out the same.
- h.clear();
- let snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- let subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.ok(!(COUNT in snapshot));
- Assert.ok(!(COUNT in subsession));
-
- // They should instantiate and pick-up the count.
- h.add(1);
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.ok(COUNT in snapshot);
- Assert.ok(COUNT in subsession);
- Assert.equal(snapshot[COUNT].sum, 1);
- Assert.equal(subsession[COUNT].sum, 1);
-
- // They should still reset properly.
- h.clear();
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.ok(!(COUNT in snapshot));
- Assert.ok(!(COUNT in subsession));
-
- // Both should instantiate and pick-up the count.
- h.add(1);
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.ok(COUNT in snapshot);
- Assert.ok(COUNT in subsession);
- Assert.equal(snapshot[COUNT].sum, 1);
- Assert.equal(subsession[COUNT].sum, 1);
-
- // Check that we are able to only reset the duplicate histogram.
- h.clear(true);
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.ok(COUNT in snapshot);
- Assert.ok(!(COUNT in subsession));
- Assert.equal(snapshot[COUNT].sum, 1);
-
- // Both should register the next count.
- h.add(1);
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.equal(snapshot[COUNT].sum, 2);
- Assert.equal(subsession[COUNT].sum, 1);
-
- // Retrieve a subsession snapshot and pass the flag to
- // clear subsession histograms too.
- h.clear();
- flag.clear();
- h.add(1);
- flag.add(1);
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- true /* clear */).parent;
- Assert.ok(COUNT in snapshot);
- Assert.ok(COUNT in subsession);
- Assert.ok(FLAG in snapshot);
- Assert.ok(FLAG in subsession);
- Assert.equal(snapshot[COUNT].sum, 1);
- Assert.equal(subsession[COUNT].sum, 1);
- Assert.equal(snapshot[FLAG].sum, 1);
- Assert.equal(subsession[FLAG].sum, 1);
-
- // The next subsesssion snapshot should show the histograms
- // got reset.
- snapshot = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- false /* subsession */,
- false /* clear */).parent;
- subsession = Telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
- true /* subsession */,
- false /* clear */).parent;
- Assert.ok(COUNT in snapshot);
- Assert.ok(!(COUNT in subsession));
- Assert.ok(FLAG in snapshot);
- Assert.ok(FLAG in subsession);
- Assert.equal(snapshot[COUNT].sum, 1);
- Assert.equal(snapshot[FLAG].sum, 1);
- Assert.equal(subsession[FLAG].sum, 0);
-});
-
-add_task({
- skip_if: () => gIsAndroid
-},
-function test_keyed_subsession() {
- let h = Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_FLAG");
- const KEY = "foo";
-
- // Both original and subsession should start out the same.
- h.clear();
- Assert.ok(!(KEY in h.snapshot()));
- Assert.ok(!(KEY in h.subsessionSnapshot()));
- Assert.equal(h.snapshot(KEY).sum, 0);
- Assert.equal(h.subsessionSnapshot(KEY).sum, 0);
-
- // Both should register the flag.
- h.add(KEY, 1);
- Assert.ok(KEY in h.snapshot());
- Assert.ok(KEY in h.subsessionSnapshot());
- Assert.equal(h.snapshot(KEY).sum, 1);
- Assert.equal(h.subsessionSnapshot(KEY).sum, 1);
-
- // Check that we are able to only reset the subsession histogram.
- h.clear(true);
- Assert.ok(KEY in h.snapshot());
- Assert.ok(!(KEY in h.subsessionSnapshot()));
- Assert.equal(h.snapshot(KEY).sum, 1);
- Assert.equal(h.subsessionSnapshot(KEY).sum, 0);
-
- // Setting the flag again should make both match again.
- h.add(KEY, 1);
- Assert.ok(KEY in h.snapshot());
- Assert.ok(KEY in h.subsessionSnapshot());
- Assert.equal(h.snapshot(KEY).sum, 1);
- Assert.equal(h.subsessionSnapshot(KEY).sum, 1);
-
- // Check that "snapshot and clear" works properly.
- let snapshot = h.snapshot();
- let subsession = h.snapshotSubsessionAndClear();
- Assert.ok(KEY in snapshot);
- Assert.ok(KEY in subsession);
- Assert.equal(snapshot[KEY].sum, 1);
- Assert.equal(subsession[KEY].sum, 1);
-
- subsession = h.subsessionSnapshot();
- Assert.ok(!(KEY in subsession));
- Assert.equal(h.subsessionSnapshot(KEY).sum, 0);
-});
-
add_task(async function test_keyed_keys() {
let h = Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_KEYS");
h.clear();
Telemetry.clearScalars();
// The |add| method should not throw for keys that are not allowed.
h.add("testkey", true);
h.add("thirdKey", false);
--- a/toolkit/components/telemetry/tests/unit/test_TelemetrySession.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetrySession.js
@@ -747,258 +747,16 @@ add_task(async function test_checkSubses
subsession = TelemetrySession.getPayload("environment-change", false);
Assert.ok("events" in subsession.processes.parent, "Should have an events field in subsession payload.");
events = subsession.processes.parent.events.filter(e => e[1] === "telemetry.test");
Assert.equal(events.length, 0, "Should have no test events in the subsession payload now.");
await TelemetryController.testShutdown();
});
-add_task(async function test_checkSubsessionHistograms() {
- if (gIsAndroid) {
- // We don't support subsessions yet on Android.
- return;
- }
-
- let now = new Date(2020, 1, 1, 12, 0, 0);
- let expectedDate = new Date(2020, 1, 1, 12, 0, 0);
- fakeNow(now);
- await TelemetryController.testReset();
-
- const COUNT_ID = "TELEMETRY_TEST_COUNT";
- const KEYED_ID = "TELEMETRY_TEST_KEYED_COUNT";
- const count = Telemetry.getHistogramById(COUNT_ID);
- const keyed = Telemetry.getKeyedHistogramById(KEYED_ID);
-
- const stableHistograms = new Set([
- "TELEMETRY_TEST_FLAG",
- "TELEMETRY_TEST_COUNT",
- "TELEMETRY_TEST_RELEASE_OPTOUT",
- "TELEMETRY_TEST_RELEASE_OPTIN",
- "STARTUP_CRASH_DETECTED",
- ]);
-
- const stableKeyedHistograms = new Set([
- "TELEMETRY_TEST_KEYED_FLAG",
- "TELEMETRY_TEST_KEYED_COUNT",
- "TELEMETRY_TEST_KEYED_RELEASE_OPTIN",
- "TELEMETRY_TEST_KEYED_RELEASE_OPTOUT",
- ]);
-
- // List of prefixes of histograms that could anomalously be present in
- // the subsession snapshot but not the session snapshot.
- // If you add something to this list, please reference a bug#
- const possibleAnomalyPrefixes = [
- "CYCLE_COLLECTOR_WORKER", // non-MT CC can happen between payload gathering - bug 1398431
- ];
-
- // Compare the two sets of histograms.
- // The "subsession" histograms should match the registered
- // "classic" histograms. However, histograms can change
- // between us collecting the different payloads, so we only
- // check for deep equality on known stable histograms.
- let checkHistograms = (classic, subsession, message) => {
- for (let id of Object.keys(subsession)) {
- if (possibleAnomalyPrefixes.some(prefix => id.startsWith(prefix))) {
- continue;
- }
- Assert.ok(id in classic, message + ` (${id})`);
- if (stableHistograms.has(id)) {
- Assert.deepEqual(classic[id],
- subsession[id], message);
- } else {
- Assert.equal(classic[id].histogram_type,
- subsession[id].histogram_type, message);
- }
- }
- };
-
- // Same as above, except for keyed histograms.
- let checkKeyedHistograms = (classic, subsession, message) => {
- for (let id of Object.keys(subsession)) {
- Assert.ok(id in classic, message);
- if (stableKeyedHistograms.has(id)) {
- Assert.deepEqual(classic[id],
- subsession[id], message);
- }
- }
- };
-
- // Both classic and subsession payload histograms should start the same.
- // The payloads should be identical for now except for the reason.
- count.clear();
- keyed.clear();
- let classic = TelemetrySession.getPayload();
- let subsession = TelemetrySession.getPayload("environment-change");
-
- Assert.equal(classic.info.reason, "gather-payload");
- Assert.equal(subsession.info.reason, "environment-change");
- Assert.ok(!(COUNT_ID in classic.histograms));
- Assert.ok(!(COUNT_ID in subsession.histograms));
- Assert.ok(!(KEYED_ID in classic.keyedHistograms));
- Assert.ok(!(KEYED_ID in subsession.keyedHistograms));
-
- checkHistograms(classic.histograms, subsession.histograms, "Should start the same");
- checkKeyedHistograms(classic.keyedHistograms, subsession.keyedHistograms, "Keyed should start the same");
-
- // Adding values should get picked up in both.
- count.add(1);
- keyed.add("a", 1);
- keyed.add("b", 1);
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change");
-
- Assert.ok(COUNT_ID in classic.histograms);
- Assert.ok(COUNT_ID in subsession.histograms);
- Assert.ok(KEYED_ID in classic.keyedHistograms);
- Assert.ok(KEYED_ID in subsession.keyedHistograms);
- Assert.equal(classic.histograms[COUNT_ID].sum, 1);
- Assert.equal(classic.keyedHistograms[KEYED_ID].a.sum, 1);
- Assert.equal(classic.keyedHistograms[KEYED_ID].b.sum, 1);
-
- checkHistograms(classic.histograms, subsession.histograms, "Added values should be picked up");
- checkKeyedHistograms(classic.keyedHistograms, subsession.keyedHistograms, "Added values should be picked up by keyed");
-
- // Values should still reset properly.
- count.clear();
- keyed.clear();
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change");
-
- Assert.ok(!(COUNT_ID in classic.histograms));
- Assert.ok(!(COUNT_ID in subsession.histograms));
- Assert.ok(!(KEYED_ID in classic.keyedHistograms));
- Assert.ok(!(KEYED_ID in subsession.keyedHistograms));
-
- checkHistograms(classic.histograms, subsession.histograms, "Values should reset");
- checkKeyedHistograms(classic.keyedHistograms, subsession.keyedHistograms, "Keyed values should reset");
-
- // Adding values should get picked up in both.
- count.add(1);
- keyed.add("a", 1);
- keyed.add("b", 1);
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change");
-
- Assert.ok(COUNT_ID in classic.histograms);
- Assert.ok(COUNT_ID in subsession.histograms);
- Assert.ok(KEYED_ID in classic.keyedHistograms);
- Assert.ok(KEYED_ID in subsession.keyedHistograms);
- Assert.equal(classic.histograms[COUNT_ID].sum, 1);
- Assert.equal(classic.keyedHistograms[KEYED_ID].a.sum, 1);
- Assert.equal(classic.keyedHistograms[KEYED_ID].b.sum, 1);
-
- checkHistograms(classic.histograms, subsession.histograms, "Adding values should be picked up again");
- checkKeyedHistograms(classic.keyedHistograms, subsession.keyedHistograms, "Adding values should be picked up by keyed again");
-
- // We should be able to reset only the subsession histograms.
- // First check that "snapshot and clear" still returns the old state...
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change", true);
-
- let subsessionStartDate = new Date(classic.info.subsessionStartDate);
- Assert.equal(subsessionStartDate.toISOString(), expectedDate.toISOString());
- subsessionStartDate = new Date(subsession.info.subsessionStartDate);
- Assert.equal(subsessionStartDate.toISOString(), expectedDate.toISOString());
- checkHistograms(classic.histograms, subsession.histograms, "Should be able to reset subsession");
- checkKeyedHistograms(classic.keyedHistograms, subsession.keyedHistograms, "Should be able to reset subsession keyed");
-
- // ... then check that the next snapshot shows the subsession
- // histograms got reset.
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change");
-
- Assert.ok(COUNT_ID in classic.histograms);
- Assert.ok(!(COUNT_ID in subsession.histograms));
- Assert.equal(classic.histograms[COUNT_ID].sum, 1);
-
- Assert.ok(KEYED_ID in classic.keyedHistograms);
- Assert.ok(!(KEYED_ID in subsession.keyedHistograms));
- Assert.equal(classic.keyedHistograms[KEYED_ID].a.sum, 1);
- Assert.equal(classic.keyedHistograms[KEYED_ID].b.sum, 1);
-
- // Adding values should get picked up in both again.
- count.add(1);
- keyed.add("a", 1);
- keyed.add("b", 1);
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change");
-
- Assert.ok(COUNT_ID in classic.histograms);
- Assert.ok(COUNT_ID in subsession.histograms);
- Assert.equal(classic.histograms[COUNT_ID].sum, 2);
- Assert.equal(subsession.histograms[COUNT_ID].sum, 1);
-
- Assert.ok(KEYED_ID in classic.keyedHistograms);
- Assert.ok(KEYED_ID in subsession.keyedHistograms);
- Assert.equal(classic.keyedHistograms[KEYED_ID].a.sum, 2);
- Assert.equal(classic.keyedHistograms[KEYED_ID].b.sum, 2);
- Assert.equal(subsession.keyedHistograms[KEYED_ID].a.sum, 1);
- Assert.equal(subsession.keyedHistograms[KEYED_ID].b.sum, 1);
-
- await TelemetryController.testShutdown();
-});
-
-add_task(async function test_checkSubsessionData() {
- if (gIsAndroid) {
- // We don't support subsessions yet on Android.
- return;
- }
-
- // Keep track of the active ticks count if the session recorder is available.
- let getActiveTicks = () => TelemetrySession.getPayload().simpleMeasurements.activeTicks;
- let activeTicksAtSubsessionStart = getActiveTicks();
- let expectedActiveTicks = activeTicksAtSubsessionStart;
-
- let incrementActiveTicks = () => {
- TelemetrySession.observe(null, "user-interaction-active");
- ++expectedActiveTicks;
- };
-
- await TelemetryController.testReset();
-
- // Both classic and subsession payload data should be the same on the first subsession.
- incrementActiveTicks();
- let classic = TelemetrySession.getPayload();
- let subsession = TelemetrySession.getPayload("environment-change");
- Assert.equal(classic.simpleMeasurements.activeTicks, expectedActiveTicks,
- "Classic pings must count active ticks (in simpleMeasurements) since the beginning of the session.");
- Assert.equal(subsession.simpleMeasurements.activeTicks, expectedActiveTicks,
- "Subsessions must count active ticks (in simpleMeasurements) as classic pings on the first subsession.");
- Assert.equal(subsession.processes.parent.scalars["browser.engagement.active_ticks"], expectedActiveTicks,
- "Subsessions must count active ticks (in scalars) as classic pings on the first subsession.");
-
- // Start a new subsession and check that the active ticks are correctly reported.
- incrementActiveTicks();
- activeTicksAtSubsessionStart = getActiveTicks();
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change", true);
- Assert.equal(classic.simpleMeasurements.activeTicks, expectedActiveTicks,
- "Classic pings must count active ticks (in simpleMeasurements) since the beginning of the session.");
- Assert.equal(subsession.simpleMeasurements.activeTicks, expectedActiveTicks,
- "Pings must not lose the tick count when starting a new subsession.");
- Assert.equal(subsession.processes.parent.scalars["browser.engagement.active_ticks"], expectedActiveTicks,
- "Active ticks (in scalars) must not lose count for a previous subsession when starting a new subsession.");
-
- // Get a new subsession payload without clearing the subsession.
- incrementActiveTicks();
- classic = TelemetrySession.getPayload();
- subsession = TelemetrySession.getPayload("environment-change");
- Assert.equal(classic.simpleMeasurements.activeTicks, expectedActiveTicks,
- "Classic pings must count active ticks (in simpleMeasurements) since the beginning of the session.");
- Assert.equal(subsession.simpleMeasurements.activeTicks,
- expectedActiveTicks - activeTicksAtSubsessionStart,
- "Subsessions must count active ticks (in simpleMeasurements) since the last new subsession.");
- Assert.equal(subsession.processes.parent.scalars["browser.engagement.active_ticks"],
- expectedActiveTicks - activeTicksAtSubsessionStart,
- "Subsessions must count active ticks (in scalars) since the last new subsession.");
-
- await TelemetryController.testShutdown();
-});
-
add_task(async function test_dailyCollection() {
if (gIsAndroid) {
// We don't do daily collections yet on Android.
return;
}
let now = new Date(2030, 1, 1, 12, 0, 0);
let nowHour = new Date(2030, 1, 1, 12, 0, 0);