Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ import { ExperimentTimeRangeData } from '../../trace-explorer/trace-explorer-tim
import { Experiment } from 'tsp-typescript-client/lib/models/experiment';

export class TimeRangeDataMap {
private _experimentDataMap: Map<string, ExperimentTimeRangeData>;
private _activeData?: ExperimentTimeRangeData;
private static _experimentDataMap: Map<string, ExperimentTimeRangeData> = new Map<
string,
ExperimentTimeRangeData
>();
private static _activeData?: ExperimentTimeRangeData;
constructor() {
this._experimentDataMap = new Map<string, ExperimentTimeRangeData>();
// Static class pattern: no instance initialization required
}

public updateViewRange = (payload: TimeRangeUpdatePayload): void => {
public static updateViewRange = (payload: TimeRangeUpdatePayload): void => {
const { experimentUUID: UUID, timeRange } = payload;

const update = {
Expand All @@ -20,7 +23,7 @@ export class TimeRangeDataMap {
this.updateExperimentTimeRangeData(update);
};

public updateSelectionRange = (payload: TimeRangeUpdatePayload): void => {
public static updateSelectionRange = (payload: TimeRangeUpdatePayload): void => {
const { experimentUUID: UUID, timeRange } = payload;

const update = {
Expand All @@ -31,7 +34,7 @@ export class TimeRangeDataMap {
this.updateExperimentTimeRangeData(update);
};

public updateAbsoluteRange = (experiment: Experiment): void => {
public static updateAbsoluteRange = (experiment: Experiment): void => {
if (!experiment) {
return;
}
Expand All @@ -54,7 +57,7 @@ export class TimeRangeDataMap {
* you only input the data to change and the existing values persist.
* @param data Partial data of Experiment Time Range Data.
*/
private updateExperimentTimeRangeData = (data: ExperimentTimeRangeData): void => {
private static updateExperimentTimeRangeData = (data: ExperimentTimeRangeData): void => {
const map = this._experimentDataMap;
const id = data.UUID;
const existingData = map.get(id) || {};
Expand All @@ -70,32 +73,32 @@ export class TimeRangeDataMap {
}
};

public setActiveExperiment(data?: ExperimentTimeRangeData): void {
public static setActiveExperiment(data?: ExperimentTimeRangeData): void {
this._activeData = data;
}

public delete = (experiment: Experiment | string): void => {
public static delete = (experiment: Experiment | string): void => {
const id = typeof experiment === 'string' ? experiment : experiment.UUID;
this._experimentDataMap.delete(id);
};

public get(UUID: string): ExperimentTimeRangeData | undefined {
public static get(UUID: string): ExperimentTimeRangeData | undefined {
return this._experimentDataMap.get(UUID);
}

public set(data: ExperimentTimeRangeData): void {
public static set(data: ExperimentTimeRangeData): void {
this._experimentDataMap.set(data.UUID, data);
}

public clear(): void {
public static clear(): void {
this._experimentDataMap.clear();
}

get activeData(): ExperimentTimeRangeData | undefined {
public static get activeData(): ExperimentTimeRangeData | undefined {
return this._activeData;
}

get experimentDataMap(): Map<string, ExperimentTimeRangeData> {
public static get experimentDataMap(): Map<string, ExperimentTimeRangeData> {
return this._experimentDataMap;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,8 @@ export class ReactTimeRangeDataWidget extends React.Component<
ReactTimeRangeDataWidgetProps,
ReactTimeRangeDataWidgetState
> {
private experimentDataMap: TimeRangeDataMap;

constructor(props: ReactTimeRangeDataWidgetProps) {
super(props);
this.experimentDataMap = new TimeRangeDataMap();
this.state = {
inputting: false,
userInputSelectionStartIsValid: true,
Expand Down Expand Up @@ -65,17 +62,17 @@ export class ReactTimeRangeDataWidget extends React.Component<
};

private onViewRangeUpdated = (payload: TimeRangeUpdatePayload): void => {
this.experimentDataMap.updateViewRange(payload);
TimeRangeDataMap.updateViewRange(payload);
this.renderIfActive();
};

private onSelectionRangeUpdated = (payload: TimeRangeUpdatePayload): void => {
this.experimentDataMap.updateSelectionRange(payload);
TimeRangeDataMap.updateSelectionRange(payload);
this.renderIfActive();
};

private onAbsoluteRangeUpdate = (experiment: Experiment): void => {
this.experimentDataMap.updateAbsoluteRange(experiment);
TimeRangeDataMap.updateAbsoluteRange(experiment);
this.renderIfActive();
};

Expand All @@ -85,36 +82,44 @@ export class ReactTimeRangeDataWidget extends React.Component<
};

private onExperimentSelected = (experiment: Experiment | undefined): void => {
let newActiveData;
let newActiveData: ExperimentTimeRangeData | undefined;
if (experiment) {
// TODO - consider changing this logic?
// Update absolute range first so the entry exists/merges
this.onAbsoluteRangeUpdate(experiment);
newActiveData = this.experimentDataMap.get(experiment.UUID);
newActiveData = TimeRangeDataMap.get(experiment.UUID);
}
this.setActiveExperiment(newActiveData);
};

private onExperimentClosed = (experiment: Experiment | string): void => {
this.experimentDataMap.delete(experiment);
const id = typeof experiment === 'string' ? experiment : experiment.UUID;
TimeRangeDataMap.delete(id);
// If we just closed the active one, clear local state, too
if (this.state.activeData?.UUID === id) {
this.setActiveExperiment(undefined);
}
};

private setActiveExperiment = (timeData?: ExperimentTimeRangeData): void => {
this.experimentDataMap.setActiveExperiment(timeData);
this.setState({ activeData: timeData ? this.experimentDataMap.get(timeData.UUID) : undefined });
TimeRangeDataMap.setActiveExperiment(timeData);
this.setState({
activeData: timeData ? TimeRangeDataMap.get(timeData.UUID) : undefined
});
};

private renderIfActive(): void {
const { state, experimentDataMap } = this;
if (state.activeData?.UUID === experimentDataMap.activeData?.UUID) {
const activeData = state.activeData ? experimentDataMap.get(state.activeData.UUID) : undefined;
this.setState({ activeData });
const { state } = this;
const globalActive = TimeRangeDataMap.activeData;
if (state.activeData?.UUID === globalActive?.UUID) {
const fresh = state.activeData ? TimeRangeDataMap.get(state.activeData.UUID) : undefined;
this.setState({ activeData: fresh });
}
}

public restoreData = (mapArray: Array<ExperimentTimeRangeData>, activeData: ExperimentTimeRangeData): void => {
this.experimentDataMap.clear();
TimeRangeDataMap.clear();
for (const experimentData of mapArray) {
this.experimentDataMap.set(experimentData);
TimeRangeDataMap.set(experimentData);
}
this.setActiveExperiment(activeData);
};
Expand Down
5 changes: 5 additions & 0 deletions vscode-trace-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,10 @@
"title": "Trace Viewer Keyboard and Mouse Shortcuts",
"icon": "$(info)"
},
{
"command": "traceViewer.exportCsvFromSelectionRange",
"title": "Export CSV From Selection Range"
},
{
"command": "serverStatus.started",
"title": "Trace Server: started"
Expand Down Expand Up @@ -334,6 +338,7 @@
"terser": "4.8.1",
"traceviewer-base": "0.10.0",
"traceviewer-react-components": "0.10.0",
"tsp-typescript-client": "^0.9.0",
"vscode-messenger": "^0.5.0",
"vscode-trace-common": "0.7.0"
},
Expand Down
Loading
Loading