1import { useMemo } from "react";
2import { Algorithm, BenchmarkResult } from "../types";
4export function useBenchmarkChartData(
5 results: BenchmarkResult[],
6 algorithms: Algorithm[],
7 selectedDataset?: string | null,
8 selectedAlgorithm?: string | null,
9) {
10 return useMemo(() => {
11 if (selectedDataset) {
12 return results
13 .filter((row) => row.dataset === selectedDataset)
14 .map((row) => {
15 const algorithm = algorithms.find((a) => a.name === row.algorithm);
16 return {
17 algorithmOrDataset: row.algorithm,
18 compression_ratio: row.compression_ratio,
19 reference_compression_ratio: null,
20 encode_speed: row.encode_mb_per_sec,
21 decode_speed: row.decode_mb_per_sec,
22 rmse: row.rmse,
23 max_error: row.max_error,
24 tags: algorithm?.tags || [],
25 };
26 });
27 } else if (selectedAlgorithm) {
28 return results
29 .filter((row) => row.algorithm === selectedAlgorithm)
30 .map((row) => ({
31 algorithmOrDataset: row.dataset,
32 compression_ratio: row.compression_ratio,
33 reference_compression_ratio: Math.max(
34 ...results
35 .filter((r) => r.dataset === row.dataset)
36 .map((r) => r.compression_ratio),
37 ),
38 encode_speed: row.encode_mb_per_sec,
39 decode_speed: row.decode_mb_per_sec,
40 rmse: row.rmse,
41 max_error: row.max_error,
42 tags: [],
43 }));
44 }
45 return [];
46 }, [results, algorithms, selectedDataset, selectedAlgorithm]);
47}