From e4dc4aed184aebfd3e7d595affc621cac4261df8 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 20 Feb 2025 16:02:00 -0800 Subject: [PATCH] Send search events less often (#241406) --- src/vs/base/common/numbers.ts | 5 +++++ src/vs/workbench/services/search/common/searchService.ts | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/vs/base/common/numbers.ts b/src/vs/base/common/numbers.ts index 594fcf63545..6d3d90d5cd8 100644 --- a/src/vs/base/common/numbers.ts +++ b/src/vs/base/common/numbers.ts @@ -158,3 +158,8 @@ export const randomInt = (max: number, min: number = 0): number => { return Math.round(min + randomFloat); }; + +export function randomChance(p: number): boolean { + assert(p >= 0 && p <= 1, 'p must be between 0 and 1'); + return Math.random() < p; +} diff --git a/src/vs/workbench/services/search/common/searchService.ts b/src/vs/workbench/services/search/common/searchService.ts index b5ae676f41e..b0981b9891c 100644 --- a/src/vs/workbench/services/search/common/searchService.ts +++ b/src/vs/workbench/services/search/common/searchService.ts @@ -10,6 +10,7 @@ import { CancellationError } from '../../../../base/common/errors.js'; import { Disposable, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; import { ResourceMap, ResourceSet } from '../../../../base/common/map.js'; import { Schemas } from '../../../../base/common/network.js'; +import { randomChance } from '../../../../base/common/numbers.js'; import { StopWatch } from '../../../../base/common/stopwatch.js'; import { isNumber } from '../../../../base/common/types.js'; import { URI, URI as uri } from '../../../../base/common/uri.js'; @@ -355,6 +356,11 @@ export class SearchService extends Disposable implements ISearchService { } private sendTelemetry(query: ISearchQuery, endToEndTime: number, complete?: ISearchComplete, err?: SearchError): void { + if (!randomChance(5 / 100)) { + // Noisy events, only send 5% of them + return; + } + const fileSchemeOnly = query.folderQueries.every(fq => fq.folder.scheme === Schemas.file); const otherSchemeOnly = query.folderQueries.every(fq => fq.folder.scheme !== Schemas.file); const scheme = fileSchemeOnly ? Schemas.file :