Skip to content

Commit

Permalink
Properly deserialize Experiment in signals to create BigInt timestamps
Browse files Browse the repository at this point in the history
Contributes to fixing eclipse-cdt-cloud#35

Signed-off-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
  • Loading branch information
bhufmann committed Sep 30, 2022
1 parent f17d5da commit e27bf5e
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 19 deletions.
34 changes: 34 additions & 0 deletions vscode-trace-extension/src/common/signal-converter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
import { Trace } from 'tsp-typescript-client/lib/models/trace';

export function convertSignalExperiment(signalExperiment: Experiment): Experiment {
const experiment: Experiment = {
name: signalExperiment.name,
UUID: signalExperiment.UUID,
indexingStatus: signalExperiment.indexingStatus,
end: BigInt(signalExperiment.end),
start: BigInt(signalExperiment.start),
nbEvents: signalExperiment.nbEvents,
traces: convertSignalTraces(signalExperiment)
};
return experiment;
}

export function convertSignalTraces(signalExperiment: Experiment): Trace[] {
const traces: Trace[] = [];

signalExperiment.traces.forEach(t => {
const trace: Trace = {
name: t.name,
UUID: t.UUID,
end: BigInt(t.end),
start: BigInt(t.start),
indexingStatus: t.indexingStatus,
nbEvents: t.nbEvents,
path: t.path
};
traces.push(trace);
});
return traces;
}

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { signalManager, Signals } from 'traceviewer-base/lib/signals/signal-mana
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
import { OpenedTracesUpdatedSignalPayload } from 'traceviewer-base/lib/signals/opened-traces-updated-signal-payload';
import JSONBigConfig from 'json-bigint';
import { convertSignalExperiment } from 'vscode-trace-extension/src/common/signal-converter';

