Skip to content

Commit c59d5dd

Browse files
committed
- reload only local user configuration after initi
- add perf mark up and logs
1 parent a45fa6e commit c59d5dd

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

src/vs/workbench/browser/web.main.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,11 +210,14 @@ class BrowserMain extends Disposable {
210210
serviceCollection.set(IUserDataInitializationService, userDataInitializationService);
211211

212212
if (await userDataInitializationService.requiresInitialization()) {
213+
mark('willInitRequiredUserData');
213214
// Initialize required resources - settings & global state
214215
await userDataInitializationService.initializeRequiredResources();
215216

216-
// Reload configuration after initializing
217-
await configurationService.reloadConfiguration();
217+
// Important Reload only local user configuration after initializing
218+
// Reloading complete configuraiton blocks workbench until remote configuration is loaded.
219+
await configurationService.reloadLocalUserConfiguration();
220+
mark('didInitRequiredUserData');
218221
}
219222

220223
return { serviceCollection, logService, storageService };

src/vs/workbench/services/configuration/browser/configurationService.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
403403

404404
if (!this.localUserConfiguration.hasTasksLoaded) {
405405
// Reload local user configuration again to load user tasks
406-
runWhenIdle(() => this.reloadLocalUserConfiguration().then(configurationModel => this.onLocalUserConfigurationChanged(configurationModel)), 5000);
406+
runWhenIdle(() => this.reloadLocalUserConfiguration(), 5000);
407407
}
408408
});
409409
}
@@ -436,16 +436,27 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
436436
.then(([local, remote]) => ({ local, remote }));
437437
}
438438

439-
private reloadUserConfiguration(key?: string): Promise<{ local: ConfigurationModel, remote: ConfigurationModel }> {
440-
return Promise.all([this.reloadLocalUserConfiguration(), this.reloadRemoeUserConfiguration()]).then(([local, remote]) => ({ local, remote }));
439+
private reloadUserConfiguration(): Promise<{ local: ConfigurationModel, remote: ConfigurationModel }> {
440+
return Promise.all([this.reloadLocalUserConfiguration(true), this.reloadRemoteUserConfiguration(true)]).then(([local, remote]) => ({ local, remote }));
441441
}
442442

443-
private reloadLocalUserConfiguration(key?: string): Promise<ConfigurationModel> {
444-
return this.localUserConfiguration.reload();
443+
async reloadLocalUserConfiguration(donotTrigger?: boolean): Promise<ConfigurationModel> {
444+
const model = await this.localUserConfiguration.reload();
445+
if (!donotTrigger) {
446+
this.onLocalUserConfigurationChanged(model);
447+
}
448+
return model;
445449
}
446450

447-
private reloadRemoeUserConfiguration(key?: string): Promise<ConfigurationModel> {
448-
return this.remoteUserConfiguration ? this.remoteUserConfiguration.reload() : Promise.resolve(new ConfigurationModel());
451+
private async reloadRemoteUserConfiguration(donotTrigger?: boolean): Promise<ConfigurationModel> {
452+
if (this.remoteUserConfiguration) {
453+
const model = await this.remoteUserConfiguration.reload();
454+
if (!donotTrigger) {
455+
this.onRemoteUserConfigurationChanged(model);
456+
}
457+
return model;
458+
}
459+
return new ConfigurationModel();
449460
}
450461

451462
private reloadWorkspaceConfiguration(key?: string): Promise<void> {
@@ -667,9 +678,9 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
667678
.then(() => {
668679
switch (editableConfigurationTarget) {
669680
case EditableConfigurationTarget.USER_LOCAL:
670-
return this.reloadLocalUserConfiguration().then(local => this.onLocalUserConfigurationChanged(local));
681+
return this.reloadLocalUserConfiguration().then(() => undefined);
671682
case EditableConfigurationTarget.USER_REMOTE:
672-
return this.reloadRemoeUserConfiguration().then(remote => this.onRemoteUserConfigurationChanged(remote));
683+
return this.reloadRemoteUserConfiguration().then(() => undefined);
673684
case EditableConfigurationTarget.WORKSPACE:
674685
return this.reloadWorkspaceConfiguration();
675686
case EditableConfigurationTarget.WORKSPACE_FOLDER:

src/vs/workbench/services/userData/browser/userDataInit.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,19 +107,23 @@ export class UserDataInitializationService implements IUserDataInitializationSer
107107
}
108108

109109
async requiresInitialization(): Promise<boolean> {
110+
this.logService.trace(`UserDataInitializationService#requiresInitialization`);
110111
const userDataSyncStoreClient = await this.createUserDataSyncStoreClient();
111112
return !!userDataSyncStoreClient;
112113
}
113114

114115
async initializeRequiredResources(): Promise<void> {
116+
this.logService.trace(`UserDataInitializationService#initializeRequiredResources`);
115117
return this.initialize([SyncResource.Settings, SyncResource.GlobalState]);
116118
}
117119

118120
async initializeOtherResources(): Promise<void> {
121+
this.logService.trace(`UserDataInitializationService#initializeOtherResources`);
119122
return this.initialize([SyncResource.Keybindings, SyncResource.Snippets]);
120123
}
121124

122125
async initializeExtensions(instantiationService: IInstantiationService): Promise<void> {
126+
this.logService.trace(`UserDataInitializationService#initializeExtensions`);
123127
return this.initialize([SyncResource.Extensions], instantiationService);
124128
}
125129

0 commit comments

Comments
 (0)