Skip to content

Commit 056a035

Browse files
committed
Allow multiple waveform providers
1 parent 479e1d1 commit 056a035

File tree

5 files changed

+51
-16
lines changed

5 files changed

+51
-16
lines changed

src/debugger.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export class CXXRTLDebugger {
2222
private statusBarItem: StatusBarItem;
2323
private terminal: vscode.Terminal | null = null;
2424
session: Session | null = null;
25-
waveformProvider: WaveformProvider | null = null;
25+
nextWaveformviewId: number = 0;
26+
waveformProviders: Map<string, WaveformProvider> = new Map();
27+
lastActiveWaveformTab: string | null = null;
2628

2729
// Session properties.
2830

src/extension.ts

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,12 @@ export function activate(context: vscode.ExtensionContext) {
7676
}));
7777

7878
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.addToWaveform', (treeItem) => {
79-
if (rtlDebugger.waveformProvider) {
80-
rtlDebugger.waveformProvider.addVariable(treeItem.designation.variable);
79+
if (rtlDebugger.lastActiveWaveformTab) {
80+
console.log(rtlDebugger.lastActiveWaveformTab);
81+
const target = rtlDebugger.waveformProviders.get(rtlDebugger.lastActiveWaveformTab);
82+
if (target) {
83+
target.addVariable(treeItem.designation.variable);
84+
}
8185
}
8286
}));
8387

@@ -96,19 +100,48 @@ export function activate(context: vscode.ExtensionContext) {
96100
globalWatchList.remove(treeItem.metadata.index)));
97101

98102
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.browseWaveforms', () => {
103+
const viewKey = `rtlDebugger.waveforms.${rtlDebugger.nextWaveformviewId++}`;
99104
const webviewPanel = vscode.window.createWebviewPanel(
100-
'rtlDebugger.waveforms',
101-
'Waveforms', {
105+
viewKey,
106+
'Waveforms',
107+
{
102108
viewColumn: vscode.ViewColumn.Beside,
103-
}, {
109+
},
110+
{
104111
enableScripts: true,
105112
retainContextWhenHidden: true,
106-
});
113+
}
114+
);
115+
console.log(`Creating web view panel with viewType ${webviewPanel.viewType}`);
107116
const bundleRoot = vscode.Uri.joinPath(context.extensionUri, 'out/');
108-
rtlDebugger.waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot);
109-
context.subscriptions.push(rtlDebugger.waveformProvider);
117+
const waveformProvider = new WaveformProvider(rtlDebugger, webviewPanel, bundleRoot);
118+
rtlDebugger.waveformProviders.set(viewKey, waveformProvider);
119+
rtlDebugger.lastActiveWaveformTab = viewKey;
120+
context.subscriptions.push(waveformProvider);
110121
}));
111122

123+
vscode.window.tabGroups.onDidChangeTabs(event => {
124+
const activeWaveformTab = event.changed.map((tab, _) => {
125+
if (tab.input instanceof vscode.TabInputWebview) {
126+
console.log(`${tab.input.viewType}`);
127+
128+
const key = tab.input.viewType.match(/.*(rtlDebugger.waveforms\.\d+)/);
129+
130+
if (key) {
131+
return key[1];
132+
} else {
133+
return null;
134+
}
135+
} else {
136+
return null;
137+
}
138+
}).find((id) => id !== null);
139+
140+
if (activeWaveformTab) {
141+
rtlDebugger.lastActiveWaveformTab = activeWaveformTab;
142+
}
143+
});
144+
112145
// For an unknown reason, the `vscode.open` command (which does the exact same thing) ignores the options.
113146
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.openDocument',
114147
(uri: vscode.Uri, options: vscode.TextDocumentShowOptions) => {

src/surfer/embed.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ document.addEventListener('DOMContentLoaded', async () => {
2222
const postMessage = <(message: WebviewToExtensionMessage) => void>vscode.postMessage;
2323
window.addEventListener('message', async (event: MessageEvent<ExtensionToWebviewMessage>) => {
2424
const message = event.data;
25-
if (message.type === 'cxxrtl_scmessage') {
25+
if (message.type === 'cxxrtl_sc_message') {
2626
await libsurfer.on_cxxrtl_sc_message(message.message.inner);
2727
} else if (message.type === 'wcp_cs_message') {
2828
await libsurfer.handle_wcp_cs_message(message.message);
@@ -35,7 +35,7 @@ document.addEventListener('DOMContentLoaded', async () => {
3535
while (true) {
3636
const message = await libsurfer.cxxrtl_cs_message();
3737
if (message) {
38-
postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)});
38+
postMessage({type: 'cxxrtl_cs_message', message: new ClientPacketString(message)});
3939
} else {
4040
throw Error('Got an undefined message from Surfer. Its client probably disconnected');
4141
}

src/ui/waveform.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ export class ServerPacketString {
1818
export type ExtensionToWebviewMessage =
1919
| { type: 'restore', state: any }
2020
// TODO: Proper type here
21-
| { type: 'cxxrtl_scmessage', message: ServerPacketString }
21+
| { type: 'cxxrtl_sc_message', message: ServerPacketString }
2222
| { type: 'wcp_cs_message', message: string }
2323
;
2424

2525
export type WebviewToExtensionMessage =
2626
| { type: 'ready' }
2727
| { type: 'crash', error: any }
2828
// TODO: Proper type here
29-
| { type: 'cxxrtl_csmessage', message: ClientPacketString }
29+
| { type: 'cxxrtl_cs_message', message: ClientPacketString }
3030
| { type: 'wcp_sc_message', message: string }
3131
;
3232

@@ -47,7 +47,7 @@ export class WaveformProvider {
4747
this.debuggerLink = debuggerLink;
4848
this.debuggerLink.onRecv = async (message) => {
4949
// console.log("Running on recv for ", message)
50-
await this.sendMessage({ type: 'cxxrtl_scmessage', message: new ServerPacketString(message.asString()) });
50+
await this.sendMessage({ type: 'cxxrtl_sc_message', message: new ServerPacketString(message.asString()) });
5151
};
5252
} else {
5353
throw new Error('Failed to create secondary debugger link');
@@ -74,7 +74,7 @@ export class WaveformProvider {
7474
console.log('[RTL Debugger] [WaveformProvider] Ready');
7575
} else if (message.type === 'crash') {
7676
console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error);
77-
} else if (message.type === 'cxxrtl_csmessage') {
77+
} else if (message.type === 'cxxrtl_cs_message') {
7878
console.log('[RTL Debugger] [WaveformProvider] Got CSMessage', message.message);
7979
const packet: Packet<ClientPacket> = Packet.fromString(message.message.inner);
8080
await this.debuggerLink.send(packet);

vendor/surfer

Submodule surfer updated from 895b20c to 3dd32c7

0 commit comments

Comments
 (0)