Skip to content
Open
Changes from all 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
91 changes: 80 additions & 11 deletions bench/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,79 @@
});
}

/**
* Parses bench/*/data.js without eval. Expected shape is
* window.BENCHMARK_DATA = <JSON object> (github-action-benchmark output).
* Uses brace depth with JSON string awareness so commit messages with { } do not break parsing.
*/
function parseBenchmarkDataJs(scriptText) {
const prefix = /^\s*window\.BENCHMARK_DATA\s*=\s*/;
const m = scriptText.match(prefix);
if (!m) {
throw new Error("unexpected data.js format (expected window.BENCHMARK_DATA assignment)");
}
let i = m[0].length;
while (i < scriptText.length && /\s/.test(scriptText[i])) {
i++;
}
if (scriptText[i] !== "{") {
throw new Error("unexpected data.js format (expected JSON object)");
}
let depth = 0;
let inString = false;
let escape = false;
const start = i;
for (; i < scriptText.length; i++) {
const c = scriptText[i];
if (inString) {
if (escape) {
escape = false;
continue;
}
if (c === "\\") {
escape = true;
continue;
}
if (c === '"') {
inString = false;
}
continue;
}
if (c === '"') {
inString = true;
continue;
}
if (c === "{") {
depth++;
} else if (c === "}") {
depth--;
if (depth === 0) {
return JSON.parse(scriptText.slice(start, i + 1));
}
}
}
throw new Error("invalid benchmark data (unclosed JSON object)");
}

function showLoadError(branch, commit) {
const main = document.getElementById("main");
main.textContent = "";
const wrap = document.createElement("div");
wrap.style.color = "red";
wrap.appendChild(
document.createTextNode("Could not load benchmark data for branch: ")
);
const b = document.createElement("b");
b.textContent = branch;
wrap.appendChild(b);
if (commit) {
wrap.appendChild(
document.createTextNode(" at commit " + commit.substring(0, 7))
);
}
main.appendChild(wrap);
}

// Function to load data.js from a specific commit
async function loadDataFromCommit(branch, commit, isInitialLoad = false) {
try {
Expand All @@ -497,7 +570,7 @@
}; color: ${
isDark ? "#e0e0e0" : "#4a4a4a"
}; padding: 20px; border-radius: 5px; box-shadow: 0 2px 10px rgba(0,0,0,0.3); z-index: 1000;`;
loadingDiv.innerHTML = "Loading benchmark data...";
loadingDiv.textContent = "Loading benchmark data...";
document.body.appendChild(loadingDiv);
}

Expand All @@ -507,8 +580,7 @@

const scriptText = await response.text();

// Execute the script
eval(scriptText);
window.BENCHMARK_DATA = parseBenchmarkDataJs(scriptText);

// Update current position tracking
if (!isInitialLoad) {
Expand All @@ -520,9 +592,10 @@
}

if (isInitialLoad) {
// Only run main script after data is loaded
document.getElementById("main-script").removeAttribute("type");
eval(document.getElementById("main-script").textContent);
const mainScriptEl = document.getElementById("main-script");
const injected = document.createElement("script");
injected.textContent = mainScriptEl.textContent;
document.body.appendChild(injected);

// Setup pagination after data loads
setupPagination();
Expand All @@ -537,11 +610,7 @@
}
}
} catch (error) {
document.getElementById(
"main"
).innerHTML = `<div style='color:red'>Could not load benchmark data for branch: <b>${branch}</b>${
commit ? " at commit " + commit.substring(0, 7) : ""
}</div>`;
showLoadError(branch, commit);
}
}

Expand Down