Skip to content

Commit 8584b45

Browse files
committed
Add API sketch for profiling the extension host
1 parent ad8cf43 commit 8584b45

4 files changed

Lines changed: 58 additions & 3 deletions

File tree

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { NullCommandService } from 'vs/platform/commands/common/commands';
1212
import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService';
1313
import { IExtensionPoint } from 'vs/platform/extensions/common/extensionsRegistry';
1414
import { TPromise } from 'vs/base/common/winjs.base';
15-
import { ExtensionPointContribution, IExtensionDescription, IExtensionsStatus, IExtensionService } from 'vs/platform/extensions/common/extensions';
15+
import { ExtensionPointContribution, IExtensionDescription, IExtensionsStatus, IExtensionService, ProfileSession } from 'vs/platform/extensions/common/extensions';
1616
import Event, { Emitter } from 'vs/base/common/event';
1717

1818
// --- service instances
@@ -48,6 +48,10 @@ class MockExtensionService implements IExtensionService {
4848
throw new Error('Not implemented');
4949
}
5050

51+
public startExtensionHostProfile(): ProfileSession {
52+
throw new Error('Not implemented');
53+
}
54+
5155
public restartExtensionHost(): void {
5256
throw new Error('Method not implemented.');
5357
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
99
import { TPromise } from 'vs/base/common/winjs.base';
1010
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
1111
import { CommandService } from 'vs/platform/commands/common/commandService';
12-
import { IExtensionService, ExtensionPointContribution, IExtensionDescription, IExtensionHostInformation } from 'vs/platform/extensions/common/extensions';
12+
import { IExtensionService, ExtensionPointContribution, IExtensionDescription, IExtensionHostInformation, ProfileSession } from 'vs/platform/extensions/common/extensions';
1313
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
1414
import { IExtensionPoint } from 'vs/platform/extensions/common/extensionsRegistry';
1515
import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService';
@@ -42,6 +42,9 @@ class SimpleExtensionService implements IExtensionService {
4242
getExtensions(): TPromise<IExtensionDescription[]> {
4343
return TPromise.wrap([]);
4444
}
45+
startExtensionHostProfile(): ProfileSession {
46+
throw new Error('Not implemented');
47+
}
4548
restartExtensionHost(): void {
4649
}
4750
startExtensionHost(): void {

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,39 @@ export interface IExtensionsStatus {
4545
activationTimes: ActivationTimes;
4646
}
4747

48+
/**
49+
* e.g.
50+
* {
51+
* startTime: 1511954813493000,
52+
* endTime: 1511954835590000,
53+
* deltas: [ 100, 1500, 123456, 1500, 100000 ],
54+
* ids: [ 'idle', 'self', 'extension1', 'self', 'idle' ]
55+
* }
56+
*/
57+
export interface IExtensionHostProfile {
58+
/**
59+
* Profiling start timestamp in microseconds.
60+
*/
61+
startTime: number;
62+
/**
63+
* Profiling end timestamp in microseconds.
64+
*/
65+
endTime: number;
66+
/**
67+
* Duration of segment in microseconds.
68+
*/
69+
deltas: number[];
70+
/**
71+
* Segment identifier: extension id or one of the four known strings.
72+
*/
73+
ids: (string | 'idle' | 'program' | 'gc' | 'self')[];
74+
75+
/**
76+
* Get the information as a .cpuprofile.
77+
*/
78+
data: object;
79+
}
80+
4881
export class ActivationTimes {
4982
constructor(
5083
public readonly startup: boolean,
@@ -116,6 +149,11 @@ export interface IExtensionService {
116149
*/
117150
getExtensionsStatus(): { [id: string]: IExtensionsStatus };
118151

152+
/**
153+
* Begin an extension host process profile session.
154+
*/
155+
startExtensionHostProfile(): ProfileSession;
156+
119157
/**
120158
* Restarts the extension host.
121159
*/
@@ -136,3 +174,9 @@ export interface IExtensionService {
136174
*/
137175
getExtensionHostInformation(): IExtensionHostInformation;
138176
}
177+
178+
export interface ProfileSession {
179+
180+
stop(): TPromise<IExtensionHostProfile>;
181+
182+
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import pkg from 'vs/platform/node/package';
1212
import * as path from 'path';
1313
import URI from 'vs/base/common/uri';
1414
import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/node/extensionDescriptionRegistry';
15-
import { IMessage, IExtensionDescription, IExtensionsStatus, IExtensionService, ExtensionPointContribution, ActivationTimes, IExtensionHostInformation } from 'vs/platform/extensions/common/extensions';
15+
import { IMessage, IExtensionDescription, IExtensionsStatus, IExtensionService, ExtensionPointContribution, ActivationTimes, IExtensionHostInformation, ProfileSession } from 'vs/platform/extensions/common/extensions';
1616
import { IExtensionEnablementService, IExtensionIdentifier, EnablementState } from 'vs/platform/extensionManagement/common/extensionManagement';
1717
import { areSameExtensions, BetterMergeId, BetterMergeDisabledNowKey } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
1818
import { ExtensionsRegistry, ExtensionPoint, IExtensionPointUser, ExtensionMessageCollector, IExtensionPoint } from 'vs/platform/extensions/common/extensionsRegistry';
@@ -327,6 +327,10 @@ export class ExtensionService extends Disposable implements IExtensionService {
327327
return result;
328328
}
329329

330+
public startExtensionHostProfile(): ProfileSession {
331+
return null;
332+
}
333+
330334
// ---- end IExtensionService
331335

332336
// --- impl

0 commit comments

Comments
 (0)