Skip to content

Commit 1f56d0e

Browse files
committed
start putting more v2 components back together
1 parent 5ee5405 commit 1f56d0e

File tree

3 files changed

+208
-49
lines changed

3 files changed

+208
-49
lines changed

lib/stream-data.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ const streamData = async ($, dataFileName) => {
1313

1414
$.memU32[memmap.definitions_ptr] = memmap.definitions;
1515

16-
console.log(self.location, dataFileName);
17-
const resp = await fetch(self.location.origin + '/' + dataFileName, {
16+
const resp = await fetch(dataFileName, {
1817
headers: {'Accept-Encoding': 'br, deflate'}
1918
});
2019
const reader = resp.body.getReader();
@@ -43,7 +42,7 @@ const streamData = async ($, dataFileName) => {
4342
postMessage({cmd: 'stats', data: stats});
4443
}
4544
// console.log($.memU32.slice($.context, 32)); // retrun context size
46-
console.log(stats);
45+
// console.log(stats);
4746
return stats;
4847
};
4948

lib/vcdrom-worker.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,39 @@ const {
1414
const streamData = require('./stream-data.js');
1515

1616
const main = async () => {
17+
const {crossOriginIsolated} = self;
18+
if (!crossOriginIsolated) {
19+
console.error({crossOriginIsolated});
20+
}
21+
1722
const t0 = Date.now();
1823
const $ = initVcdWorkerState();
19-
console.log({crossOriginIsolated: self.crossOriginIsolated});
24+
25+
$.didEndDefinitions = () => {
26+
console.log('didEndDefinitions');
27+
postMessage({cmd: 'enddefinitions', data: {
28+
wires: $.wires,
29+
timescale: $.timescale
30+
}});
31+
};
2032

2133
const handlers = {
2234
loadWasm: async () => {
23-
console.log('Loading Wasm');
35+
console.log('rx: loadWasm');
2436
await loadWasm($, vcd2wasm);
2537
$.memory = $.wasmInstance.exports.memory;
2638
addWasmMemoryViews($);
2739
postMessage({cmd: 'wasmMemory', data: $.memory});
2840
},
2941
loadVcd: async (e) => {
42+
console.log('rx: loadVcd');
3043
const t1 = Date.now();
3144
const stats = await streamData($, e.data.data);
3245
const t2 = Date.now();
3346
stats.tStream = t2 - t1;
3447
stats.tLoad = t1 - t0;
3548
stats[0] = 1000 * stats.totalLength / stats.tStream;
36-
console.log(stats);
49+
// console.log(stats);
3750
postMessage({cmd: 'loadVcdDone'});
3851
}
3952
};
@@ -56,3 +69,4 @@ const main = async () => {
5669
main();
5770

5871
/* eslint-env worker */
72+
/* eslint no-console: 0 */

lib/vcdrom.js

Lines changed: 189 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,85 @@
11
'use strict';
22

3-
const memmap = require('vcd2/lib/memmap.js');
4-
// const initState = require('vcd2/lib/init-state.js');
3+
const {StyleModule} = require('style-mod');
4+
const stringify = require('onml/stringify.js');
5+
// const memmap = require('vcd2/lib/memmap.js');
56
const addWasmMemoryViews = require('vcd2/lib/add-wasm-memory-views.js');
6-
// const traceGlPages = require('./trace-gl-pages.js');
7+
8+
const {
9+
createCodeMirrorState,
10+
mountCodeMirror6
11+
} = require('waveql');
12+
13+
const {
14+
domContainer,
15+
pluginRenderValues,
16+
pluginRenderTimeGrid,
17+
keyBindo,
18+
mountTree,
19+
getElement,
20+
// getListing,
21+
// // renderMenu,
22+
// // mountCodeMirror5,
23+
genKeyHandler,
24+
genOnWheel,
25+
themeAll,
26+
helpPanel
27+
} = require('@wavedrom/doppler');
28+
29+
const pkg = require('../package.json');
30+
const appContext = require('./app-context.js');
731
const vcdromWorkerUri = require('../vcdrom-worker.uri.json');
832
const base64JsBlob = require('./base64-js-blob.js');
33+
const dropZone = require('./drop-zone.js');
34+
const pluginLocalStore = require('./plugin-local-store.js');
35+
const fileInUrl = require('./file-in-url.js');
36+
const getFullWaveQL = require('./get-full-wave-ql.js');
37+
const parseTimescale = require('./parse-time-scale.js');
938

10-
global.VCDrom = async () => {
11-
// need to be true
12-
console.log({crossOriginIsolated: window.crossOriginIsolated});
39+
const genWasmMemory = ($) => async (e) => {
40+
console.log('rx: wasmMemory');
41+
$.memory = e.data.data;
42+
addWasmMemoryViews($);
43+
$.state.vcdParserReady = true;
44+
};
1345

14-
document.body.innerHTML = '<div id="container"></div>';
15-
const container = document.getElementById('container');
16-
const urlSearchParams = new URLSearchParams(window.location.search);
46+
const genEnddefinitions = ($) => async (e) => {
47+
console.log('rx: enddefinitions');
48+
const {data} = e.data;
49+
$.enddefinitions = data;
50+
$.state.vcdDefinitionsParsed = true;
51+
console.log(data);
52+
};
1753

18-
const vcdWorker = new Worker(base64JsBlob(vcdromWorkerUri));
54+
const genStats = (/* $, statBar */) => async (/* e */) => {
55+
console.log('rx: stats');
56+
// const {data} = e.data;
57+
// if ($.enddefinitions) {
58+
// const timescaleString = $.enddefinitions.timescale;
59+
// const m = timescaleString.trim().match(/^(\d+)\s*(\w+)$/);
60+
// const time = $.memI64[memmap.time] * BigInt(m[1]);
61+
// // statBar.innerHTML =
62+
// // data.totalLength.toLocaleString() + ' Byte, '
63+
// // + time.toLocaleString() + ' ' + m[2];
64+
// } else {
65+
// // statBar.innerHTML = data.totalLength.toLocaleString();
66+
// }
67+
};
68+
69+
const genLoadVcdDone = () => async () => {
70+
console.log('rx: loadVcdDone');
71+
// traceGlPages($);
72+
};
1973

20-
const $ = {}; // empty state
74+
const installHandlers = ($, vcdWorker, rootDiv) => {
75+
76+
rootDiv.innerHTML = '';
2177

2278
const handlers = {
23-
wasmMemory: async (e) => {
24-
console.log('wasmMemory');
25-
$.memory = e.data.data;
26-
addWasmMemoryViews($);
27-
for (const [key, value] of urlSearchParams) {
28-
if (key === 'vcd') { // ...:8080/?vcd=foo.vcd
29-
console.log(window.location);
30-
vcdWorker.postMessage({
31-
cmd: 'loadVcd',
32-
data: value
33-
});
34-
break;
35-
}
36-
}
37-
},
38-
enddefinitions: async (e) => {
39-
$.enddefinitions = e.data.data;
40-
console.log(e.data);
41-
},
42-
stats: async () => {
43-
if ($.enddefinitions) {
44-
const timescaleString = $.enddefinitions.timescale;
45-
const m = timescaleString.trim().match(/^(\d+)\s*(\w+)$/);
46-
const time = $.memI64[memmap.time] * BigInt(m[1]);
47-
container.innerHTML = time.toLocaleString() + ' ' + m[2];
48-
} else {
49-
container.innerHTML = '0';
50-
}
51-
},
52-
loadVcdDone: async () => {
53-
// traceGlPages($);
54-
}
79+
wasmMemory: genWasmMemory($),
80+
enddefinitions: genEnddefinitions($),
81+
stats: genStats($, rootDiv),
82+
loadVcdDone: genLoadVcdDone()
5583
};
5684

5785
vcdWorker.onmessage = async (e) => {
@@ -68,8 +96,126 @@ global.VCDrom = async () => {
6896
await handler(e);
6997
};
7098

99+
$.sub.set.after('vcdParserReady', async () => {
100+
const vcdUrl = fileInUrl(['vcd']);
101+
const waveqlUrl = fileInUrl(['waveql']);
102+
103+
if (!vcdUrl) {
104+
rootDiv.innerHTML = stringify(dropZone({width: 2048, height: 2048}));
105+
return;
106+
}
107+
108+
// DOM elements
109+
const cnt1 = domContainer({
110+
elemento: mountTree.defaultElemento,
111+
layers: mountTree.defaultLayers,
112+
renderPlugins: [
113+
pluginRenderTimeGrid,
114+
pluginRenderValues,
115+
pluginLocalStore
116+
],
117+
pluginRightPanel: (elo) => {
118+
elo.rightPanel.innerHTML = stringify(helpPanel.mlPanel(keyBindo, pkg.version));
119+
}
120+
});
121+
rootDiv.appendChild(cnt1.pstate.container);
122+
123+
const updater = (/* str */) => {
124+
// console.log('updater');
125+
// deso.waveql = str;
126+
// vscode.postMessage({
127+
// kind: 'waveql.update',
128+
// text: str
129+
// });
130+
};
131+
132+
const deso = {
133+
hasHistory: true,
134+
// isRO: true,
135+
wires: {body: []},
136+
view: [],
137+
chango: {},
138+
listing: [],
139+
render: () => { console.log('dummy render'); },
140+
updater
141+
};
142+
143+
const restartCm = () => {
144+
cnt1.pstate.waveql = deso.waveql;
145+
deso.wires = $.enddefinitions.wires;
146+
deso.timescale = parseTimescale($.enddefinitions.timescale);
147+
console.log($.enddefinitions);
148+
cnt1.start(deso);
149+
deso.render();
150+
cm.view.dispatch({changes: {
151+
from: 0, to: cm.view.state.doc.length, insert: deso.waveql
152+
}});
153+
cm.view.setState(createCodeMirrorState(
154+
deso,
155+
cnt1.pstate
156+
));
157+
};
158+
159+
if (waveqlUrl) {
160+
const resp = await fetch(waveqlUrl);
161+
const text = await resp.text();
162+
deso.waveql = text;
163+
$.sub.set.after('vcdDefinitionsParsed', async () => {
164+
console.log('sub.set.after: waveqlUrl -> deso.vcdDefinitionsParsed');
165+
restartCm();
166+
});
167+
} else {
168+
$.sub.set.after('vcdDefinitionsParsed', async () => {
169+
console.log('sub.set.after: vcdDefinitionsParsed');
170+
const text = getFullWaveQL($.enddefinitions.wires);
171+
deso.waveql = text;
172+
restartCm();
173+
});
174+
}
175+
176+
const cmState = createCodeMirrorState(
177+
deso,
178+
cnt1.pstate
179+
);
180+
181+
const cm = mountCodeMirror6(
182+
cmState,
183+
cnt1.elo.waveqlPanel,
184+
deso,
185+
cnt1.pstate
186+
);
187+
cnt1.elo.container.addEventListener('keydown', genKeyHandler.genKeyHandler(rootDiv, cnt1.pstate, deso, cm, keyBindo));
188+
cnt1.elo.container.addEventListener('wheel', genOnWheel(rootDiv, cnt1.pstate, deso, cm, keyBindo));
189+
cm.view.focus();
190+
191+
192+
// cnt1.start(deso);
193+
if (vcdUrl) {
194+
vcdWorker.postMessage({cmd: 'loadVcd', data: vcdUrl});
195+
}
196+
});
197+
71198
vcdWorker.postMessage({cmd: 'loadWasm'});
199+
};
200+
201+
global.VCDrom = async (divName) => {
202+
const {crossOriginIsolated} = window;
203+
if (!crossOriginIsolated) {
204+
console.error({crossOriginIsolated});
205+
}
206+
207+
console.log(pkg.name, pkg.version);
208+
const rootDiv = getElement(divName);
209+
210+
const themeAllMod = new StyleModule(themeAll);
211+
StyleModule.mount(document, themeAllMod);
212+
213+
const vcdWorker = new Worker(base64JsBlob(vcdromWorkerUri));
214+
const $ = appContext();
215+
216+
installHandlers($, vcdWorker, rootDiv);
72217

73218
};
74219

75220
/* eslint-env browser */
221+
/* eslint no-console: 0 */

0 commit comments

Comments
 (0)