ConfigurationService#lookup is responsible for 25% of startup time (fixes #15884)

This commit is contained in:
Benjamin Pasero
2016-11-28 09:59:18 +01:00
parent 2c8ab1a5ff
commit aac9827882
10 changed files with 101 additions and 40 deletions

View File

@@ -29,7 +29,7 @@ import * as modes from 'vs/editor/common/modes';
import { IResourceEdit } from 'vs/editor/common/services/bulkEdit';
import { ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing';
import { IWorkspaceConfiguration } from 'vs/workbench/services/configuration/common/configuration';
import { IWorkspaceConfigurationValues } from 'vs/workbench/services/configuration/common/configuration';
import { IPickOpenEntry, IPickOptions } from 'vs/workbench/services/quickopen/common/quickOpenService';
import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles';
@@ -54,7 +54,7 @@ export interface IInitData {
workspace: IWorkspace;
};
extensions: IExtensionDescription[];
configuration: IWorkspaceConfiguration;
configuration: IWorkspaceConfigurationValues;
telemetryInfo: ITelemetryInfo;
}
@@ -236,7 +236,7 @@ export abstract class ExtHostCommandsShape {
}
export abstract class ExtHostConfigurationShape {
$acceptConfigurationChanged(entries: IWorkspaceConfiguration) { throw ni(); }
$acceptConfigurationChanged(values: IWorkspaceConfigurationValues) { throw ni(); }
}
export abstract class ExtHostDiagnosticsShape {

View File

@@ -9,7 +9,7 @@ import Event, { Emitter } from 'vs/base/common/event';
import { WorkspaceConfiguration } from 'vscode';
import { ExtHostConfigurationShape, MainThreadConfigurationShape } from './extHost.protocol';
import { ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing';
import { IWorkspaceConfiguration } from 'vs/workbench/services/configuration/common/configuration';
import { IWorkspaceConfigurationValues } from 'vs/workbench/services/configuration/common/configuration';
import { toValuesTree } from 'vs/platform/configuration/common/model';
function lookUp(tree: any, key: string) {
@@ -24,11 +24,11 @@ function lookUp(tree: any, key: string) {
}
interface UsefulConfiguration {
data: IWorkspaceConfiguration;
data: IWorkspaceConfigurationValues;
valueTree: any;
}
function createUsefulConfiguration(data: IWorkspaceConfiguration): { data: IWorkspaceConfiguration, valueTree: any } {
function createUsefulConfiguration(data: IWorkspaceConfigurationValues): { data: IWorkspaceConfigurationValues, valueTree: any } {
const valueMap: { [key: string]: any } = Object.create(null);
for (let key in data) {
if (Object.prototype.hasOwnProperty.call(data, key)) {
@@ -48,7 +48,7 @@ export class ExtHostConfiguration extends ExtHostConfigurationShape {
private _proxy: MainThreadConfigurationShape;
private _configuration: UsefulConfiguration;
constructor(proxy: MainThreadConfigurationShape, data: IWorkspaceConfiguration) {
constructor(proxy: MainThreadConfigurationShape, data: IWorkspaceConfigurationValues) {
super();
this._proxy = proxy;
this._configuration = createUsefulConfiguration(data);
@@ -58,7 +58,7 @@ export class ExtHostConfiguration extends ExtHostConfigurationShape {
return this._onDidChangeConfiguration && this._onDidChangeConfiguration.event;
}
public $acceptConfigurationChanged(data: IWorkspaceConfiguration) {
public $acceptConfigurationChanged(data: IWorkspaceConfigurationValues) {
this._configuration = createUsefulConfiguration(data);
this._onDidChangeConfiguration.fire(undefined);
}

View File

@@ -7,7 +7,7 @@
import { TPromise } from 'vs/base/common/winjs.base';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IThreadService } from 'vs/workbench/services/thread/common/threadService';
import { IWorkspaceConfigurationService, getEntries } from 'vs/workbench/services/configuration/common/configuration';
import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration';
import { IConfigurationEditingService, ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing';
import { MainThreadConfigurationShape, ExtHostContext } from './extHost.protocol';
@@ -26,8 +26,7 @@ export class MainThreadConfiguration extends MainThreadConfigurationShape {
const proxy = threadService.get(ExtHostContext.ExtHostConfiguration);
this._toDispose = configurationService.onDidUpdateConfiguration(() => {
const entries = getEntries(configurationService);
proxy.$acceptConfigurationChanged(entries);
proxy.$acceptConfigurationChanged(configurationService.values());
});
}