Skip to content

Commit c114ccc

Browse files
committed
have high listener leak limit only for those emitters that are used by the ResourceLabel, microsoft#63655
1 parent b2f53b4 commit c114ccc

6 files changed

Lines changed: 11 additions & 9 deletions

File tree

src/vs/base/common/event.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -403,16 +403,17 @@ export function anyEvent<T>(...events: Event<T>[]): Event<T> {
403403
return (listener, thisArgs = null, disposables?) => combinedDisposable(events.map(event => event(e => listener.call(thisArgs, e), null, disposables)));
404404
}
405405

406-
export function debounceEvent<T>(event: Event<T>, merger: (last: T, event: T) => T, delay?: number, leading?: boolean): Event<T>;
407-
export function debounceEvent<I, O>(event: Event<I>, merger: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean): Event<O>;
408-
export function debounceEvent<I, O>(event: Event<I>, merger: (last: O | undefined, event: I) => O, delay: number = 100, leading = false): Event<O> {
406+
export function debounceEvent<T>(event: Event<T>, merger: (last: T, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event<T>;
407+
export function debounceEvent<I, O>(event: Event<I>, merger: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event<O>;
408+
export function debounceEvent<I, O>(event: Event<I>, merger: (last: O | undefined, event: I) => O, delay: number = 100, leading = false, leakWarningThreshold?: number): Event<O> {
409409

410410
let subscription: IDisposable;
411411
let output: O | undefined = undefined;
412412
let handle: any = undefined;
413413
let numDebouncedCalls = 0;
414414

415415
const emitter = new Emitter<O>({
416+
leakWarningThreshold,
416417
onFirstListenerAdd() {
417418
subscription = event(cur => {
418419
numDebouncedCalls++;

src/vs/editor/common/services/modelServiceImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ export class ModelServiceImpl extends Disposable implements IModelService {
275275
private readonly _onModelRemoved: Emitter<ITextModel> = this._register(new Emitter<ITextModel>());
276276
public readonly onModelRemoved: Event<ITextModel> = this._onModelRemoved.event;
277277

278-
private readonly _onModelModeChanged: Emitter<{ model: ITextModel; oldModeId: string; }> = this._register(new Emitter<{ model: ITextModel; oldModeId: string; }>());
278+
private readonly _onModelModeChanged: Emitter<{ model: ITextModel; oldModeId: string; }> = this._register(new Emitter<{ model: ITextModel; oldModeId: string; }>({ leakWarningThreshold: 500 }));
279279
public readonly onModelModeChanged: Event<{ model: ITextModel; oldModeId: string; }> = this._onModelModeChanged.event;
280280

281281
private _modelCreationOptionsByLanguageAndResource: {

src/vs/workbench/services/configuration/node/configurationService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat
5151

5252
private workspaceEditingQueue: Queue<void>;
5353

54-
protected readonly _onDidChangeConfiguration: Emitter<IConfigurationChangeEvent> = this._register(new Emitter<IConfigurationChangeEvent>());
54+
protected readonly _onDidChangeConfiguration: Emitter<IConfigurationChangeEvent> = this._register(new Emitter<IConfigurationChangeEvent>({ leakWarningThreshold: 500 }));
5555
public readonly onDidChangeConfiguration: Event<IConfigurationChangeEvent> = this._onDidChangeConfiguration.event;
5656

5757
protected readonly _onDidChangeWorkspaceFolders: Emitter<IWorkspaceFoldersChangeEvent> = this._register(new Emitter<IWorkspaceFoldersChangeEvent>());

src/vs/workbench/services/decorations/browser/decorationsService.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,15 +339,16 @@ export class FileDecorationsService implements IDecorationsService {
339339

340340
private readonly _data = new LinkedList<DecorationProviderWrapper>();
341341
private readonly _onDidChangeDecorationsDelayed = new Emitter<URI | URI[]>();
342-
private readonly _onDidChangeDecorations = new Emitter<IResourceDecorationChangeEvent>();
342+
private readonly _onDidChangeDecorations = new Emitter<IResourceDecorationChangeEvent>({ leakWarningThreshold: 500 });
343343
private readonly _decorationStyles: DecorationStyles;
344344
private readonly _disposables: IDisposable[];
345345

346346
readonly onDidChangeDecorations: Event<IResourceDecorationChangeEvent> = anyEvent(
347347
this._onDidChangeDecorations.event,
348348
debounceEvent<URI | URI[], FileDecorationChangeEvent>(
349349
this._onDidChangeDecorationsDelayed.event,
350-
FileDecorationChangeEvent.debouncer
350+
FileDecorationChangeEvent.debouncer,
351+
undefined, undefined, 500
351352
)
352353
);
353354

src/vs/workbench/services/extensions/electron-browser/extensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
306306
this._extensionsMessages = {};
307307
this._allRequestedActivateEvents = Object.create(null);
308308

309-
this._onDidRegisterExtensions = new Emitter<void>();
309+
this._onDidRegisterExtensions = new Emitter<void>({ leakWarningThreshold: 500 });
310310

311311
this._extensionHostProcessManagers = [];
312312
this._extensionHostProcessActivationTimes = Object.create(null);

src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService {
103103
this.colorThemeStore = new ColorThemeStore(extensionService, ColorThemeData.createLoadedEmptyTheme(DEFAULT_THEME_ID, DEFAULT_THEME_SETTING_VALUE));
104104
this.onFileIconThemeChange = new Emitter<IFileIconTheme>();
105105
this.iconThemeStore = new FileIconThemeStore(extensionService);
106-
this.onColorThemeChange = new Emitter<IColorTheme>();
106+
this.onColorThemeChange = new Emitter<IColorTheme>({ leakWarningThreshold: 500 });
107107

108108
this.currentIconTheme = {
109109
id: '',

0 commit comments

Comments
 (0)