Skip to content

Commit dbf7a3a

Browse files
author
github-action-benchmark
committed
add Benchmark Results (julia) benchmark result for 906fb8f
1 parent c4a4f89 commit dbf7a3a

File tree

2 files changed

+385
-0
lines changed

2 files changed

+385
-0
lines changed

benchmarks/data.js

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
window.BENCHMARK_DATA = {
2+
"lastUpdate": 1752924684891,
3+
"repoUrl": "https://github.com/QuantumEngineeredSystems/HarmonicBalance.jl",
4+
"entries": {
5+
"Benchmark Results": [
6+
{
7+
"commit": {
8+
"author": {
9+
"email": "[email protected]",
10+
"name": "Orjan Ameye",
11+
"username": "oameye"
12+
},
13+
"committer": {
14+
"email": "[email protected]",
15+
"name": "GitHub",
16+
"username": "web-flow"
17+
},
18+
"distinct": true,
19+
"id": "906fb8f04ce428d02e2d7eb7f4e711d0b0beff68",
20+
"message": "build: implement performance tracking workflow (#443)",
21+
"timestamp": "2025-07-19T13:11:51+02:00",
22+
"tree_id": "4a54aeb891a69ee69b867de3c74e18823a31e48b",
23+
"url": "https://github.com/QuantumEngineeredSystems/HarmonicBalance.jl/commit/906fb8f04ce428d02e2d7eb7f4e711d0b0beff68"
24+
},
25+
"date": 1752924675000,
26+
"tool": "julia",
27+
"benches": [
28+
{
29+
"name": "Construction/Krylov Equation/Order 2",
30+
"value": 3838069497,
31+
"unit": "ns",
32+
"extra": "gctime=272136990\nmemory=1534717320\nallocs=32235703\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
33+
},
34+
{
35+
"name": "Construction/Krylov Equation/Order 1",
36+
"value": 613229104,
37+
"unit": "ns",
38+
"extra": "gctime=0\nmemory=174362888\nallocs=4389646\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
39+
},
40+
{
41+
"name": "Construction/Problem/HomotopyContinuationProblem",
42+
"value": 32876915.5,
43+
"unit": "ns",
44+
"extra": "gctime=0\nmemory=8291904\nallocs=237541\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
45+
},
46+
{
47+
"name": "Construction/Harmonic Equation/One Frequency",
48+
"value": 182395390,
49+
"unit": "ns",
50+
"extra": "gctime=0\nmemory=53130080\nallocs=1250371\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
51+
},
52+
{
53+
"name": "Linear response/Rotating frame/Jacobian Response",
54+
"value": 387443,
55+
"unit": "ns",
56+
"extra": "gctime=0\nmemory=282112\nallocs=1687\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
57+
},
58+
{
59+
"name": "Linear response/Lab frame/Jacobian Response",
60+
"value": 2260130,
61+
"unit": "ns",
62+
"extra": "gctime=0\nmemory=1031184\nallocs=21215\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
63+
},
64+
{
65+
"name": "Steady states/Homotopy Problem/Polyhedral homotopy",
66+
"value": 461270444.5,
67+
"unit": "ns",
68+
"extra": "gctime=0\nmemory=84371472\nallocs=2240591\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
69+
},
70+
{
71+
"name": "Steady states/Homotopy Problem/Warm up method",
72+
"value": 126495985,
73+
"unit": "ns",
74+
"extra": "gctime=0\nmemory=38916768\nallocs=1065759\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
75+
},
76+
{
77+
"name": "Steady states/Homotopy Problem/Total degree homotopy",
78+
"value": 288850001,
79+
"unit": "ns",
80+
"extra": "gctime=0\nmemory=53801176\nallocs=1436991\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
81+
},
82+
{
83+
"name": "Sorting/One dimensional/Hilbert sorting",
84+
"value": 150403,
85+
"unit": "ns",
86+
"extra": "gctime=0\nmemory=211344\nallocs=3124\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
87+
},
88+
{
89+
"name": "Sorting/One dimensional/Nearest-neighbor sorting",
90+
"value": 151204.5,
91+
"unit": "ns",
92+
"extra": "gctime=0\nmemory=211344\nallocs=3124\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
93+
},
94+
{
95+
"name": "Classification/One Dimensional/Default classifications",
96+
"value": 2026912,
97+
"unit": "ns",
98+
"extra": "gctime=0\nmemory=1125808\nallocs=18340\nparams={\"gctrial\":true,\"time_tolerance\":0.05,\"evals_set\":false,\"samples\":10000,\"evals\":1,\"gcsample\":false,\"seconds\":10,\"overhead\":0,\"memory_tolerance\":0.01}"
99+
}
100+
]
101+
}
102+
]
103+
}
104+
}

