提交 324f0ac2 编写于 作者: J Johannes Rieken

instat - use IdleValue and Proxy to delay service creations

上级 58a581a3
......@@ -187,7 +187,7 @@ export class InstantiationService implements IInstantiationService {
for (let { data } of roots) {
// create instance and overwrite the service collections
const instance = this._createInstance(data.desc.ctor, data.desc.staticArguments, data._trace);
const instance = this._createServiceInstance(data.desc.ctor, data.desc.staticArguments, data._trace);
this._setServiceInstance(data.id, instance);
graph.removeNode(data);
}
......@@ -195,6 +195,10 @@ export class InstantiationService implements IInstantiationService {
return <T>this._getServiceInstanceOrDescriptor(id);
}
protected _createServiceInstance<T>(ctor: any, args: any[] = [], _trace: Trace): T {
return this._createInstance(ctor, args, _trace);
}
}
//#region -- tracing ---
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import { IdleValue } from 'vs/base/common/async';
import { InstantiationService as BaseInstantiationService } from 'vs/platform/instantiation/common/instantiationService';
// this is in the /node/-layer because it depends on Proxy which isn't available
// in IE11 and therefore not in the /common/-layer
export class InstantiationService extends BaseInstantiationService {
protected _createServiceInstance<T>(ctor: any, args: any[] = [], _trace): T {
return InstantiationService._newIdleProxyService(() => super._createServiceInstance(ctor, args, _trace));
}
private static _newIdleProxyService<T>(executor: () => T): T {
const idle = new IdleValue(executor);
return <T>new Proxy(Object.create(null), {
get(_target, prop) {
return idle.getValue()[prop];
}
});
}
}
......@@ -44,6 +44,7 @@ import { ExtensionService } from 'vs/workbench/services/extensions/electron-brow
import { IStorageService } from 'vs/platform/storage/common/storage';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
// import { InstantiationService } from 'vs/platform/instantiation/node/instantiationService';
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
import { ILifecycleService, LifecyclePhase, ShutdownReason, StartupKind } from 'vs/platform/lifecycle/common/lifecycle';
import { IMarkerService } from 'vs/platform/markers/common/markers';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册