Skip to content

Commit fb0dbcd

Browse files
GregSavinmarcdumais-work
authored andcommitted
Allow other extensions to programmatically remove a trace.
This adds a new command, traces.removeTrace, that accepts an experiment uuid and endeavors to remove the experiment if present. Enhances traces.openTraceFile to return an experiment UUID, which can later be used as an argument to traces.removeTrace.
1 parent abe1c62 commit fb0dbcd

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

vscode-trace-extension/src/extension.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import {
1313
resetZoomHandler,
1414
undoRedoHandler,
1515
zoomHandler,
16-
keyboardShortcutsHandler
16+
keyboardShortcutsHandler,
17+
deleteExperiment
1718
} from './trace-explorer/trace-utils';
1819
import { TraceServerConnectionStatusService } from './utils/trace-server-status';
1920
import {
@@ -96,9 +97,23 @@ export async function activate(context: vscode.ExtensionContext): Promise<Extern
9697
const fileOpenHandler = fileHandler();
9798
context.subscriptions.push(
9899
vscode.commands.registerCommand('traces.openTraceFile', async (file: vscode.Uri) => {
100+
let result = undefined;
99101
await startTraceServerIfAvailable(file.fsPath);
100102
if (await isTraceServerUp()) {
101-
await fileOpenHandler(context, file);
103+
const experiment = await fileOpenHandler(context, file);
104+
if (experiment) {
105+
result = experiment.UUID;
106+
}
107+
vscode.commands.executeCommand('trace-explorer.refreshContext');
108+
}
109+
return result;
110+
})
111+
);
112+
113+
context.subscriptions.push(
114+
vscode.commands.registerCommand('traces.removeTrace', async (uuid: string | undefined) => {
115+
if (uuid) {
116+
await deleteExperiment(context.extensionUri, uuid);
102117
vscode.commands.executeCommand('trace-explorer.refreshContext');
103118
}
104119
})

vscode-trace-extension/src/trace-explorer/trace-utils.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { getExperimentManager, getTraceManager } from '../utils/backend-tsp-clie
66
import { updateNoExperimentsContext } from '../utils/backend-tsp-client-provider';
77
import { messenger, traceLogger } from '../extension';
88
import { KeyboardShortcutsPanel } from '../trace-viewer-panel/keyboard-shortcuts-panel';
9+
import { Experiment } from 'tsp-typescript-client';
910

1011
// eslint-disable-next-line no-shadow
1112
export enum ProgressMessages {
@@ -53,7 +54,7 @@ export const openDialog = async (selectFiles = false): Promise<vscode.Uri | unde
5354

5455
export const fileHandler =
5556
() =>
56-
async (context: vscode.ExtensionContext, traceUri: vscode.Uri): Promise<void> => {
57+
async (context: vscode.ExtensionContext, traceUri: vscode.Uri): Promise<Experiment | undefined> => {
5758
const resolvedTraceURI: vscode.Uri = traceUri;
5859
const { traceManager, experimentManager } = getManagers();
5960
return vscode.window.withProgress(
@@ -66,15 +67,15 @@ export const fileHandler =
6667
try {
6768
if (token.isCancellationRequested) {
6869
progress.report({ message: ProgressMessages.COMPLETE, increment: 100 });
69-
return;
70+
return undefined;
7071
}
7172

7273
const filePath: string = resolvedTraceURI.fsPath;
7374
if (!filePath) {
7475
traceLogger.showError(
7576
'Cannot open trace: could not retrieve path from URI for trace ' + resolvedTraceURI
7677
);
77-
return;
78+
return undefined;
7879
}
7980

8081
const name = path.basename(filePath);
@@ -153,16 +154,31 @@ export const fileHandler =
153154
rollbackTraces(traces, 20, progress);
154155
progress.report({ message: ProgressMessages.COMPLETE, increment: 10 });
155156
panel.dispose();
156-
return;
157+
return undefined;
157158
}
158159
progress.report({ message: ProgressMessages.COMPLETE, increment: 30 });
160+
return experiment;
159161
} finally {
160162
updateNoExperimentsContext();
161163
}
162164
}
163165
);
164166
};
165167

168+
export const deleteExperiment = async (extensionUri: vscode.Uri, uuid: string) => {
169+
// dispose any open panels associated with the experiment
170+
for (const key of Object.keys(TraceViewerPanel.activePanels)) {
171+
const panel = TraceViewerPanel.activePanels[key];
172+
const experimentUuid = panel?.getExperiment()?.UUID;
173+
if (experimentUuid === uuid) {
174+
TraceViewerPanel.disposePanel(extensionUri, key);
175+
}
176+
}
177+
// remove experiment from the experiment manager
178+
const experimentManager = getManagers().experimentManager;
179+
experimentManager.deleteExperiment(uuid);
180+
};
181+
166182
const rollbackTraces = async (
167183
traces: Array<TspTrace>,
168184
progressIncrement: number,

vscode-trace-extension/src/trace-viewer-panel/trace-viewer-webview-panel.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,9 @@ export class TraceViewerPanel {
431431
signalManager().emit('EXPERIMENT_OPENED', experiment);
432432
signalManager().emit('TRACEVIEWERTAB_ACTIVATED', experiment);
433433
}
434+
getExperiment(): Experiment | undefined {
435+
return this._experiment;
436+
}
434437

435438
addOutput(descriptor: OutputDescriptor): void {
436439
const wrapper = JSONBigUtils.stringify(descriptor);

0 commit comments

Comments
 (0)