From b255288e3bbfad07060d2be41700a442ee0761f4 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 25 Nov 2015 13:54:16 +0100 Subject: [PATCH] fixes #139 - don't sync large models to extension host --- src/vs/workbench/api/common/mainThreadEditors.ts | 2 ++ .../workbench/api/common/pluginHostDocuments.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/vs/workbench/api/common/mainThreadEditors.ts b/src/vs/workbench/api/common/mainThreadEditors.ts index 42c1af89f5d..26cb2666dc2 100644 --- a/src/vs/workbench/api/common/mainThreadEditors.ts +++ b/src/vs/workbench/api/common/mainThreadEditors.ts @@ -335,6 +335,8 @@ export class MainThreadEditorsTracker { private _doUpdateMapping(): void { let allModels = this._modelService.getModels(); + // Same filter as in pluginHostDocuments + allModels.filter((model) => !model.isTooLargeForHavingARichMode()); let allModelsMap: { [modelUri:string]: EditorCommon.IModel; } = Object.create(null); allModels.forEach((model) => { allModelsMap[model.getAssociatedResource().toString()] = model; diff --git a/src/vs/workbench/api/common/pluginHostDocuments.ts b/src/vs/workbench/api/common/pluginHostDocuments.ts index be475ce66ff..0936720cb98 100644 --- a/src/vs/workbench/api/common/pluginHostDocuments.ts +++ b/src/vs/workbench/api/common/pluginHostDocuments.ts @@ -532,6 +532,7 @@ export class MainThreadDocuments { private _toDispose: IDisposable[]; private _modelToDisposeMap: {[modelUrl:string]:IDisposable;}; private _proxy: PluginHostModelService; + private _modelIsSynced: {[modelId:string]:boolean;}; constructor( @IThreadService threadService: IThreadService, @@ -547,6 +548,7 @@ export class MainThreadDocuments { this._fileService = fileService; this._untitledEditorService = untitledEditorService; this._proxy = threadService.getRemotable(PluginHostModelService); + this._modelIsSynced = {}; this._toDispose = []; modelService.onModelAdded.add(this._onModelAdded, this, this._toDispose); @@ -575,7 +577,13 @@ export class MainThreadDocuments { } private _onModelAdded(model: EditorCommon.IModel): void { + // Same filter as in mainThreadEditors + if (model.isTooLargeForHavingARichMode()) { + // don't synchronize too large models + return null; + } let modelUrl = model.getAssociatedResource(); + this._modelIsSynced[modelUrl.toString()] = true; this._modelToDisposeMap[modelUrl.toString()] = model.addBulkListener2((events) => this._onModelEvents(modelUrl, events)); this._proxy._acceptModelAdd({ url: model.getAssociatedResource(), @@ -587,11 +595,19 @@ export class MainThreadDocuments { } private _onModelModeChanged(model: EditorCommon.IModel, oldModeId:string): void { + let modelUrl = model.getAssociatedResource(); + if (!this._modelIsSynced[modelUrl.toString()]) { + return; + } this._proxy._acceptModelModeChanged(model.getAssociatedResource(), oldModeId, model.getMode().getId()); } private _onModelRemoved(model: EditorCommon.IModel): void { let modelUrl = model.getAssociatedResource(); + if (!this._modelIsSynced[modelUrl.toString()]) { + return; + } + delete this._modelIsSynced[modelUrl.toString()]; this._modelToDisposeMap[modelUrl.toString()].dispose(); delete this._modelToDisposeMap[modelUrl.toString()]; this._proxy._acceptModelRemoved(modelUrl);