Skip to content

Commit 5553953

Browse files
authored
Show Python: Launch TensorBoard command in command palette (#15382) (#15386)
* Always register Launch TensorBoard command * Put usage tracking behind experiment
1 parent 875e5a9 commit 5553953

File tree

5 files changed

+35
-36
lines changed

5 files changed

+35
-36
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -488,8 +488,7 @@
488488
},
489489
{
490490
"command": "python.launchTensorBoard",
491-
"category": "Python",
492-
"when": "python.isInNativeTensorBoardExperiment"
491+
"category": "Python"
493492
}
494493
],
495494
"view/title": [

src/client/tensorBoard/tensorBoardSessionProvider.ts

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ import { inject, injectable } from 'inversify';
55
import { IExtensionSingleActivationService } from '../activation/types';
66
import { IApplicationShell, ICommandManager, IWorkspaceService } from '../common/application/types';
77
import { Commands } from '../common/constants';
8-
import { ContextKey } from '../common/contextKey';
9-
import { NativeTensorBoard } from '../common/experiments/groups';
108
import { traceError, traceInfo } from '../common/logger';
119
import { IProcessServiceFactory } from '../common/process/types';
12-
import { IDisposableRegistry, IExperimentService, IInstaller } from '../common/types';
10+
import { IDisposableRegistry, IInstaller } from '../common/types';
1311
import { TensorBoard } from '../common/utils/localize';
1412
import { IInterpreterService } from '../interpreter/contracts';
1513
import { sendTelemetryEvent } from '../telemetry';
@@ -26,34 +24,25 @@ export class TensorBoardSessionProvider implements IExtensionSingleActivationSer
2624
@inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService,
2725
@inject(ICommandManager) private readonly commandManager: ICommandManager,
2826
@inject(IDisposableRegistry) private readonly disposables: IDisposableRegistry,
29-
@inject(IExperimentService) private readonly experimentService: IExperimentService,
3027
@inject(IProcessServiceFactory) private readonly processServiceFactory: IProcessServiceFactory,
3128
) {}
3229

3330
public async activate(): Promise<void> {
34-
this.activateInternal().ignoreErrors();
35-
}
36-
37-
private async activateInternal() {
38-
if (await this.experimentService.inExperiment(NativeTensorBoard.experiment)) {
39-
this.disposables.push(
40-
this.commandManager.registerCommand(
41-
Commands.LaunchTensorBoard,
42-
(
43-
entrypoint: TensorBoardEntrypoint = TensorBoardEntrypoint.palette,
44-
trigger: TensorBoardEntrypointTrigger = TensorBoardEntrypointTrigger.palette,
45-
) => {
46-
sendTelemetryEvent(EventName.TENSORBOARD_SESSION_LAUNCH, undefined, {
47-
trigger,
48-
entrypoint,
49-
});
50-
return this.createNewSession();
51-
},
52-
),
53-
);
54-
const contextKey = new ContextKey('python.isInNativeTensorBoardExperiment', this.commandManager);
55-
contextKey.set(true).ignoreErrors();
56-
}
31+
this.disposables.push(
32+
this.commandManager.registerCommand(
33+
Commands.LaunchTensorBoard,
34+
(
35+
entrypoint: TensorBoardEntrypoint = TensorBoardEntrypoint.palette,
36+
trigger: TensorBoardEntrypointTrigger = TensorBoardEntrypointTrigger.palette,
37+
) => {
38+
sendTelemetryEvent(EventName.TENSORBOARD_SESSION_LAUNCH, undefined, {
39+
trigger,
40+
entrypoint,
41+
});
42+
return this.createNewSession();
43+
},
44+
),
45+
);
5746
}
5847

5948
private async createNewSession(): Promise<TensorBoardSession | undefined> {

src/client/tensorBoard/tensorBoardUsageTracker.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import { TextEditor } from 'vscode';
77
import { IExtensionSingleActivationService } from '../activation/types';
88
import { IDocumentManager } from '../common/application/types';
99
import { isTestExecution } from '../common/constants';
10-
import { IDisposableRegistry } from '../common/types';
10+
import { NativeTensorBoard } from '../common/experiments/groups';
11+
import { IDisposableRegistry, IExperimentService } from '../common/types';
1112
import { getDocumentLines } from '../telemetry/importTracker';
1213
import { TensorBoardEntrypointTrigger } from './constants';
1314
import { containsTensorBoardImport } from './helpers';
@@ -23,9 +24,13 @@ export class TensorBoardUsageTracker implements IExtensionSingleActivationServic
2324
@inject(IDocumentManager) private documentManager: IDocumentManager,
2425
@inject(IDisposableRegistry) private disposables: IDisposableRegistry,
2526
@inject(TensorBoardPrompt) private prompt: TensorBoardPrompt,
27+
@inject(IExperimentService) private experimentService: IExperimentService,
2628
) {}
2729