const JSONBig = JSONBigConfig({
useNativeBigInt: true,
Expand All @@ -26,7 +27,8 @@ export class TraceExplorerOpenedTracesViewProvider implements vscode.WebviewView

protected doHandleTracesWidgetActivatedSignal(experiment: Experiment): void {
if (this._view && experiment) {
this._view.webview.postMessage({command: 'traceViewerTabActivated', data: experiment});
const wrapper: string = JSONBig.stringify(experiment);
this._view.webview.postMessage({command: 'traceViewerTabActivated', data: wrapper});
}
}
protected doHandleOpenedTracesChangedSignal(payload: OpenedTracesUpdatedSignalPayload): void {
Expand Down Expand Up @@ -62,29 +64,25 @@ export class TraceExplorerOpenedTracesViewProvider implements vscode.WebviewView
return;
case 'reopenTrace':
if (message.data && message.data.wrapper) {
// FIXME: JSONBig.parse() create bigint if numbers are small
const experiment = JSONBig.parse(message.data.wrapper);
const experiment = convertSignalExperiment(JSONBig.parse(message.data.wrapper));
const panel = TraceViewerPanel.createOrShow(this._extensionUri, experiment.name);
panel.setExperiment(experiment);
}
return;
case 'closeTrace':
if (message.data && message.data.wrapper) {
// FIXME: JSONBig.parse() create bigint if numbers are small
TraceViewerPanel.disposePanel(this._extensionUri, JSONBig.parse(message.data.wrapper).name);
}
return;
case 'deleteTrace':
if (message.data && message.data.wrapper) {
// FIXME: JSONBig.parse() create bigint if numbers are small
// just remove the panel here
TraceViewerPanel.disposePanel(this._extensionUri, JSONBig.parse(message.data.wrapper).name);
}
return;
case 'experimentSelected': {
if (message.data && message.data.wrapper) {
// FIXME: JSONBig.parse() create bigint if numbers are small
signalManager().fireExperimentSelectedSignal(JSONBig.parse(message.data.wrapper));
signalManager().fireExperimentSelectedSignal(convertSignalExperiment(JSONBig.parse(message.data.wrapper)));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import * as vscode from 'vscode';
import { getTspClientUrl, getTraceServerUrl } from '../../utils/tspClient';
import JSONBigConfig from 'json-bigint';
import { signalManager, Signals } from 'traceviewer-base/lib/signals/signal-manager';
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
import { TraceViewerPanel } from '../../trace-viewer-panel/trace-viewer-webview-panel';
import { OutputDescriptor } from 'tsp-typescript-client/lib/models/output-descriptor';
import JSONBigConfig from 'json-bigint';
import * as vscode from 'vscode';
import { TraceViewerPanel } from '../../trace-viewer-panel/trace-viewer-webview-panel';
import { getTraceServerUrl, getTspClientUrl } from '../../utils/tspClient';
import { convertSignalExperiment } from 'vscode-trace-extension/src/common/signal-converter';

const JSONBig = JSONBigConfig({
useNativeBigInt: true,
Expand Down Expand Up @@ -51,7 +52,8 @@ export class TraceExplorerAvailableViewsProvider implements vscode.WebviewViewPr
return;
case 'outputAdded':
if (message.data && message.data.descriptor) {
// FIXME: JSONBig.parse() create bigint if numbers are small
// FIXME: JSONBig.parse() created bigint if numbers are small.
// Not an issue right now for output descriptors.
const descriptor = JSONBig.parse(message.data.descriptor) as OutputDescriptor;
// TODO: Don't use static current panel, i.e. find better design to add output...

Expand All @@ -65,8 +67,8 @@ export class TraceExplorerAvailableViewsProvider implements vscode.WebviewViewPr
try {
// Avoid endless forwarding of signal
this._selectionOngoing = true;
// FIXME: JSONBig.parse() create bigint if numbers are small
signalManager().fireExperimentSelectedSignal(JSONBig.parse(message.data.wrapper));
const experiment = convertSignalExperiment(JSONBig.parse(message.data.wrapper));
signalManager().fireExperimentSelectedSignal(experiment);
} finally {
this._selectionOngoing = false;
}
Expand Down
34 changes: 34 additions & 0 deletions vscode-trace-webviews/src/common/vscode-signal-converter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
import { Trace } from 'tsp-typescript-client/lib/models/trace';

export function convertSignalExperiment(signalExperiment: Experiment): Experiment {
const experiment: Experiment = {
name: signalExperiment.name,
UUID: signalExperiment.UUID,
indexingStatus: signalExperiment.indexingStatus,
end: BigInt(signalExperiment.end),
start: BigInt(signalExperiment.start),
nbEvents: signalExperiment.nbEvents,
traces: convertSignalTraces(signalExperiment)
};
return experiment;
}

export function convertSignalTraces(signalExperiment: Experiment): Trace[] {
const traces: Trace[] = [];

signalExperiment.traces.forEach(t => {
const trace: Trace = {
name: t.name,
UUID: t.UUID,
end: BigInt(t.end),
start: BigInt(t.start),
indexingStatus: t.indexingStatus,
nbEvents: t.nbEvents,
path: t.path
};
traces.push(trace);
});
return traces;
}

Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ import '../../style/trace-viewer.css';
import 'traceviewer-react-components/style/trace-explorer.css';
import '../../style/react-contextify.css';
import { ExperimentManager } from 'traceviewer-base/lib/experiment-manager';
import { convertSignalExperiment } from 'vscode-trace-webviews/src/common/vscode-signal-converter';
import JSONBigConfig from 'json-bigint';
const JSONBig = JSONBigConfig({
useNativeBigInt: true,
});

interface OpenedTracesAppState {
tspClientProvider: ITspClientProvider | undefined;
Expand Down Expand Up @@ -51,7 +56,7 @@ class TraceExplorerOpenedTraces extends React.Component<{}, OpenedTracesAppState
break;
case 'traceViewerTabActivated':
if (message.data) {
const experiment = message.data as Experiment;
const experiment = convertSignalExperiment(JSONBig.parse(message.data.wrapper));
signalManager().fireTraceViewerTabActivatedSignal(experiment);
}
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { VsCodeMessageManager } from '../../common/vscode-message-manager';
import '../../style/react-contextify.css';
import '../../style/trace-viewer.css';
import JSONBigConfig from 'json-bigint';
import { convertSignalExperiment } from 'vscode-trace-webviews/src/common/vscode-signal-converter';

const JSONBig = JSONBigConfig({
useNativeBigInt: true,
Expand Down Expand Up @@ -44,7 +45,7 @@ class TraceExplorerViewsWidget extends React.Component<{}, AvailableViewsAppStat
break;
case 'experimentSelected':
if (message.data) {
signalManager().fireExperimentSelectedSignal(JSONBig.parse(message.data));
signalManager().fireExperimentSelectedSignal(convertSignalExperiment(JSONBig.parse(message.data)));
}
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { TspClient } from 'tsp-typescript-client/lib/protocol/tsp-client';
import { VsCodeMessageManager } from '../common/vscode-message-manager';
import '../style/trace-viewer.css';
import JSONBigConfig from 'json-bigint';
import { convertSignalExperiment } from '../common/vscode-signal-converter';

const JSONBig = JSONBigConfig({
useNativeBigInt: true,
Expand Down Expand Up @@ -50,15 +51,14 @@ class App extends React.Component<{}, VscodeAppState> {
const message = event.data; // The JSON data our extension sent
switch (message.command) {
case 'set-experiment':
// FIXME: JSONBig.parse() create bigint if numbers are small
const experiment = JSONBig.parse(message.data);
this.doHandleExperimentSetSignal(experiment);
this.doHandleExperimentSetSignal(convertSignalExperiment(JSONBig.parse(message.data)));
break;
case 'set-tspClient':
this.setState({tspClient: new TspClient(message.data)});
break;
case 'add-output':
// FIXME: JSONBig.parse() create bigint if numbers are small
// Not an issue right now for output descriptors.
const descriptor = JSONBig.parse(message.data);
this.setState({outputs: [...this.state.outputs, descriptor] });
break;
Expand Down

0 comments on commit e27bf5e

Please # to comment.