Skip to content

Commit 4da232a

Browse files
author
Benjamin Pasero
committed
debt - move shared process things out into own service
1 parent 3909604 commit 4da232a

12 files changed

Lines changed: 70 additions & 58 deletions

File tree

src/vs/code/electron-browser/issue/issueReporterMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export class IssueReporter extends Disposable {
303303
const loggerClient = new LoggerChannelClient(mainProcessService.getChannel('logger'));
304304
this.logService = new FollowerLogService(loggerClient, logService);
305305

306-
const sharedProcess = (<IWindowsService>serviceCollection.get(IWindowsService)).whenSharedProcessReady()
306+
const sharedProcess = mainProcessService.getChannel('sharedProcess').call('whenSharedProcessReady')
307307
.then(() => connectNet(this.environmentService.sharedIPCHandle, `window:${configuration.windowId}`));
308308

309309
const instantiationService = new InstantiationService(serviceCollection, true);

src/vs/code/electron-main/app.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemPro
7777
import { ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc';
7878
import { IElectronService } from 'vs/platform/electron/node/electron';
7979
import { ElectronMainService } from 'vs/platform/electron/electron-main/electronMainService';
80+
import { ISharedProcessMainService, SharedProcessMainService } from 'vs/platform/ipc/electron-main/sharedProcessMainService';
8081

8182
export class CodeApplication extends Disposable {
8283

@@ -448,7 +449,8 @@ export class CodeApplication extends Disposable {
448449
}
449450

450451
services.set(IWindowsMainService, new SyncDescriptor(WindowsManager, [machineId, this.userEnv]));
451-
services.set(IWindowsService, new SyncDescriptor(LegacyWindowsMainService, [sharedProcess]));
452+
services.set(ISharedProcessMainService, new SyncDescriptor(SharedProcessMainService, [sharedProcess]));
453+
services.set(IWindowsService, new SyncDescriptor(LegacyWindowsMainService));
452454
services.set(ILaunchMainService, new SyncDescriptor(LaunchMainService));
453455

454456
const diagnosticsChannel = getDelayedChannel(sharedProcessClient.then(client => client.getChannel('diagnostics')));
@@ -545,6 +547,10 @@ export class CodeApplication extends Disposable {
545547
const electronChannel = new SimpleServiceProxyChannel(electronService);
546548
electronIpcServer.registerChannel('electron', electronChannel);
547549

550+
const sharedProcessMainService = accessor.get(ISharedProcessMainService);
551+
const sharedProcessChannel = new SimpleServiceProxyChannel(sharedProcessMainService);
552+
electronIpcServer.registerChannel('sharedProcess', sharedProcessChannel);
553+
548554
const workspacesMainService = accessor.get(IWorkspacesMainService);
549555
const workspacesChannel = new WorkspacesChannel(workspacesMainService);
550556
electronIpcServer.registerChannel('workspaces', workspacesChannel);

src/vs/platform/ipc/electron-browser/sharedProcessService.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
77
import { Client } from 'vs/base/parts/ipc/common/ipc.net';
88
import { connect } from 'vs/base/parts/ipc/node/ipc.net';
9-
import { IWindowsService, IWindowService } from 'vs/platform/windows/common/windows';
9+
import { IWindowService } from 'vs/platform/windows/common/windows';
1010
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1111
import { IChannel, IServerChannel, getDelayedChannel } from 'vs/base/parts/ipc/common/ipc';
12+
import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService';
1213

1314
export const ISharedProcessService = createDecorator<ISharedProcessService>('sharedProcessService');
1415

@@ -17,30 +18,43 @@ export interface ISharedProcessService {
1718
_serviceBrand: undefined;
1819

1920
getChannel(channelName: string): IChannel;
20-
2121
registerChannel(channelName: string, channel: IServerChannel<string>): void;
22+
23+
whenSharedProcessReady(): Promise<void>;
24+
toggleSharedProcessWindow(): Promise<void>;
2225
}
2326

2427
export class SharedProcessService implements ISharedProcessService {
2528

2629
_serviceBrand: undefined;
2730

2831
private withSharedProcessConnection: Promise<Client<string>>;
32+
private sharedProcessMainChannel: IChannel;
2933

3034
constructor(
31-
@IWindowsService windowsService: IWindowsService,
35+
@IMainProcessService mainProcessService: IMainProcessService,
3236
@IWindowService windowService: IWindowService,
3337
@IEnvironmentService environmentService: IEnvironmentService
3438
) {
35-
this.withSharedProcessConnection = windowsService.whenSharedProcessReady()
39+
this.sharedProcessMainChannel = mainProcessService.getChannel('sharedProcess');
40+
41+
this.withSharedProcessConnection = this.whenSharedProcessReady()
3642
.then(() => connect(environmentService.sharedIPCHandle, `window:${windowService.windowId}`));
3743
}
3844

45+
whenSharedProcessReady(): Promise<void> {
46+
return this.sharedProcessMainChannel.call('whenSharedProcessReady');
47+
}
48+
3949
getChannel(channelName: string): IChannel {
4050
return getDelayedChannel(this.withSharedProcessConnection.then(connection => connection.getChannel(channelName)));
4151
}
4252

4353
registerChannel(channelName: string, channel: IServerChannel<string>): void {
4454
this.withSharedProcessConnection.then(connection => connection.registerChannel(channelName, channel));
4555
}
56+
57+
toggleSharedProcessWindow(): Promise<void> {
58+
return this.sharedProcessMainChannel.call('toggleSharedProcessWindow');
59+
}
4660
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
7+
import { ISharedProcess } from 'vs/platform/windows/electron-main/windows';
8+
9+
export const ISharedProcessMainService = createDecorator<ISharedProcessMainService>('sharedProcessMainService');
10+
11+
export interface ISharedProcessMainService {
12+
13+
_serviceBrand: undefined;
14+
15+
whenSharedProcessReady(): Promise<void>;
16+
toggleSharedProcessWindow(): Promise<void>;
17+
}
18+
export class SharedProcessMainService implements ISharedProcessMainService {
19+
20+
_serviceBrand: undefined;
21+
22+
constructor(private sharedProcess: ISharedProcess) { }
23+
24+
whenSharedProcessReady(): Promise<void> {
25+
return this.sharedProcess.whenReady();
26+
}
27+
28+
async toggleSharedProcessWindow(): Promise<void> {
29+
return this.sharedProcess.toggle();
30+
}
31+
}

src/vs/platform/ipc/node/simpleIpcProxy.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ export class SimpleServiceProxyChannel implements IServerChannel {
4444
throw new Error(`Events are currently unsupported by SimpleServiceProxyChannel: ${event}`);
4545
}
4646

47-
call(_: unknown, command: string, args: any[]): Promise<any> {
47+
call(_: unknown, command: string, args?: any[]): Promise<any> {
4848
const target = this.service[command];
4949
if (typeof target === 'function') {
50-
const context = deserializeContext(args[0]);
51-
if (context) {
52-
args[0] = context;
50+
if (Array.isArray(args)) {
51+
const context = deserializeContext(args[0]);
52+
if (context) {
53+
args[0] = context;
54+
}
5355
}
5456

5557
return target.apply(this.service, args);

src/vs/platform/windows/common/windows.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,6 @@ export interface IWindowsService {
9595
unmaximizeWindow(windowId: number): Promise<void>;
9696
minimizeWindow(windowId: number): Promise<void>;
9797

98-
// Shared process
99-
whenSharedProcessReady(): Promise<void>;
100-
toggleSharedProcess(): Promise<void>;
101-
10298
// Global methods
10399
openWindow(windowId: number, uris: IURIToOpen[], options: IOpenSettings): Promise<void>;
104100
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void>;

src/vs/platform/windows/common/windowsIpc.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,6 @@ export class WindowsChannel implements IServerChannel {
8181
}
8282
case 'openExtensionDevelopmentHostWindow': return this.service.openExtensionDevelopmentHostWindow(arg[0], arg[1]);
8383
case 'getWindows': return this.service.getWindows();
84-
case 'whenSharedProcessReady': return this.service.whenSharedProcessReady();
85-
case 'toggleSharedProcess': return this.service.toggleSharedProcess();
8684
case 'getActiveWindowId': return this.service.getActiveWindowId();
8785
}
8886

src/vs/platform/windows/electron-browser/windowsService.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,6 @@ export class WindowsService implements IWindowsService {
8787
return this.channel.call('minimizeWindow', windowId);
8888
}
8989

90-
whenSharedProcessReady(): Promise<void> {
91-
return this.channel.call('whenSharedProcessReady');
92-
}
93-
94-
toggleSharedProcess(): Promise<void> {
95-
return this.channel.call('toggleSharedProcess');
96-
}
97-
9890
openWindow(windowId: number, uris: IURIToOpen[], options: IOpenSettings): Promise<void> {
9991
return this.channel.call('openWindow', [windowId, uris, options]);
10092
}

src/vs/platform/windows/electron-main/legacyWindowsMainService.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/
1111
import { app, MessageBoxReturnValue, SaveDialogReturnValue, OpenDialogReturnValue, BrowserWindow, MessageBoxOptions, SaveDialogOptions, OpenDialogOptions } from 'electron';
1212
import { Event } from 'vs/base/common/event';
1313
import { IURLService, IURLHandler } from 'vs/platform/url/common/url';
14-
import { IWindowsMainService, ISharedProcess, ICodeWindow } from 'vs/platform/windows/electron-main/windows';
14+
import { IWindowsMainService, ICodeWindow } from 'vs/platform/windows/electron-main/windows';
1515
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
1616
import { IHistoryMainService } from 'vs/platform/history/electron-main/historyMainService';
1717
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
@@ -40,7 +40,6 @@ export class LegacyWindowsMainService extends Disposable implements IWindowsServ
4040
readonly onRecentlyOpenedChange: Event<void> = this.historyMainService.onRecentlyOpenedChange;
4141

4242
constructor(
43-
private sharedProcess: ISharedProcess,
4443
@IWindowsMainService private readonly windowsMainService: IWindowsMainService,
4544
@IEnvironmentService private readonly environmentService: IEnvironmentService,
4645
@IURLService urlService: IURLService,
@@ -207,19 +206,6 @@ export class LegacyWindowsMainService extends Disposable implements IWindowsServ
207206
return this._activeWindowId;
208207
}
209208

210-
async whenSharedProcessReady(): Promise<void> {
211-
this.logService.trace('windowsService#whenSharedProcessReady');
212-
213-
return this.sharedProcess.whenReady();
214-
}
215-
216-
async toggleSharedProcess(): Promise<void> {
217-
this.logService.trace('windowsService#toggleSharedProcess');
218-
219-
this.sharedProcess.toggle();
220-
221-
}
222-
223209
async handleURL(uri: URI): Promise<boolean> {
224210

225211
// Catch file URLs

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,6 @@ export class SimpleWindowsService implements IWindowsService {
272272
return Promise.resolve();
273273
}
274274

275-
whenSharedProcessReady(): Promise<void> {
276-
return Promise.resolve();
277-
}
278-
279-
toggleSharedProcess(): Promise<void> {
280-
return Promise.resolve();
281-
}
282-
283275
// Global methods
284276
openWindow(_windowId: number, _uris: IURIToOpen[], _options: IOpenSettings): Promise<void> {
285277
return Promise.resolve();

0 commit comments

Comments
 (0)