compare-perf: Add support for sorting options

Adds a dropdown with (at present) two options: sorting by delta and
sorting by absolute delta.
This commit is contained in:
Taus
2024-11-13 13:45:02 +00:00
committed by Asger F
parent 96aa770e85
commit aaf23eae72

View File

@@ -1,3 +1,4 @@
import type { ChangeEvent } from "react";
import { useMemo, useState, Fragment } from "react"; import { useMemo, useState, Fragment } from "react";
import type { import type {
SetPerformanceComparisonQueries, SetPerformanceComparisonQueries,
@@ -184,6 +185,8 @@ const PipelineStepTR = styled.tr`
} }
`; `;
const SortOrderDropdown = styled.select``;
interface PipelineStepProps { interface PipelineStepProps {
before: number | undefined; before: number | undefined;
after: number | undefined; after: number | undefined;
@@ -253,6 +256,20 @@ function HighLevelStats(props: HighLevelStatsProps) {
); );
} }
type TRow = {
name: string;
before: PredicateInfo;
after: PredicateInfo;
diff: number;
};
function getSortOrder(sortOrder: "delta" | "absDelta") {
if (sortOrder === "absDelta") {
return orderBy((row: TRow) => -Math.abs(row.diff));
}
return orderBy((row: TRow) => row.diff);
}
function Chevron({ expanded }: { expanded: boolean }) { function Chevron({ expanded }: { expanded: boolean }) {
return <Codicon name={expanded ? "chevron-down" : "chevron-right"} />; return <Codicon name={expanded ? "chevron-down" : "chevron-right"} />;
} }
@@ -296,6 +313,8 @@ export function ComparePerformance(_: Record<string, never>) {
const [hideCacheHits, setHideCacheHits] = useState(false); const [hideCacheHits, setHideCacheHits] = useState(false);
const [sortOrder, setSortOrder] = useState<"delta" | "absDelta">("absDelta");
if (!datasets) { if (!datasets) {
return <div>Loading performance comparison...</div>; return <div>Loading performance comparison...</div>;
} }
@@ -329,7 +348,7 @@ export function ComparePerformance(_: Record<string, never>) {
return { name, before, after, diff }; return { name, before, after, diff };
}) })
.filter((x) => !!x) .filter((x) => !!x)
.sort(orderBy((row) => row.diff)); .sort(getSortOrder(sortOrder));
let totalBefore = 0; let totalBefore = 0;
let totalAfter = 0; let totalAfter = 0;
@@ -363,6 +382,15 @@ export function ComparePerformance(_: Record<string, never>) {
</label> </label>
</WarningBox> </WarningBox>
)} )}
<SortOrderDropdown
onChange={(e: ChangeEvent<HTMLSelectElement>) =>
setSortOrder(e.target.value as "delta" | "absDelta")
}
value={sortOrder}
>
<option value="delta">Delta</option>
<option value="absDelta">Absolute delta</option>
</SortOrderDropdown>
<Table> <Table>
<thead> <thead>
<tr> <tr>