diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index 90d768a6269b3fd5204b3ed5b72bfbbb0162333b..53ac6b535c7c3918bd6969a573ffcbc33ff63d08 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -403,9 +403,9 @@ export function anyEvent(...events: Event[]): Event { return (listener, thisArgs = null, disposables?) => combinedDisposable(events.map(event => event(e => listener.call(thisArgs, e), null, disposables))); } -export function debounceEvent(event: Event, merger: (last: T, event: T) => T, delay?: number, leading?: boolean): Event; -export function debounceEvent(event: Event, merger: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean): Event; -export function debounceEvent(event: Event, merger: (last: O | undefined, event: I) => O, delay: number = 100, leading = false): Event { +export function debounceEvent(event: Event, merger: (last: T, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event; +export function debounceEvent(event: Event, merger: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event; +export function debounceEvent(event: Event, merger: (last: O | undefined, event: I) => O, delay: number = 100, leading = false, leakWarningThreshold?: number): Event { let subscription: IDisposable; let output: O | undefined = undefined; @@ -413,6 +413,7 @@ export function debounceEvent(event: Event, merger: (last: O | undefine let numDebouncedCalls = 0; const emitter = new Emitter({ + leakWarningThreshold, onFirstListenerAdd() { subscription = event(cur => { numDebouncedCalls++; diff --git a/src/vs/editor/common/services/modelServiceImpl.ts b/src/vs/editor/common/services/modelServiceImpl.ts index 40b258d49ce59f05baed3af1961127dd8d17800b..f5b8c26b983ed4b316d909da3d1d971c5a862e26 100644 --- a/src/vs/editor/common/services/modelServiceImpl.ts +++ b/src/vs/editor/common/services/modelServiceImpl.ts @@ -275,7 +275,7 @@ export class ModelServiceImpl extends Disposable implements IModelService { private readonly _onModelRemoved: Emitter = this._register(new Emitter()); public readonly onModelRemoved: Event = this._onModelRemoved.event; - private readonly _onModelModeChanged: Emitter<{ model: ITextModel; oldModeId: string; }> = this._register(new Emitter<{ model: ITextModel; oldModeId: string; }>()); + private readonly _onModelModeChanged: Emitter<{ model: ITextModel; oldModeId: string; }> = this._register(new Emitter<{ model: ITextModel; oldModeId: string; }>({ leakWarningThreshold: 500 })); public readonly onModelModeChanged: Event<{ model: ITextModel; oldModeId: string; }> = this._onModelModeChanged.event; private _modelCreationOptionsByLanguageAndResource: { diff --git a/src/vs/workbench/services/configuration/node/configurationService.ts b/src/vs/workbench/services/configuration/node/configurationService.ts index 6ae845d4b9601d1f7caec093b32b583431e760ff..e2e2d658a853f0afa1e559ef51b37dd770a2bb54 100644 --- a/src/vs/workbench/services/configuration/node/configurationService.ts +++ b/src/vs/workbench/services/configuration/node/configurationService.ts @@ -51,7 +51,7 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat private workspaceEditingQueue: Queue; - protected readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter()); + protected readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter({ leakWarningThreshold: 500 })); public readonly onDidChangeConfiguration: Event = this._onDidChangeConfiguration.event; protected readonly _onDidChangeWorkspaceFolders: Emitter = this._register(new Emitter()); diff --git a/src/vs/workbench/services/decorations/browser/decorationsService.ts b/src/vs/workbench/services/decorations/browser/decorationsService.ts index 1021a43442e02069ecfb7b5dda3848eb0592ff3c..cddc0eea7fb790d7080de8ec8aca279e0af2f83b 100644 --- a/src/vs/workbench/services/decorations/browser/decorationsService.ts +++ b/src/vs/workbench/services/decorations/browser/decorationsService.ts @@ -339,7 +339,7 @@ export class FileDecorationsService implements IDecorationsService { private readonly _data = new LinkedList(); private readonly _onDidChangeDecorationsDelayed = new Emitter(); - private readonly _onDidChangeDecorations = new Emitter(); + private readonly _onDidChangeDecorations = new Emitter({ leakWarningThreshold: 500 }); private readonly _decorationStyles: DecorationStyles; private readonly _disposables: IDisposable[]; @@ -347,7 +347,8 @@ export class FileDecorationsService implements IDecorationsService { this._onDidChangeDecorations.event, debounceEvent( this._onDidChangeDecorationsDelayed.event, - FileDecorationChangeEvent.debouncer + FileDecorationChangeEvent.debouncer, + undefined, undefined, 500 ) ); diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index 09b3b891a8ac509f49c2cccc2515f07d08e53515..11032404f2040d02bffe5ce718217eff5d133aaf 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -306,7 +306,7 @@ export class ExtensionService extends Disposable implements IExtensionService { this._extensionsMessages = {}; this._allRequestedActivateEvents = Object.create(null); - this._onDidRegisterExtensions = new Emitter(); + this._onDidRegisterExtensions = new Emitter({ leakWarningThreshold: 500 }); this._extensionHostProcessManagers = []; this._extensionHostProcessActivationTimes = Object.create(null); diff --git a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts index e312eda08d30438aed9855e7a78cd02a202fa1d9..0531987c4bc80dd1205c9553f8d27e8b3a0492dd 100644 --- a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts @@ -103,7 +103,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { this.colorThemeStore = new ColorThemeStore(extensionService, ColorThemeData.createLoadedEmptyTheme(DEFAULT_THEME_ID, DEFAULT_THEME_SETTING_VALUE)); this.onFileIconThemeChange = new Emitter(); this.iconThemeStore = new FileIconThemeStore(extensionService); - this.onColorThemeChange = new Emitter(); + this.onColorThemeChange = new Emitter({ leakWarningThreshold: 500 }); this.currentIconTheme = { id: '',