mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
122 lines
3.3 KiB
JavaScript
122 lines
3.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
const Cu = Components.utils;
|
|
const INT_MAX = 0x7FFFFFFF;
|
|
|
|
const Telemetry = Cc["@mozilla.org/base/telemetry;1"].getService(Ci.nsITelemetry);
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
function test_histogram(histogram_type, name, min, max, bucket_count) {
|
|
var h = Telemetry.newHistogram(name, min, max, bucket_count, histogram_type);
|
|
|
|
var r = h.snapshot().ranges;
|
|
var sum = 0;
|
|
for(var i=0;i<r.length;i++) {
|
|
var v = r[i];
|
|
sum += v;
|
|
h.add(v);
|
|
}
|
|
var s = h.snapshot();
|
|
// verify sum
|
|
do_check_eq(sum, h.snapshot().sum);;
|
|
// there should be exactly one element per bucket
|
|
for each(var i in s.counts) {
|
|
do_check_eq(i, 1);
|
|
}
|
|
var hgrams = Telemetry.histogramSnapshots
|
|
gh = hgrams[name]
|
|
do_check_eq(gh.histogram_type, histogram_type);
|
|
|
|
do_check_eq(gh.min, min)
|
|
do_check_eq(gh.max, max)
|
|
|
|
do_check_false(gh.static);
|
|
|
|
// Check that booleans work with nonboolean histograms
|
|
h.add(false);
|
|
h.add(true);
|
|
var s = h.snapshot().counts;
|
|
do_check_eq(s[0], 2)
|
|
do_check_eq(s[1], 2)
|
|
}
|
|
|
|
function expect_fail(f) {
|
|
let failed = false;
|
|
try {
|
|
f();
|
|
failed = false;
|
|
} catch (e) {
|
|
failed = true;
|
|
}
|
|
do_check_true(failed);
|
|
}
|
|
|
|
function test_boolean_histogram()
|
|
{
|
|
var h = Telemetry.newHistogram("test::boolean histogram", 99,1,4, Telemetry.HISTOGRAM_BOOLEAN);
|
|
var r = h.snapshot().ranges;
|
|
// boolean histograms ignore numeric parameters
|
|
do_check_eq(uneval(r), uneval([0, 1, 2]))
|
|
var sum = 0
|
|
for(var i=0;i<r.length;i++) {
|
|
var v = r[i];
|
|
sum += v;
|
|
h.add(v);
|
|
}
|
|
h.add(true);
|
|
h.add(false);
|
|
var s = h.snapshot();
|
|
do_check_eq(s.histogram_type, Telemetry.HISTOGRAM_BOOLEAN);
|
|
// last bucket should always be 0 since .add parameters are normalized to either 0 or 1
|
|
do_check_eq(s.counts[2], 0);
|
|
do_check_eq(s.sum, 3);
|
|
do_check_eq(s.counts[0], 2);
|
|
}
|
|
|
|
function test_getHistogramById() {
|
|
try {
|
|
Telemetry.getHistogramById("nonexistent");
|
|
do_throw("This can't happen");
|
|
} catch (e) {
|
|
|
|
}
|
|
var h = Telemetry.getHistogramById("CYCLE_COLLECTOR");
|
|
var s = h.snapshot();
|
|
do_check_eq(s.histogram_type, Telemetry.HISTOGRAM_EXPONENTIAL);
|
|
do_check_eq(s.min, 1);
|
|
do_check_eq(s.max, 10000);
|
|
do_check_true(s.static);
|
|
}
|
|
|
|
// Check that telemetry doesn't record in private mode
|
|
function test_privateMode() {
|
|
var h = Telemetry.newHistogram("test::private_mode_boolean", 1,2,3, Telemetry.HISTOGRAM_BOOLEAN);
|
|
var orig = h.snapshot();
|
|
Telemetry.canRecord = false;
|
|
h.add(1);
|
|
do_check_eq(uneval(orig), uneval(h.snapshot()));
|
|
Telemetry.canRecord = true;
|
|
h.add(1);
|
|
do_check_neq(uneval(orig), uneval(h.snapshot()));
|
|
}
|
|
|
|
function run_test()
|
|
{
|
|
let kinds = [Telemetry.HISTOGRAM_EXPONENTIAL, Telemetry.HISTOGRAM_LINEAR]
|
|
for each (let histogram_type in kinds) {
|
|
let [min, max, bucket_count] = [1, INT_MAX - 1, 10]
|
|
test_histogram(histogram_type, "test::"+histogram_type, min, max, bucket_count);
|
|
|
|
const nh = Telemetry.newHistogram;
|
|
expect_fail(function () nh("test::min", 0, max, bucket_count, histogram_type));
|
|
expect_fail(function () nh("test::bucket_count", min, max, 1, histogram_type));
|
|
}
|
|
|
|
test_boolean_histogram();
|
|
test_getHistogramById();
|
|
test_privateMode();
|
|
}
|