Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
4 changes: 2 additions & 2 deletions extensions/ql-vscode/src/common/interface-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -420,8 +420,8 @@ export type ToComparePerformanceViewMessage = SetPerformanceComparisonQueries;

export interface SetPerformanceComparisonQueries {
readonly t: "setPerformanceComparison";
readonly from: PerformanceComparisonDataFromLog;
readonly to: PerformanceComparisonDataFromLog;
readonly from: { name: string; data: PerformanceComparisonDataFromLog };
readonly to: { name: string; data: PerformanceComparisonDataFromLog };
readonly comparison: boolean;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { PerformanceOverviewScanner } from "../log-insights/performance-comparis
import type { ResultsView } from "../local-queries";
import { readJsonlFile } from "../common/jsonl-reader";
import type { SummaryEvent } from "../log-insights/log-summary";
import type { CompletedLocalQueryInfo } from "../query-results";

export class ComparePerformanceView extends AbstractWebview<
ToComparePerformanceViewMessage,
Expand All @@ -33,7 +34,35 @@ export class ComparePerformanceView extends AbstractWebview<
super(app);
}

async showResults(fromJsonLog: string, toJsonLog: string) {
async showResults(
from: CompletedLocalQueryInfo,
to: CompletedLocalQueryInfo | undefined,
) {
if (to === undefined) {
// For single-run comparisons, the performance viewer considers the 'from' side to be missing.
return this.showResultsAux(undefined, from);
} else {
return this.showResultsAux(from, to);
}
}

private async showResultsAux(
from: CompletedLocalQueryInfo | undefined,
to: CompletedLocalQueryInfo,
) {
const fromJsonLog =
from === undefined ? "" : from?.evaluatorLogPaths?.jsonSummary;
const toJsonLog = to?.evaluatorLogPaths?.jsonSummary;

if (fromJsonLog === undefined || toJsonLog === undefined) {
return extLogger.showWarningMessage(
`Cannot compare performance as the structured logs are missing. Did they queries complete normally?`,
);
}
await extLogger.log(
`Comparing performance of ${from?.getQueryName() ?? "baseline"} and ${to?.getQueryName()}`,
);

const panel = await this.getPanel();
panel.reveal(undefined, false);

Expand Down Expand Up @@ -75,10 +104,14 @@ export class ComparePerformanceView extends AbstractWebview<
scanLogWithProgress(toJsonLog, fromJsonLog === "" ? "1/1" : "2/2"),
]);

const fromName =
from === undefined ? "" : this.labelProvider.getLabel(from);
const toName = to === undefined ? "" : this.labelProvider.getLabel(to);

await this.postMessage({
t: "setPerformanceComparison",
from: fromPerf.getData(),
to: toPerf.getData(),
from: { name: fromName, data: fromPerf.getData() },
to: { name: toName, data: toPerf.getData() },
comparison: fromJsonLog !== "",
});
}
Expand Down
18 changes: 1 addition & 17 deletions extensions/ql-vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1226,23 +1226,7 @@ async function showPerformanceComparison(
from: CompletedLocalQueryInfo,
to: CompletedLocalQueryInfo | undefined,
): Promise<void> {
let fromLog = from.evaluatorLogPaths?.jsonSummary;
let toLog = to?.evaluatorLogPaths?.jsonSummary;

if (to === undefined) {
toLog = fromLog;
fromLog = "";
}
if (fromLog === undefined || toLog === undefined) {
return extLogger.showWarningMessage(
`Cannot compare performance as the structured logs are missing. Did they queries complete normally?`,
);
}
await extLogger.log(
`Comparing performance of ${from.getQueryName()} and ${to?.getQueryName() ?? "baseline"}`,
);

await view.showResults(fromLog, toLog);
await view.showResults(from, to);
}

function addUnhandledRejectionListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -552,8 +552,8 @@ function ComparePerformanceWithData(props: {

const { from, to } = useMemo(
() => ({
from: new ComparisonDataset(data.from),
to: new ComparisonDataset(data.to),
from: new ComparisonDataset(data.from.data),
to: new ComparisonDataset(data.to.data),
}),
[data],
);
Expand Down Expand Up @@ -695,6 +695,13 @@ function ComparePerformanceWithData(props: {
return (
<>
<ViewTitle>Performance comparison</ViewTitle>
<div>
{comparison ? "Comparing query runs" : "Showing query run"}:
<ul>
{comparison && <li>{data.from.name}</li>}
<li>{data.to.name}</li>
</ul>
</div>
{comparison && hasCacheHitMismatch.current && (
<label>
<input
Expand Down
Loading