Skip to content

Commit 93e5cec

Browse files
committed
Fix submitting new selection ranges from the Time Range Data View
Since commit d857eae where the vscode-messenger was introduced this feature has been broken. The request to update the selection range after submitting the new range from the Time Range Data view was not propagated to the trace viewer webview where the time axis and selection is updated. This PR fixes this. Note that this fix sends the selection range to the correct widget and handles the bigint values in the signal payload correctly. fixes #357 Signed-off-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
1 parent 71de391 commit 93e5cec

5 files changed

Lines changed: 64 additions & 29 deletions

File tree

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
import { TimeRange } from '../utils/time-range';
1+
import { ITimeRange, TimeRange } from '../utils/time-range';
2+
3+
import { createNormalizer } from 'tsp-typescript-client/lib/protocol/serialization';
4+
5+
export const TimeRangeUpdatePayload = createNormalizer<TimeRangeUpdatePayload>({
6+
timeRange: ITimeRange
7+
});
28

39
export interface TimeRangeUpdatePayload {
410
experimentUUID: string;
5-
timeRange?: TimeRange;
11+
timeRange?: ITimeRange;
612
}

local-libs/traceviewer-libs/base/src/utils/time-range.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
1+
import { createNormalizer } from 'tsp-typescript-client/lib/protocol/serialization';
2+
13
export interface TimeRangeString {
24
start: string;
35
end: string;
46
offset?: string;
57
}
68

