Skip to content

Commit 8708c71

Browse files
committed
1 parent be07c3c commit 8708c71

7 files changed

Lines changed: 26 additions & 31 deletions

File tree

src/vs/platform/actions/test/common/menuService.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ class MockExtensionService implements IExtensionService {
4848
throw new Error('Not implemented');
4949
}
5050

51+
public canProfileExtensionHost() {
52+
return false;
53+
}
54+
5155
public startExtensionHostProfile(): TPromise<ProfileSession> {
5256
throw new Error('Not implemented');
5357
}

src/vs/platform/commands/test/commandService.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class SimpleExtensionService implements IExtensionService {
4040
getExtensions(): TPromise<IExtensionDescription[]> {
4141
return TPromise.wrap([]);
4242
}
43+
canProfileExtensionHost() {
44+
return false;
45+
}
4346
startExtensionHostProfile(): TPromise<ProfileSession> {
4447
throw new Error('Not implemented');
4548
}

src/vs/platform/extensions/common/extensions.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@ export interface IExtensionService {
168168
*/
169169
getExtensionsStatus(): { [id: string]: IExtensionsStatus };
170170

171+
/**
172+
* Check if the extension host can be profiled.
173+
*/
174+
canProfileExtensionHost(): boolean;
175+
171176
/**
172177
* Begin an extension host process profile session.
173178
*/

src/vs/workbench/parts/extensions/electron-browser/extensionProfileService.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { StatusbarAlignment, IStatusbarRegistry, StatusbarItemDescriptor, Extens
1616
import { Registry } from 'vs/platform/registry/common/platform';
1717
import { IExtensionHostProfileService, ProfileSessionState, RuntimeExtensionsInput } from 'vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor';
1818
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
19+
import { IMessageService, Severity } from 'vs/platform/message/common/message';
1920

2021
export class ExtensionHostProfileService extends Disposable implements IExtensionHostProfileService {
2122

@@ -38,6 +39,7 @@ export class ExtensionHostProfileService extends Disposable implements IExtensio
3839
@IExtensionService private readonly _extensionService: IExtensionService,
3940
@IWorkbenchEditorService private readonly _editorService: IWorkbenchEditorService,
4041
@IInstantiationService private readonly _instantiationService: IInstantiationService,
42+
@IMessageService private readonly _messageService: IMessageService
4143
) {
4244
super();
4345
this._profile = null;
@@ -67,6 +69,12 @@ export class ExtensionHostProfileService extends Disposable implements IExtensio
6769
if (this._state !== ProfileSessionState.None) {
6870
return;
6971
}
72+
73+
if (!this._extensionService.canProfileExtensionHost()) {
74+
this._messageService.show(Severity.Info, nls.localize('noPro', "To profile extensions, launch with `--inspect-extensions=<port>`."));
75+
return;
76+
}
77+
7078
this._setState(ProfileSessionState.Starting);
7179

7280
this._extensionService.startExtensionHostProfile().then((value) => {

src/vs/workbench/services/extensions/electron-browser/extensionHost.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ export class ExtensionHostProcessWorker {
276276
let startPort = 9333;
277277
if (typeof this._environmentService.debugExtensionHost.port === 'number') {
278278
startPort = expected = this._environmentService.debugExtensionHost.port;
279+
} else {
280+
return TPromise.as({ expected: undefined, actual: 0 });
279281
}
280282
return new TPromise((c, e) => {
281283
return findFreePort(startPort, 10 /* try 10 ports */, 5000 /* try up to 5 seconds */).then(port => {

src/vs/workbench/services/extensions/electron-browser/extensionHostProfiler.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,8 @@
77

88
import { IExtensionService, IExtensionDescription, ProfileSession, IExtensionHostProfile, ProfileSegmentId } from 'vs/platform/extensions/common/extensions';
99
import { TPromise } from 'vs/base/common/winjs.base';
10-
import { localize } from 'vs/nls';
1110
import { TernarySearchTree } from 'vs/base/common/map';
1211
import { realpathSync } from 'vs/base/node/extfs';
13-
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
14-
import { IStatusbarService, StatusbarAlignment } from 'vs/platform/statusbar/common/statusbar';
15-
import { writeFile } from 'vs/base/node/pfs';
16-
import * as path from 'path';
17-
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
18-
import { setTimeout } from 'timers';
1912
import { Profile, ProfileNode } from 'v8-inspect-profiler';
2013

2114
export class ExtensionHostProfiler {
@@ -128,27 +121,3 @@ export class ExtensionHostProfiler {
128121
};
129122
}
130123
}
131-
132-
133-
CommandsRegistry.registerCommand('exthost.profile.start', async accessor => {
134-
const statusbarService = accessor.get(IStatusbarService);
135-
const extensionService = accessor.get(IExtensionService);
136-
const environmentService = accessor.get(IEnvironmentService);
137-
138-
const handle = statusbarService.addEntry({ text: localize('message', "$(zap) Profiling Extension Host...") }, StatusbarAlignment.LEFT);
139-
140-
extensionService.startExtensionHostProfile().then(session => {
141-
setTimeout(() => {
142-
session.stop().then(result => {
143-
result.getAggregatedTimes().forEach((val, index) => {
144-
console.log(`${index} : ${Math.round(val / 1000)} ms`);
145-
});
146-
let profilePath = path.join(environmentService.userHome, 'extHostProfile.cpuprofile');
147-
console.log(`Saving profile at ${profilePath}`);
148-
return writeFile(profilePath, JSON.stringify(result.data));
149-
}).then(() => {
150-
handle.dispose();
151-
});
152-
}, 5000);
153-
});
154-
});

src/vs/workbench/services/extensions/electron-browser/extensionService.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ export class ExtensionService extends Disposable implements IExtensionService {
370370
return result;
371371
}
372372

373+
public canProfileExtensionHost(): boolean {
374+
return this._extensionHostProcessWorker && Boolean(this._extensionHostProcessWorker.getInspectPort());
375+
}
376+
373377
public startExtensionHostProfile(): TPromise<ProfileSession> {
374378
if (this._extensionHostProcessWorker) {
375379
let port = this._extensionHostProcessWorker.getInspectPort();

0 commit comments

Comments
 (0)