From b265f733f16c4297c3d08cc8e99173937215a812 Mon Sep 17 00:00:00 2001 From: Perry McManis Date: Tue, 19 Mar 2024 13:37:16 +0000 Subject: [PATCH] Bug 1885204 - Use JS single sample accumulation for custom distributions where possible r=TravisLong,webidl,smaug Differential Revision: https://phabricator.services.mozilla.com/D204549 --- dom/webidl/GleanMetrics.webidl | 10 ++++++++++ .../cookiebanners/CookieBannerChild.sys.mjs | 16 ++++++++-------- .../extensions/ExtensionTelemetry.sys.mjs | 2 +- .../bindings/private/CustomDistribution.cpp | 4 ++++ .../glean/bindings/private/CustomDistribution.h | 2 ++ .../pdfjs/content/PdfJsTelemetry.sys.mjs | 14 +++++++------- toolkit/modules/BrowserTelemetryUtils.sys.mjs | 2 +- 7 files changed, 33 insertions(+), 17 deletions(-) diff --git a/dom/webidl/GleanMetrics.webidl b/dom/webidl/GleanMetrics.webidl index 47dc3262f136..162b9448a5e1 100644 --- a/dom/webidl/GleanMetrics.webidl +++ b/dom/webidl/GleanMetrics.webidl @@ -221,6 +221,16 @@ interface GleanCustomDistribution : GleanMetric { */ undefined accumulateSamples(sequence aSamples); + /** + * Accumulates the provided single signed sample in the metric. + * + * @param aSample - The sample to be recorded by the metric. + * + * Notes: Discards any negative value of `sample` and reports an + * `ErrorType::InvalidValue`. + */ + undefined accumulateSingleSample(long long aSample); + /** * **Test-only API** * diff --git a/toolkit/components/cookiebanners/CookieBannerChild.sys.mjs b/toolkit/components/cookiebanners/CookieBannerChild.sys.mjs index 4d8b48150492..b56303d95b70 100644 --- a/toolkit/components/cookiebanners/CookieBannerChild.sys.mjs +++ b/toolkit/components/cookiebanners/CookieBannerChild.sys.mjs @@ -488,18 +488,18 @@ export class CookieBannerChild extends JSWindowActorChild { let querySelectorTimeUS = Math.round(querySelectorTimeMS * 1000); if (this.#isTopLevel) { - Glean.cookieBannersClick.querySelectorRunCountPerWindowTopLevel.accumulateSamples( - [querySelectorCount] + Glean.cookieBannersClick.querySelectorRunCountPerWindowTopLevel.accumulateSingleSample( + querySelectorCount ); - Glean.cookieBannersClick.querySelectorRunDurationPerWindowTopLevel.accumulateSamples( - [querySelectorTimeUS] + Glean.cookieBannersClick.querySelectorRunDurationPerWindowTopLevel.accumulateSingleSample( + querySelectorTimeUS ); } else { - Glean.cookieBannersClick.querySelectorRunCountPerWindowFrame.accumulateSamples( - [querySelectorCount] + Glean.cookieBannersClick.querySelectorRunCountPerWindowFrame.accumulateSingleSample( + querySelectorCount ); - Glean.cookieBannersClick.querySelectorRunDurationPerWindowFrame.accumulateSamples( - [querySelectorTimeUS] + Glean.cookieBannersClick.querySelectorRunDurationPerWindowFrame.accumulateSingleSample( + querySelectorTimeUS ); } diff --git a/toolkit/components/extensions/ExtensionTelemetry.sys.mjs b/toolkit/components/extensions/ExtensionTelemetry.sys.mjs index 57f052372c49..a3bbf02a59d8 100644 --- a/toolkit/components/extensions/ExtensionTelemetry.sys.mjs +++ b/toolkit/components/extensions/ExtensionTelemetry.sys.mjs @@ -290,7 +290,7 @@ class ExtensionTelemetryMetric { // NOTE: extensionsTiming may become a property of the GLEAN_METRICS_TYPES // map once we may introduce new histograms that are not part of the // extensionsTiming Glean metrics category. - Glean.extensionsTiming[metric].accumulateSamples([value]); + Glean.extensionsTiming[metric].accumulateSingleSample(value); break; } case "labeled_counter": { diff --git a/toolkit/components/glean/bindings/private/CustomDistribution.cpp b/toolkit/components/glean/bindings/private/CustomDistribution.cpp index aa9df1263f75..88e96236db33 100644 --- a/toolkit/components/glean/bindings/private/CustomDistribution.cpp +++ b/toolkit/components/glean/bindings/private/CustomDistribution.cpp @@ -97,6 +97,10 @@ void GleanCustomDistribution::AccumulateSamples( mCustomDist.AccumulateSamplesSigned(aSamples); } +void GleanCustomDistribution::AccumulateSingleSample(const int64_t aSample) { + mCustomDist.AccumulateSingleSampleSigned(aSample); +} + void GleanCustomDistribution::TestGetValue( const nsACString& aPingName, dom::Nullable& aRetval, ErrorResult& aRv) { diff --git a/toolkit/components/glean/bindings/private/CustomDistribution.h b/toolkit/components/glean/bindings/private/CustomDistribution.h index 3eee8bfd73b1..8074a0542edc 100644 --- a/toolkit/components/glean/bindings/private/CustomDistribution.h +++ b/toolkit/components/glean/bindings/private/CustomDistribution.h @@ -95,6 +95,8 @@ class GleanCustomDistribution final : public GleanMetric { void AccumulateSamples(const dom::Sequence& aSamples); + void AccumulateSingleSample(const int64_t aSample); + void TestGetValue(const nsACString& aPingName, dom::Nullable& aRetval, ErrorResult& aRv); diff --git a/toolkit/components/pdfjs/content/PdfJsTelemetry.sys.mjs b/toolkit/components/pdfjs/content/PdfJsTelemetry.sys.mjs index 16e4e85d5838..4724f25c3379 100644 --- a/toolkit/components/pdfjs/content/PdfJsTelemetry.sys.mjs +++ b/toolkit/components/pdfjs/content/PdfJsTelemetry.sys.mjs @@ -47,7 +47,7 @@ export class PdfJsTelemetry { } static onTimeToView(ms) { - Glean.pdfjs.timeToView.accumulateSamples([ms]); + Glean.pdfjs.timeToView.accumulateSingleSample(ms); } static onEditing({ type, data }) { @@ -99,9 +99,9 @@ export class PdfJsTelemetry { Glean.pdfjsEditingHighlight.method[data.methodOfCreation].add(1); Glean.pdfjsEditingHighlight.color[data.color].add(1); if (data.type === "free_highlight") { - Glean.pdfjsEditingHighlight.thickness.accumulateSamples([ - data.thickness, - ]); + Glean.pdfjsEditingHighlight.thickness.accumulateSingleSample( + data.thickness + ); } break; case "color_changed": @@ -109,9 +109,9 @@ export class PdfJsTelemetry { Glean.pdfjsEditingHighlight.colorChanged.add(1); break; case "thickness_changed": - Glean.pdfjsEditingHighlight.thickness.accumulateSamples([ - data.thickness, - ]); + Glean.pdfjsEditingHighlight.thickness.accumulateSingleSample( + data.thickness + ); Glean.pdfjsEditingHighlight.thicknessChanged.add(1); break; case "deleted": diff --git a/toolkit/modules/BrowserTelemetryUtils.sys.mjs b/toolkit/modules/BrowserTelemetryUtils.sys.mjs index c3035974e86e..39b12676422c 100644 --- a/toolkit/modules/BrowserTelemetryUtils.sys.mjs +++ b/toolkit/modules/BrowserTelemetryUtils.sys.mjs @@ -64,7 +64,7 @@ export var BrowserTelemetryUtils = { } else if (currentTime >= this._lastRecordSiteOrigin + this.min_interval) { this._lastRecordSiteOrigin = currentTime; - Glean.geckoview.documentSiteOrigins.accumulateSamples([originCount]); + Glean.geckoview.documentSiteOrigins.accumulateSingleSample(originCount); } }, };