Skip to content

Commit 8552b57

Browse files
Show options for JS engines (#165)
- Hide V8 and SM by default
1 parent c239b63 commit 8552b57

File tree

3 files changed

+95
-46
lines changed

3 files changed

+95
-46
lines changed

src/components/benchmarks/index.tsx

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,51 @@ ChartJS.register(
2525
Tooltip,
2626
Legend,
2727
Colors,
28-
BarElement,
28+
BarElement
2929
);
3030

31-
export function BenchmarkGraphs() {
31+
interface BenchmarkGraphsProps {
32+
selectedEngines: string[];
33+
}
34+
35+
const ChartOptions = {
36+
plugins: {
37+
colors: {
38+
forceOverride: true,
39+
},
40+
},
41+
};
42+
43+
export const BenchmarkGraphs: React.FC<BenchmarkGraphsProps> = ({
44+
selectedEngines,
45+
}) => {
46+
// Control the state of which engines are displayed using a Set
47+
3248
const [data, setData] = React.useState([]);
3349
const colorMode = useColorMode();
3450
ChartJS.defaults.color = colorMode.colorMode === "light" ? "#666" : "white";
3551

3652
React.useEffect(() => {
3753
Promise.all([
38-
buildChartFromBenchmark("Crypto"),
39-
buildChartFromBenchmark("DeltaBlue"),
40-
buildChartFromBenchmark("EarleyBoyer"),
41-
buildChartFromBenchmark("NavierStokes"),
42-
buildChartFromBenchmark("RayTrace"),
43-
buildChartFromBenchmark("RegExp"),
44-
buildChartFromBenchmark("Richards"),
45-
buildChartFromBenchmark("Splay"),
46-
buildChartFromBenchmark("score"),
54+
buildChartFromBenchmark("Crypto", selectedEngines),
55+
buildChartFromBenchmark("DeltaBlue", selectedEngines),
56+
buildChartFromBenchmark("EarleyBoyer", selectedEngines),
57+
buildChartFromBenchmark("NavierStokes", selectedEngines),
58+
buildChartFromBenchmark("RayTrace", selectedEngines),
59+
buildChartFromBenchmark("RegExp", selectedEngines),
60+
buildChartFromBenchmark("Richards", selectedEngines),
61+
buildChartFromBenchmark("Splay", selectedEngines),
62+
buildChartFromBenchmark("score", selectedEngines),
4763
]).then((charts) => setData(charts));
48-
}, [colorMode.colorMode]);
64+
}, [selectedEngines]);
4965

5066
return data && data.map((chart) => chart);
51-
}
67+
};
5268

53-
const buildChartFromBenchmark = async (name: string) => {
69+
const buildChartFromBenchmark = async (name: string, engines: string[]) => {
5470
const data = await fetchData(
5571
`https://raw.githubusercontent.com/boa-dev/data/main/bench/results/${name}.json`,
72+
engines
5673
);
5774

5875
const barData = getBarChartData(data);
@@ -64,50 +81,33 @@ const buildChartFromBenchmark = async (name: string) => {
6481
</div>
6582
<div className={styles["cards-wrap"]}>
6683
<div className={`card ${styles["benchmark-card"]}`}>
67-
<Line data={data}></Line>
84+
<Line data={data} options={ChartOptions}></Line>
6885
</div>
6986
<div className={`card ${styles["benchmark-card"]}`}>
70-
<Bar data={barData}></Bar>
87+
<Bar data={barData} options={ChartOptions}></Bar>
7188
</div>
7289
</div>
7390
</div>
7491
);
7592
};
7693

77-
const fetchData = async (url: string) => {
94+
const fetchData = async (url: string, engines: string[]) => {
7895
const response = await fetch(url);
7996
const data = await response.json();
97+
// Add the dataset if the engine is enabled
8098
return {
8199
labels: data.labels.map((epoch: number) =>
82-
new Date(epoch).toLocaleDateString(),
100+
new Date(epoch).toLocaleDateString()
83101
),
84-
datasets: [
85-
{
86-
label: "boa",
87-
data: data.results["boa"],
88-
fill: false,
89-
},
90-
{
91-
label: "v8-jitless",
92-
data: data.results["v8-jitless"],
93-
fill: false,
94-
},
95-
{
96-
label: "libjs",
97-
data: data.results["libjs"],
98-
fill: false,
99-
},
100-
{
101-
label: "duktape",
102-
data: data.results["duktape"],
103-
fill: false,
104-
},
105-
{
106-
label: "quickjs",
107-
data: data.results["quickjs"],
108-
fill: false,
109-
},
110-
],
102+
datasets: Object.keys(data.results)
103+
.filter((engine) => engines.includes(engine))
104+
.map((engine) => {
105+
return {
106+
label: engine,
107+
data: data.results[engine],
108+
fill: false,
109+
};
110+
}),
111111
};
112112
};
113113

src/pages/benchmarks/index.tsx

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,34 @@ import Link from "@docusaurus/Link";
22
import { BenchmarkGraphs } from "@site/src/components/benchmarks";
33
import Heading from "@theme/Heading";
44
import Layout from "@theme/Layout";
5+
import { useState } from "react";
56
import styles from "./styles.module.css";
67

8+
const engines = [
9+
"boa",
10+
"v8-jitless",
11+
"sm-jitless",
12+
"libjs",
13+
"duktape",
14+
"quickjs",
15+
];
16+
717
export default function Benchmarks() {
18+
const [selectedEngines, setSelectedEngines] = useState<string[]>([
19+
"boa",
20+
"libjs",
21+
"duktape",
22+
"quickjs",
23+
]);
24+
25+
const handleCheckboxChange = (engine: string) => {
26+
if (selectedEngines.includes(engine)) {
27+
setSelectedEngines(selectedEngines.filter((e) => e !== engine));
28+
} else {
29+
setSelectedEngines([...selectedEngines, engine]);
30+
}
31+
};
32+
833
return (
934
<Layout title="Benchmarks" description="Boa Benchmarks Page">
1035
<div className={styles.container}>
@@ -19,7 +44,22 @@ export default function Benchmarks() {
1944
actions.
2045
</p>
2146
<p>The higher the score the better.</p>
22-
<BenchmarkGraphs />
47+
<div className={styles.benchmarkControls}>
48+
{engines.map((engine) => (
49+
<div key={engine} className={styles.benchmarkLabelWrap}>
50+
<label>
51+
<input
52+
type="checkbox"
53+
value={engine}
54+
checked={selectedEngines.includes(engine)}
55+
onChange={() => handleCheckboxChange(engine)}
56+
/>
57+
{engine}
58+
</label>
59+
</div>
60+
))}
61+
</div>
62+
<BenchmarkGraphs selectedEngines={selectedEngines} />
2363
</div>
2464
</Layout>
2565
);

src/pages/benchmarks/styles.module.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,12 @@
22
width: 90vw;
33
align-self: center;
44
}
5+
6+
.benchmarkControls {
7+
display: flex;
8+
margin-bottom: 1rem;
9+
}
10+
11+
.benchmarkLabelWrap {
12+
margin-right: 1rem;
13+
}

0 commit comments

Comments
 (0)