2830
public async activate(): Promise<void> {
31+
if (!(await this.experimentService.inExperiment(NativeTensorBoard.experiment))) {
32+
return;
33+
}
2934
if (testExecution) {
3035
await this.activateInternal();
3136
} else {

src/test/tensorBoard/tensorBoardSession.test.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { TensorBoard } from '../../client/common/utils/localize';
77
import { IServiceManager } from '../../client/ioc/types';
88
import { TensorBoardEntrypoint, TensorBoardEntrypointTrigger } from '../../client/tensorBoard/constants';
99
import { TensorBoardSession } from '../../client/tensorBoard/tensorBoardSession';
10-
import { TensorBoardSessionProvider } from '../../client/tensorBoard/tensorBoardSessionProvider';
1110
import { closeActiveWindows, initialize } from '../initialize';
1211
import * as ExperimentHelpers from '../../client/common/experiments/helpers';
1312
import { IInterpreterService } from '../../client/interpreter/contracts';
@@ -31,7 +30,6 @@ suite('TensorBoard session creation', async () => {
3130
let serviceManager: IServiceManager;
3231
let errorMessageStub: Sinon.SinonStub;
3332
let sandbox: Sinon.SinonSandbox;
34-
let provider: TensorBoardSessionProvider;
3533
let applicationShell: IApplicationShell;
3634
let commandManager: ICommandManager;
3735

@@ -59,9 +57,6 @@ suite('TensorBoard session creation', async () => {
5957
const interpreterService = serviceManager.get<IInterpreterService>(IInterpreterService);
6058
sandbox.stub(interpreterService, 'getActiveInterpreter').resolves(interpreter);
6159

62-
// Create tensorboard session provider
63-
provider = serviceManager.get<TensorBoardSessionProvider>(TensorBoardSessionProvider);
64-
await provider.activate();
6560
applicationShell = serviceManager.get<IApplicationShell>(IApplicationShell);
6661
errorMessageStub = sandbox.stub(applicationShell, 'showErrorMessage');
6762
commandManager = serviceManager.get<ICommandManager>(ICommandManager);

src/test/tensorBoard/tensorBoardUsageTracker.unit.test.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
import { assert } from 'chai';
22
import * as sinon from 'sinon';
3+
import { mock, when, instance } from 'ts-mockito';
34
import { TensorBoardUsageTracker } from '../../client/tensorBoard/tensorBoardUsageTracker';
45
import { TensorBoardPrompt } from '../../client/tensorBoard/tensorBoardPrompt';
56
import { MockDocumentManager } from '../startPage/mockDocumentManager';
67
import { createTensorBoardPromptWithMocks } from './helpers';
8+
import { NativeTensorBoard } from '../../client/common/experiments/groups';
9+
import { ExperimentService } from '../../client/common/experiments/service';
710

811
suite('TensorBoard usage tracker', () => {
912
let documentManager: MockDocumentManager;
1013
let tensorBoardImportTracker: TensorBoardUsageTracker;
1114
let prompt: TensorBoardPrompt;
15+
let experimentService: ExperimentService;
1216
let showNativeTensorBoardPrompt: sinon.SinonSpy;
1317

1418
setup(() => {
1519
documentManager = new MockDocumentManager();
1620
prompt = createTensorBoardPromptWithMocks();
1721
showNativeTensorBoardPrompt = sinon.spy(prompt, 'showNativeTensorBoardPrompt');
18-
tensorBoardImportTracker = new TensorBoardUsageTracker(documentManager, [], prompt);
22+
experimentService = mock(ExperimentService);
23+
when(experimentService.inExperiment(NativeTensorBoard.experiment)).thenResolve(true);
24+
tensorBoardImportTracker = new TensorBoardUsageTracker(
25+
documentManager,
26+
[],
27+
prompt,
28+
instance(experimentService),
29+
);
1930
});
2031

2132
test('Simple tensorboard import in Python file', async () => {

0 commit comments

Comments
 (0)