Skip to content

Commit 54eb5ef

Browse files
committed
[WIP] Initial wasm connection to surfer
1 parent a1f7302 commit 54eb5ef

File tree

5 files changed

+64
-65
lines changed

5 files changed

+64
-65
lines changed

example/.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
"${workspaceFolder}/design_sim"
44
],
55
"rtlDebugger.watchList": [
6+
{
7+
"id": "top data"
8+
},
69
{
710
"id": "top data"
811
}

src/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ export function activate(context: vscode.ExtensionContext) {
6262
}));
6363
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepBackward', () =>
6464
rtlDebugger.session!.stepBackward()));
65-
// context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepForward', () =>
66-
// rtlDebugger.session!.stepForward()));
65+
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.stepForward', () =>
66+
rtlDebugger.session!.stepForward()));
6767
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.continueForward', () =>
6868
rtlDebugger.session!.continueForward()));
6969
context.subscriptions.push(vscode.commands.registerCommand('rtlDebugger.goToTime', async () => {

src/surfer/embed.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import libsurferInit, * as libsurfer from 'libsurfer';
22

33
import { ClientPacketString, type ExtensionToWebviewMessage, type WebviewToExtensionMessage } from '../ui/waveform';
4-
import { Packet } from '../cxxrtl/link';
54

65
function libsurferInjectMessage(message: any) {
76
libsurfer.inject_message(JSON.stringify(message));
@@ -23,26 +22,24 @@ document.addEventListener('DOMContentLoaded', async () => {
2322
const postMessage = <(message: WebviewToExtensionMessage) => void>vscode.postMessage;
2423
window.addEventListener('message', async (event: MessageEvent<ExtensionToWebviewMessage>) => {
2524
const message = event.data;
26-
if (message.type == "cxxrtl_scmessage") {
27-
console.log("Sending response message to Surfer")
28-
await libsurfer.on_cxxrtl_sc_message(message.message.inner)
29-
}
30-
else {
31-
console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message);
25+
if (message.type === 'cxxrtl_scmessage') {
26+
console.log("Handing off ", message.message.inner, " to Surfer")
27+
await libsurfer.on_cxxrtl_sc_message(message.message.inner);
28+
} else {
29+
console.error('[RTL Debugger] [surferEmbed] Unhandled extension to webview message', message);
3230
}
3331
});
3432

3533
const handle_cs_messages = async () => {
3634
while (true) {
37-
const message = await libsurfer.cxxrtl_cs_message()
35+
const message = await libsurfer.cxxrtl_cs_message();
3836
if (message) {
39-
console.log("Posting message from surfer: ", message);
40-
postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)})
37+
postMessage({type: 'cxxrtl_csmessage', message: new ClientPacketString(message)});
4138
} else {
42-
throw Error("Got an undefined message from Surfer. Its client probably disconnected")
39+
throw Error('Got an undefined message from Surfer. Its client probably disconnected');
4340
}
4441
}
45-
}
42+
};
4643

4744
try {
4845
await libsurferInit();
@@ -53,8 +50,8 @@ document.addEventListener('DOMContentLoaded', async () => {
5350
await libsurfer.start_cxxrtl();
5451

5552
libsurferInjectMessage('ToggleMenu'); // turn off menu
56-
libsurferInjectMessage('ToggleStatusBar'); // turn off status bar
57-
libsurferInjectMessage('ToggleSidePanel');
53+
// libsurferInjectMessage('ToggleStatusBar'); // turn off status bar
54+
// libsurferInjectMessage('ToggleSidePanel');
5855
libsurferInjectMessage({ SelectTheme: 'dark+' }); // pick VS Code like theme
5956

6057
overlay.style.display = 'none';

src/ui/waveform.ts

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import { CXXRTLDebugger } from '../debugger';
44
// @ts-ignore
55
import embedHtml from '../surfer/embed.html';
66
import { ILink, Packet } from '../cxxrtl/link';
7-
import { ClientPacket, ServerPacket } from '../cxxrtl/proto';
7+
import { ClientPacket } from '../cxxrtl/proto';
88

99
export class ClientPacketString {
10-
constructor(public inner: string) { }
10+
constructor(public inner: string) { }
1111
}
1212
export class ServerPacketString {
13-
constructor(public inner: string) { }
13+
constructor(public inner: string) { }
1414
}
1515

1616

@@ -28,58 +28,57 @@ export type WebviewToExtensionMessage =
2828
;
2929

3030
export class WaveformProvider {
31-
constructor(
32-
private rtlDebugger: CXXRTLDebugger,
33-
private webviewPanel: vscode.WebviewPanel,
34-
bundleRoot: vscode.Uri,
35-
) {
36-
const webviewHtml = embedHtml.replace(/__base_href__/,
37-
this.webview.asWebviewUri(bundleRoot).toString());
38-
this.webview.onDidReceiveMessage(this.processMessage.bind(this));
39-
this.webview.html = webviewHtml;
40-
const debuggerLink = rtlDebugger.session?.createSecondaryLink()
31+
constructor(
32+
private rtlDebugger: CXXRTLDebugger,
33+
private webviewPanel: vscode.WebviewPanel,
34+
bundleRoot: vscode.Uri,
35+
) {
36+
const webviewHtml = embedHtml.replace(/__base_href__/,
37+
this.webview.asWebviewUri(bundleRoot).toString());
38+
this.webview.onDidReceiveMessage(this.processMessage.bind(this));
39+
this.webview.html = webviewHtml;
40+
const debuggerLink = rtlDebugger.session?.createSecondaryLink();
4141

42-
// TODO: Correct way to handle errors?
43-
if (debuggerLink) {
44-
this.debuggerLink = debuggerLink
45-
this.debuggerLink.onRecv = async (message) => {
46-
console.log("Running on recv for ", message)
47-
// await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) })
48-
}
49-
} else {
50-
throw new Error("Failed to create secondary debugger link")
42+
// TODO: Correct way to handle errors?
43+
if (debuggerLink) {
44+
this.debuggerLink = debuggerLink;
45+
this.debuggerLink.onRecv = async (message) => {
46+
// console.log("Running on recv for ", message)
47+
await this.sendMessage({ type: "cxxrtl_scmessage", message: new ServerPacketString(message.asString()) })
48+
};
49+
} else {
50+
throw new Error('Failed to create secondary debugger link');
51+
}
5152
}
52-
}
5353

54-
dispose() {
55-
this.webviewPanel.dispose();
56-
}
54+
dispose() {
55+
this.webviewPanel.dispose();
56+
}
5757

58-
get webview() {
59-
return this.webviewPanel.webview;
60-
}
58+
get webview() {
59+
return this.webviewPanel.webview;
60+
}
6161

62-
private async sendMessage(message: ExtensionToWebviewMessage) {
63-
const messagePosted = await this.webview.postMessage(message);
64-
if (!messagePosted) {
65-
console.warn('[RTL Debugger] [WaveformProvider] Dropping extension to webview message:', message);
62+
private async sendMessage(message: ExtensionToWebviewMessage) {
63+
const messagePosted = await this.webview.postMessage(message);
64+
if (!messagePosted) {
65+
console.warn('[RTL Debugger] [WaveformProvider] Dropping extension to webview message:', message);
66+
}
6667
}
67-
}
6868

69-
private async processMessage(message: WebviewToExtensionMessage) {
70-
if (message.type === 'ready') {
71-
console.log('[RTL Debugger] [WaveformProvider] Ready');
72-
} else if (message.type === 'crash') {
73-
console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error);
74-
} else if (message.type == 'cxxrtl_csmessage') {
75-
console.log(`[RTL Debugger] [WaveformProvider] Got CSMessage`, message.message);
76-
const packet: Packet<ClientPacket> = Packet.fromString(message.message.inner);
77-
console.log("Handing ", packet.asString(), " off to debugger link")
78-
await this.debuggerLink.send(packet)
79-
} else {
80-
console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message);
69+
private async processMessage(message: WebviewToExtensionMessage) {
70+
if (message.type === 'ready') {
71+
console.log('[RTL Debugger] [WaveformProvider] Ready');
72+
} else if (message.type === 'crash') {
73+
console.log('[RTL Debugger] [WaveformProvider] Crash:', message.error);
74+
} else if (message.type == 'cxxrtl_csmessage') {
75+
console.log('[RTL Debugger] [WaveformProvider] Got CSMessage', message.message);
76+
const packet: Packet<ClientPacket> = Packet.fromString(message.message.inner);
77+
await this.debuggerLink.send(packet);
78+
} else {
79+
console.error('[RTL Debugger] [WaveformProvider] Unhandled webview to extension message:', message);
80+
}
8181
}
82-
}
8382

84-
private debuggerLink: ILink;
83+
private debuggerLink: ILink;
8584
}

vendor/surfer

Submodule surfer updated from 880ab29 to e0c704b

0 commit comments

Comments
 (0)