7-
export class TimeRange {
8-
private start: bigint;
9-
private end: bigint;
10-
private offset: bigint | undefined;
9+
export const ITimeRange = createNormalizer<ITimeRange>({
10+
start: BigInt,
11+
end: BigInt,
12+
offset: BigInt
13+
});
14+
15+
export interface ITimeRange {
16+
start: bigint;
17+
end: bigint;
18+
offset: bigint | undefined;
19+
toString(): TimeRangeString;
20+
}
21+
22+
export class TimeRange implements ITimeRange {
23+
start: bigint;
24+
end: bigint;
25+
offset: bigint | undefined;
1126

1227
/**
1328
* Constructor.

local-libs/traceviewer-libs/react-components/src/components/trace-context-component.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -935,8 +935,8 @@ export class TraceContextComponent extends React.Component<TraceContextProps, Tr
935935
const { timeRange, experimentUUID } = payload;
936936
if (experimentUUID === this.props.experiment.UUID && timeRange) {
937937
this.unitController.selectionRange = {
938-
start: timeRange.getStart(),
939-
end: timeRange.getEnd()
938+
start: timeRange.start,
939+
end: timeRange.end
940940
};
941941
}
942942
};

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ import {
3636
getMarkerCategories,
3737
getMarkerSets,
3838
updateMarkerCategoryState,
39-
updateMarkerSetState
39+
updateMarkerSetState,
40+
requestSelectionRangeChange
4041
} from 'vscode-trace-common/lib/messages/vscode-messages';
4142
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
4243
import { MarkerSet } from 'tsp-typescript-client/lib/models/markerset';
@@ -421,7 +422,11 @@ export class TraceViewerPanel {
421422
}
422423

423424
protected doHandleRequestSelectionRangeChange(payload: TimeRangeUpdatePayload): void {
424-
this._messenger.sendNotification(experimentSelected, this._webviewParticipant, JSONBigUtils.stringify(payload));
425+
this._messenger.sendNotification(
426+
requestSelectionRangeChange,
427+
this._webviewParticipant,
428+
JSONBigUtils.stringify(payload)
429+
);
425430
}
426431
setExperiment(experiment: Experiment): void {
427432
this._experiment = experiment;

vscode-trace-webviews/src/trace-viewer/vscode-trace-viewer-container.tsx

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,36 @@ import { signalManager } from 'traceviewer-base/lib/signals/signal-manager';
1717
import { TimeRangeUpdatePayload } from 'traceviewer-base/lib/signals/time-range-data-signal-payloads';
1818
import { TraceContextComponent } from 'traceviewer-react-components/lib/components/trace-context-component';
1919
import 'traceviewer-react-components/style/trace-context-style.css';
20+
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
21+
import { MarkerSet } from 'tsp-typescript-client/lib/models/markerset';
22+
import { OutputDescriptor } from 'tsp-typescript-client/lib/models/output-descriptor';
23+
import { array } from 'tsp-typescript-client/lib/protocol/serialization';
24+
import { JSONBigUtils } from 'tsp-typescript-client/lib/utils/jsonbig-utils';
25+
import { TspClientProvider } from 'vscode-trace-common/lib/client/tsp-client-provider-impl';
2026
import {
21-
setTspClient,
22-
traceServerUrlChanged,
23-
experimentSelected,
24-
setExperiment,
2527
addOutput,
26-
outputDataChanged,
27-
setTheme,
28+
connectionStatus,
29+
contributeContextMenu,
30+
experimentSelected,
31+
getMarkerCategories,
32+
getMarkerSets,
2833
openOverview,
34+
outputDataChanged,
35+
redo,
36+
requestSelectionChange,
2937
resetZoom,
38+
setExperiment,
39+
setTheme,
40+
setTspClient,
41+
traceServerUrlChanged,
3042
undo,
31-
redo,
32-
updateZoom,
33-
getMarkerCategories,
34-
getMarkerSets,
3543
updateMarkerCategoryState,
3644
updateMarkerSetState,
37-
contributeContextMenu,
38-
connectionStatus
45+
updateZoom
3946
} from 'vscode-trace-common/lib/messages/vscode-messages';
40-
import { VsCodeMessageManager } from '../common/vscode-message-manager';
4147
import { messenger } from '.';
42-
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';
43-
import { MarkerSet } from 'tsp-typescript-client/lib/models/markerset';
44-
import { OutputDescriptor } from 'tsp-typescript-client/lib/models/output-descriptor';
45-
import { JSONBigUtils } from 'tsp-typescript-client/lib/utils/jsonbig-utils';
46-
import { TspClientProvider } from 'vscode-trace-common/lib/client/tsp-client-provider-impl';
48+
import { VsCodeMessageManager } from '../common/vscode-message-manager';
4749
import '../style/trace-viewer.css';
48-
import { array } from 'tsp-typescript-client/lib/protocol/serialization';
4950
interface VscodeAppState {
5051
experiment: Experiment | undefined;
5152
tspClientProvider: TspClientProvider | undefined;
@@ -213,6 +214,13 @@ class TraceViewerContainer extends React.Component<{}, VscodeAppState> {
213214
}
214215
};
215216

217+
private _onRequestSelectionChanged = (data: any): void => {
218+
if (data) {
219+
const payload = JSONBigUtils.parse(data, TimeRangeUpdatePayload);
220+
signalManager().emit('REQUEST_SELECTION_RANGE_CHANGE', payload);
221+
}
222+
};
223+
216224
private markerCategoriesMap = new Map<string, string[]>();
217225
private toolbarMarkerCategoriesMap = new Map<string, { categoryCount: number; toggleInd: boolean }>();
218226
private selectedMarkerCategoriesMap = new Map<string, string[]>();
@@ -248,6 +256,7 @@ class TraceViewerContainer extends React.Component<{}, VscodeAppState> {
248256
messenger.onNotification(updateMarkerSetState, this._onVscodeUpdateMarkerSetState);
249257
messenger.onNotification(contributeContextMenu, this._onVscodeUpdateContributeContextMenu);
250258
messenger.onNotification(connectionStatus, this._onVscodeConnectionStatus);
259+
messenger.onNotification(requestSelectionChange, this._onRequestSelectionChanged);
251260

252261
window.addEventListener('resize', this.onResize);
253262
this.onOutputRemoved = this.onOutputRemoved.bind(this);

0 commit comments

Comments
 (0)