mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-07 11:48:19 +02:00
333 lines
9.9 KiB
JavaScript
333 lines
9.9 KiB
JavaScript
const { TelemetryController } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/TelemetryController.sys.mjs"
|
|
);
|
|
const { TelemetrySession } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/TelemetrySession.sys.mjs"
|
|
);
|
|
const { ContentTaskUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/ContentTaskUtils.sys.mjs"
|
|
);
|
|
|
|
const MESSAGE_CHILD_TEST_DONE = "ChildTest:Done";
|
|
|
|
function run_child_test() {
|
|
// Setup histograms with some fixed values.
|
|
let flagHist = Telemetry.getHistogramById("TELEMETRY_TEST_FLAG");
|
|
flagHist.add(1);
|
|
let countHist = Telemetry.getHistogramById("TELEMETRY_TEST_COUNT");
|
|
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_COUNT", false);
|
|
countHist.add();
|
|
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_COUNT", true);
|
|
countHist.add();
|
|
countHist.add();
|
|
let categHist = Telemetry.getHistogramById("TELEMETRY_TEST_CATEGORICAL");
|
|
categHist.add("Label2");
|
|
categHist.add("Label3");
|
|
|
|
let flagKeyed = Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_FLAG");
|
|
flagKeyed.add("a", 1);
|
|
flagKeyed.add("b", 1);
|
|
let countKeyed = Telemetry.getKeyedHistogramById(
|
|
"TELEMETRY_TEST_KEYED_COUNT"
|
|
);
|
|
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_KEYED_COUNT", false);
|
|
countKeyed.add("a");
|
|
countKeyed.add("b");
|
|
Telemetry.setHistogramRecordingEnabled("TELEMETRY_TEST_KEYED_COUNT", true);
|
|
countKeyed.add("a");
|
|
countKeyed.add("b");
|
|
countKeyed.add("b");
|
|
|
|
// Test record_in_processes
|
|
let contentLinear = Telemetry.getHistogramById(
|
|
"TELEMETRY_TEST_CONTENT_PROCESS"
|
|
);
|
|
contentLinear.add(10);
|
|
let contentKeyed = Telemetry.getKeyedHistogramById(
|
|
"TELEMETRY_TEST_KEYED_CONTENT_PROCESS"
|
|
);
|
|
contentKeyed.add("content", 1);
|
|
let contentFlag = Telemetry.getHistogramById(
|
|
"TELEMETRY_TEST_FLAG_CONTENT_PROCESS"
|
|
);
|
|
contentFlag.add(true);
|
|
let mainFlag = Telemetry.getHistogramById("TELEMETRY_TEST_FLAG_MAIN_PROCESS");
|
|
mainFlag.add(true);
|
|
let allLinear = Telemetry.getHistogramById("TELEMETRY_TEST_ALL_PROCESSES");
|
|
allLinear.add(10);
|
|
let allChildLinear = Telemetry.getHistogramById(
|
|
"TELEMETRY_TEST_ALL_CHILD_PROCESSES"
|
|
);
|
|
allChildLinear.add(10);
|
|
|
|
// Test snapshot APIs.
|
|
// Should be forbidden in content processes.
|
|
Assert.throws(
|
|
() => Telemetry.getHistogramById("TELEMETRY_TEST_COUNT").snapshot(),
|
|
/Histograms can only be snapshotted in the parent process/,
|
|
"Snapshotting should be forbidden in the content process"
|
|
);
|
|
|
|
Assert.throws(
|
|
() =>
|
|
Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_COUNT").snapshot(),
|
|
/Keyed histograms can only be snapshotted in the parent process/,
|
|
"Snapshotting should be forbidden in the content process"
|
|
);
|
|
|
|
Assert.throws(
|
|
() => Telemetry.getHistogramById("TELEMETRY_TEST_COUNT").clear(),
|
|
/Histograms can only be cleared in the parent process/,
|
|
"Clearing should be forbidden in the content process"
|
|
);
|
|
|
|
Assert.throws(
|
|
() => Telemetry.getKeyedHistogramById("TELEMETRY_TEST_KEYED_COUNT").clear(),
|
|
/Keyed histograms can only be cleared in the parent process/,
|
|
"Clearing should be forbidden in the content process"
|
|
);
|
|
|
|
Assert.throws(
|
|
() => Telemetry.getSnapshotForHistograms(),
|
|
/NS_ERROR_FAILURE/,
|
|
"Snapshotting should be forbidden in the content process"
|
|
);
|
|
|
|
Assert.throws(
|
|
() => Telemetry.getSnapshotForKeyedHistograms(),
|
|
/NS_ERROR_FAILURE/,
|
|
"Snapshotting should be forbidden in the content process"
|
|
);
|
|
}
|
|
|
|
function check_histogram_values(payload) {
|
|
const hs = payload.histograms;
|
|
Assert.ok("TELEMETRY_TEST_COUNT" in hs, "Should have count test histogram.");
|
|
Assert.ok("TELEMETRY_TEST_FLAG" in hs, "Should have flag test histogram.");
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_CATEGORICAL" in hs,
|
|
"Should have categorical test histogram."
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_COUNT.sum,
|
|
2,
|
|
"Count test histogram should have the right value."
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_FLAG.sum,
|
|
1,
|
|
"Flag test histogram should have the right value."
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_CATEGORICAL.sum,
|
|
3,
|
|
"Categorical test histogram should have the right sum."
|
|
);
|
|
|
|
const kh = payload.keyedHistograms;
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_KEYED_COUNT" in kh,
|
|
"Should have keyed count test histogram."
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_KEYED_FLAG" in kh,
|
|
"Should have keyed flag test histogram."
|
|
);
|
|
Assert.equal(
|
|
kh.TELEMETRY_TEST_KEYED_COUNT.a.sum,
|
|
1,
|
|
"Keyed count test histogram should have the right value."
|
|
);
|
|
Assert.equal(
|
|
kh.TELEMETRY_TEST_KEYED_COUNT.b.sum,
|
|
2,
|
|
"Keyed count test histogram should have the right value."
|
|
);
|
|
Assert.equal(
|
|
kh.TELEMETRY_TEST_KEYED_FLAG.a.sum,
|
|
1,
|
|
"Keyed flag test histogram should have the right value."
|
|
);
|
|
Assert.equal(
|
|
kh.TELEMETRY_TEST_KEYED_FLAG.b.sum,
|
|
1,
|
|
"Keyed flag test histogram should have the right value."
|
|
);
|
|
}
|
|
|
|
add_task(async function() {
|
|
if (!runningInParent) {
|
|
TelemetryController.testSetupContent();
|
|
run_child_test();
|
|
dump("... done with child test\n");
|
|
do_send_remote_message(MESSAGE_CHILD_TEST_DONE);
|
|
return;
|
|
}
|
|
|
|
// Setup.
|
|
do_get_profile(true);
|
|
await loadAddonManager(APP_ID, APP_NAME, APP_VERSION, PLATFORM_VERSION);
|
|
finishAddonManagerStartup();
|
|
fakeIntlReady();
|
|
await TelemetryController.testSetup();
|
|
if (runningInParent) {
|
|
// Make sure we don't generate unexpected pings due to pref changes.
|
|
await setEmptyPrefWatchlist();
|
|
}
|
|
|
|
// Run test in child, don't wait for it to finish.
|
|
run_test_in_child("test_ChildHistograms.js");
|
|
await do_await_remote_message(MESSAGE_CHILD_TEST_DONE);
|
|
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
let payload = TelemetrySession.getPayload("test-ping");
|
|
return (
|
|
payload &&
|
|
"processes" in payload &&
|
|
"content" in payload.processes &&
|
|
"histograms" in payload.processes.content &&
|
|
"TELEMETRY_TEST_COUNT" in payload.processes.content.histograms
|
|
);
|
|
});
|
|
|
|
// Test record_in_processes in main process, too
|
|
let contentLinear = Telemetry.getHistogramById(
|
|
"TELEMETRY_TEST_CONTENT_PROCESS"
|
|
);
|
|
contentLinear.add(20);
|
|
let contentKeyed = Telemetry.getKeyedHistogramById(
|
|
"TELEMETRY_TEST_KEYED_CONTENT_PROCESS"
|
|
);
|
|
contentKeyed.add("parent", 1);
|
|
let contentFlag = Telemetry.getHistogramById(
|
|
"TELEMETRY_TEST_FLAG_CONTENT_PROCESS"
|
|
);
|
|
contentFlag.add(true);
|
|
let mainFlag = Telemetry.getHistogramById("TELEMETRY_TEST_FLAG_MAIN_PROCESS");
|
|
mainFlag.add(true);
|
|
let allLinear = Telemetry.getHistogramById("TELEMETRY_TEST_ALL_PROCESSES");
|
|
allLinear.add(20);
|
|
let allChildLinear = Telemetry.getHistogramById(
|
|
"TELEMETRY_TEST_ALL_CHILD_PROCESSES"
|
|
);
|
|
allChildLinear.add(20);
|
|
let countKeyed = Telemetry.getKeyedHistogramById(
|
|
"TELEMETRY_TEST_KEYED_COUNT"
|
|
);
|
|
countKeyed.add("a");
|
|
|
|
const payload = TelemetrySession.getPayload("test-ping");
|
|
Assert.ok("processes" in payload, "Should have processes section");
|
|
Assert.ok(
|
|
"content" in payload.processes,
|
|
"Should have child process section"
|
|
);
|
|
Assert.ok(
|
|
"histograms" in payload.processes.content,
|
|
"Child process section should have histograms."
|
|
);
|
|
Assert.ok(
|
|
"keyedHistograms" in payload.processes.content,
|
|
"Child process section should have keyed histograms."
|
|
);
|
|
check_histogram_values(payload.processes.content);
|
|
|
|
// Check record_in_processes
|
|
// Content Process
|
|
let hs = payload.processes.content.histograms;
|
|
let khs = payload.processes.content.keyedHistograms;
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_CONTENT_PROCESS" in hs,
|
|
"Should have content process histogram"
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_CONTENT_PROCESS.sum,
|
|
10,
|
|
"Should have correct value"
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_KEYED_CONTENT_PROCESS" in khs,
|
|
"Should have keyed content process histogram"
|
|
);
|
|
Assert.equal(
|
|
khs.TELEMETRY_TEST_KEYED_CONTENT_PROCESS.content.sum,
|
|
1,
|
|
"Should have correct value"
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_FLAG_CONTENT_PROCESS" in hs,
|
|
"Should have content process histogram"
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_FLAG_CONTENT_PROCESS.sum,
|
|
1,
|
|
"Should have correct value"
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_ALL_PROCESSES" in hs,
|
|
"Should have content process histogram"
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_ALL_PROCESSES.sum,
|
|
10,
|
|
"Should have correct value"
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_ALL_CHILD_PROCESSES" in hs,
|
|
"Should have content process histogram"
|
|
);
|
|
Assert.equal(
|
|
hs.TELEMETRY_TEST_ALL_CHILD_PROCESSES.sum,
|
|
10,
|
|
"Should have correct value"
|
|
);
|
|
Assert.ok(
|
|
!("TELEMETRY_TEST_FLAG_MAIN_PROCESS" in hs),
|
|
"Should not have main process histogram in child process payload"
|
|
);
|
|
|
|
// Main Process
|
|
let mainHs = payload.histograms;
|
|
let mainKhs = payload.keyedHistograms;
|
|
Assert.ok(
|
|
!("TELEMETRY_TEST_CONTENT_PROCESS" in mainHs),
|
|
"Should not have content process histogram in main process payload"
|
|
);
|
|
Assert.ok(
|
|
!("TELEMETRY_TEST_KEYED_CONTENT_PROCESS" in mainKhs),
|
|
"Should not have keyed content process histogram in main process payload"
|
|
);
|
|
Assert.ok(
|
|
!("TELEMETRY_TEST_FLAG_CONTENT_PROCESS" in mainHs),
|
|
"Should not have content process histogram in main process payload"
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_ALL_PROCESSES" in mainHs,
|
|
"Should have all-process histogram in main process payload"
|
|
);
|
|
Assert.equal(
|
|
mainHs.TELEMETRY_TEST_ALL_PROCESSES.sum,
|
|
20,
|
|
"Should have correct value"
|
|
);
|
|
Assert.ok(
|
|
!("TELEMETRY_TEST_ALL_CHILD_PROCESSES" in mainHs),
|
|
"Should not have all-child process histogram in main process payload"
|
|
);
|
|
Assert.ok(
|
|
"TELEMETRY_TEST_FLAG_MAIN_PROCESS" in mainHs,
|
|
"Should have main process histogram in main process payload"
|
|
);
|
|
Assert.equal(
|
|
mainHs.TELEMETRY_TEST_FLAG_MAIN_PROCESS.sum,
|
|
1,
|
|
"Should have correct value"
|
|
);
|
|
Assert.equal(
|
|
mainKhs.TELEMETRY_TEST_KEYED_COUNT.a.sum,
|
|
1,
|
|
"Should have correct value in parent"
|
|
);
|
|
|
|
do_test_finished();
|
|
});
|