From 14fbd7c2e09b5690f92d89348ea83539683cb206 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 20 Dec 2019 20:28:33 +0100 Subject: [PATCH] Keep idle models, do not terminate worker on idle (fixes microsoft/monaco-editor#1310) --- src/monaco.contribution.ts | 9 --------- src/workerManager.ts | 20 ++------------------ 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index cfab1a62..0e9fcfb7 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -28,7 +28,6 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. private _onDidExtraLibsChange = new Emitter(); private _extraLibs: IExtraLibs; - private _workerMaxIdleTime: number; private _eagerModelSync: boolean; private _compilerOptions!: monaco.languages.typescript.CompilerOptions; private _diagnosticsOptions!: monaco.languages.typescript.DiagnosticsOptions; @@ -36,7 +35,6 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. constructor(compilerOptions: monaco.languages.typescript.CompilerOptions, diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions) { this._extraLibs = Object.create(null); - this._workerMaxIdleTime = 2 * 60 * 1000; this._eagerModelSync = false; this.setCompilerOptions(compilerOptions); this.setDiagnosticsOptions(diagnosticsOptions); @@ -145,13 +143,6 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. } setMaximumWorkerIdleTime(value: number): void { - // doesn't fire an event since no - // worker restart is required here - this._workerMaxIdleTime = value; - } - - getWorkerMaxIdleTime() { - return this._workerMaxIdleTime; } setEagerModelSync(value: boolean) { diff --git a/src/workerManager.ts b/src/workerManager.ts index 07254338..ff0b560e 100644 --- a/src/workerManager.ts +++ b/src/workerManager.ts @@ -14,8 +14,6 @@ export class WorkerManager { private _modeId: string; private _defaults: LanguageServiceDefaultsImpl; - private _idleCheckInterval: number; - private _lastUsedTime: number; private _configChangeListener: IDisposable; private _updateExtraLibsToken: number; private _extraLibsChangeListener: IDisposable; @@ -28,8 +26,6 @@ export class WorkerManager { this._defaults = defaults; this._worker = null; this._client = null; - this._idleCheckInterval = setInterval(() => this._checkIfIdle(), 30 * 1000); - this._lastUsedTime = 0; this._configChangeListener = this._defaults.onDidChange(() => this._stopWorker()); this._updateExtraLibsToken = 0; this._extraLibsChangeListener = this._defaults.onDidExtraLibsChange(() => this._updateExtraLibs()); @@ -44,7 +40,6 @@ export class WorkerManager { } dispose(): void { - clearInterval(this._idleCheckInterval); this._configChangeListener.dispose(); this._extraLibsChangeListener.dispose(); this._stopWorker(); @@ -63,20 +58,7 @@ export class WorkerManager { proxy.updateExtraLibs(this._defaults.getExtraLibs()); } - private _checkIfIdle(): void { - if (!this._worker) { - return; - } - const maxIdleTime = this._defaults.getWorkerMaxIdleTime(); - const timePassedSinceLastUsed = Date.now() - this._lastUsedTime; - if (maxIdleTime > 0 && timePassedSinceLastUsed > maxIdleTime) { - this._stopWorker(); - } - } - private _getClient(): Promise { - this._lastUsedTime = Date.now(); - if (!this._client) { this._worker = monaco.editor.createWebWorker({ @@ -85,6 +67,8 @@ export class WorkerManager { label: this._modeId, + keepIdleModels: true, + // passed in to the create() method createData: { compilerOptions: this._defaults.getCompilerOptions(),