benchmarks/index.html

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes" />
6+
<style>
7+
html {
8+
font-family: BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
9+
-webkit-font-smoothing: antialiased;
10+
background-color: #fff;
11+
font-size: 16px;
12+
}
13+
body {
14+
color: #4a4a4a;
15+
margin: 8px;
16+
font-size: 1em;
17+
font-weight: 400;
18+
}
19+
header {
20+
margin-bottom: 8px;
21+
display: flex;
22+
flex-direction: column;
23+
}
24+
main {
25+
width: 100%;
26+
display: flex;
27+
flex-direction: column;
28+
}
29+
a {
30+
color: #3273dc;
31+
cursor: pointer;
32+
text-decoration: none;
33+
}
34+
a:hover {
35+
color: #000;
36+
}
37+
button {
38+
color: #fff;
39+
background-color: #3298dc;
40+
border-color: transparent;
41+
cursor: pointer;
42+
text-align: center;
43+
}
44+
button:hover {
45+
background-color: #2793da;
46+
flex: none;
47+
}
48+
.spacer {
49+
flex: auto;
50+
}
51+
.small {
52+
font-size: 0.75rem;
53+
}
54+
footer {
55+
margin-top: 16px;
56+
display: flex;
57+
align-items: center;
58+
}
59+
.header-label {
60+
margin-right: 4px;
61+
}
62+
.benchmark-set {
63+
margin: 8px 0;
64+
width: 100%;
65+
display: flex;
66+
flex-direction: column;
67+
}
68+
.benchmark-title {
69+
font-size: 3rem;
70+
font-weight: 600;
71+
word-break: break-word;
72+
text-align: center;
73+
}
74+
.benchmark-graphs {
75+
display: flex;
76+
flex-direction: row;
77+
justify-content: space-around;
78+
align-items: center;
79+
flex-wrap: wrap;
80+
width: 100%;
81+
}
82+
.benchmark-chart {
83+
max-width: 1000px;
84+
}
85+
</style>
86+
<title>Benchmarks</title>
87+
</head>
88+
89+
<body>
90+
<header id="header">
91+
<div class="header-item">
92+
<strong class="header-label">Last Update:</strong>
93+
<span id="last-update"></span>
94+
</div>
95+
<div class="header-item">
96+
<strong class="header-label">Repository:</strong>
97+
<a id="repository-link" rel="noopener"></a>
98+
</div>
99+
</header>
100+
<main id="main"></main>
101+
<footer>
102+
<button id="dl-button">Download data as JSON</button>
103+
<div class="spacer"></div>
104+
<div class="small">Powered by <a rel="noopener" href="https://github.com/marketplace/actions/continuous-benchmark">github-action-benchmark</a></div>
105+
</footer>
106+
107+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.min.js"></script>
108+
<script src="data.js"></script>
109+
<script id="main-script">
110+
'use strict';
111+
(function() {
112+
// Colors from https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
113+
const toolColors = {
114+
cargo: '#dea584',
115+
go: '#00add8',
116+
benchmarkjs: '#f1e05a',
117+
benchmarkluau: '#000080',
118+
pytest: '#3572a5',
119+
googlecpp: '#f34b7d',
120+
catch2: '#f34b7d',
121+
julia: '#a270ba',
122+
jmh: '#b07219',
123+
benchmarkdotnet: '#178600',
124+
customBiggerIsBetter: '#38ff38',
125+
customSmallerIsBetter: '#ff3838',
126+
_: '#333333'
127+
};
128+
129+
function init() {
130+
function collectBenchesPerTestCase(entries) {
131+
const map = new Map();
132+
for (const entry of entries) {
133+
const {commit, date, tool, benches} = entry;
134+
for (const bench of benches) {
135+
const result = { commit, date, tool, bench };
136+
const arr = map.get(bench.name);
137+
if (arr === undefined) {
138+
map.set(bench.name, [result]);
139+
} else {
140+
arr.push(result);
141+
}
142+
}
143+
}
144+
return map;
145+
}
146+
147+
const data = window.BENCHMARK_DATA;
148+
149+
// Render header
150+
document.getElementById('last-update').textContent = new Date(data.lastUpdate).toString();
151+
const repoLink = document.getElementById('repository-link');
152+
repoLink.href = data.repoUrl;
153+
repoLink.textContent = data.repoUrl;
154+
155+
// Render footer
156+
document.getElementById('dl-button').onclick = () => {
157+
const dataUrl = 'data:,' + JSON.stringify(data, null, 2);
158+
const a = document.createElement('a');
159+
a.href = dataUrl;
160+
a.download = 'benchmark_data.json';
161+
a.click();
162+
};
163+
164+
// Prepare data points for charts
165+
return Object.keys(data.entries).map(name => ({
166+
name,
167+
dataSet: collectBenchesPerTestCase(data.entries[name]),
168+
}));
169+
}
170+
171+
function renderAllChars(dataSets) {
172+
173+
function renderGraph(parent, name, dataset) {
174+
const canvas = document.createElement('canvas');
175+
canvas.className = 'benchmark-chart';
176+
parent.appendChild(canvas);
177+
178+
const color = toolColors[dataset.length > 0 ? dataset[0].tool : '_'];
179+
const data = {
180+
labels: dataset.map(d => d.commit.id.slice(0, 7)),
181+
datasets: [
182+
{
183+
label: name,
184+
data: dataset.map(d => d.bench.value),
185+
borderColor: color,
186+
backgroundColor: color + '60', // Add alpha for #rrggbbaa
187+
}
188+
],
189+
};
190+
const options = {
191+
scales: {
192+
xAxes: [
193+
{
194+
scaleLabel: {
195+
display: true,
196+
labelString: 'commit',
197+
},
198+
}
199+
],
200+
yAxes: [
201+
{
202+
scaleLabel: {
203+
display: true,
204+
labelString: dataset.length > 0 ? dataset[0].bench.unit : '',
205+
},
206+
ticks: {
207+
beginAtZero: true,
208+
}
209+
}
210+
],
211+
},
212+
tooltips: {
213+
callbacks: {
214+
afterTitle: items => {
215+
const {index} = items[0];
216+
const data = dataset[index];
217+
return '\n' + data.commit.message + '\n\n' + data.commit.timestamp + ' committed by @' + data.commit.committer.username + '\n';
218+
},
219+
label: item => {
220+
let label = item.value;
221+
const { range, unit } = dataset[item.index].bench;
222+
label += ' ' + unit;
223+
if (range) {
224+
label += ' (' + range + ')';
225+
}
226+
return label;
227+
},
228+
afterLabel: item => {
229+
const { extra } = dataset[item.index].bench;
230+
return extra ? '\n' + extra : '';
231+
}
232+
}
233+
},
234+
onClick: (_mouseEvent, activeElems) => {
235+
if (activeElems.length === 0) {
236+
return;
237+
}
238+
// XXX: Undocumented. How can we know the index?
239+
const index = activeElems[0]._index;
240+
const url = dataset[index].commit.url;
241+
window.open(url, '_blank');
242+
},
243+
};
244+
245+
new Chart(canvas, {
246+
type: 'line',
247+
data,
248+
options,
249+
});
250+
}
251+
252+
function renderBenchSet(name, benchSet, main) {
253+
const setElem = document.createElement('div');
254+
setElem.className = 'benchmark-set';
255+
main.appendChild(setElem);
256+
257+
const nameElem = document.createElement('h1');
258+
nameElem.className = 'benchmark-title';
259+
nameElem.textContent = name;
260+
setElem.appendChild(nameElem);
261+
262+
const graphsElem = document.createElement('div');
263+
graphsElem.className = 'benchmark-graphs';
264+
setElem.appendChild(graphsElem);
265+
266+
for (const [benchName, benches] of benchSet.entries()) {
267+
renderGraph(graphsElem, benchName, benches)
268+
}
269+
}
270+
271+
const main = document.getElementById('main');
272+
for (const {name, dataSet} of dataSets) {
273+
renderBenchSet(name, dataSet, main);
274+
}
275+
}
276+
277+
renderAllChars(init()); // Start
278+
})();
279+
</script>
280+
</body>
281+
</html>

0 commit comments

Comments
 (0)