Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix bench-deploy.yml action - #44

Draft
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy
Draft

Fix bench-deploy.yml action#44
samuelburnham wants to merge 5 commits into
mainfrom
bench-deploy

Conversation

@samuelburnham

@samuelburnhamsamuelburnham commented Feb 21, 2024

Copy link
Copy Markdown
Member

Changes

  • Fixes deployment of historical benchmarks in caller repos
  • Adds support for labeled points on the historical graph

Overview

The following is meant to elucidate the current state of the historical plotting workflow for the benefit of reviewers and myself. It should evolve into inline or hosted documentation at some point.

Historical plot data

The core file structure is a benchmarks/history directory on the gh-pages branch that contains:

  • Historical data .tar.gz archives, one for each commit or workflow run, which contain the Criterion benchmark results and Cargo.lock for the given commit.
  • Historical data in plot-data.json, which contains only the relevant metadata and average benchmark result for each of the. This file is persistent and append-only, and if it's not found then it is re-created using each of the historical .tar.gz results.
  • .png plot images, created on each run using plot-data.json
  • HTML to render the images.

This is all created/deployed by the workflow after running the benchmarks, with the only prerequisite being an existing gh-pages branch deployed via GitHub Pages. See https://github.com/lurk-lab/ci-lab/tree/gh-pages and the Successful run below as an example

Benchmark data format

This workflow expects a specific Criterion Benchmark ID format in order to parse and plot data correctly. The schema used by Criterion is as follows:

<bench_group>/<bench_name>/<bench_params>

This ID is then printed to stdout and stored in the resulting benchmark JSON, along with the bench results and other statistics.

For the purpose of gh-pages benchmarks, bench_params must be equivalent to <commit_hash>-<commit_timestamp>-<params>, so it will look like the following example in Lurk:

Fibonacci-num=10/Prove/dd2a8e6-2024-02-20T22:48:21-05:00-rc=100

When plotting, we split the data into the following groups:

  • One plot per bench_group/bench_name pair, e.g. Fibonacci-num=10-Prove
  • Each (x, y) coordinate is a pair of (commit_timestamp, bench_result), optionally labeled with the commit_hash
  • Each line of (x, y) coordinates is grouped by bench_params, e.g. one line each for rc=100, rc=200

A test plot can be viewed at https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, though the data is still a WIP.

Next steps

  • Test with lurk-rs and arecibo once merged. This will require formatting gh-pages benchmarks properly using the <LURK|ARECIBO>_BENCH_OUTPUT env var and the new schema shown above. Also, this PR breaks plotting compatibility with old benchmarks so they will have to be manually moved to another directory (e.g. benchmarks/history/deprecated)
  • JSON conversion script between gh-pages and commit-comment (see bench-deploy: Convert between Criterion JSON formats #52)
  • Massage old JSON benchmark data to work with new benchmark data format. As seen in https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html, our old data doesn't follow the current data format and must be manually updated or deprecated. In my testing, updating old benchmark formats proved quite challenging due to the multiple old formats and attributes to change. More discussion is needed but I'm leaning toward archiving them for now and later extracting a simpler data set (similar to `plot-data.json) for plot integration.
  • Switch plots from .png to .svg to enable zooming in/out

Successful run

https://github.com/lurk-lab/ci-lab/actions/runs/8074420081/job/22060261452
https://lurk-lab.github.io/ci-lab/benchmarks/history/plots.html

@huitseekerhuitseeker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the changes in there look reasonable so far. Looking forward to the full PR!

Comment thread.github/workflows/bench-deploy.yml Outdated
@samuelburnham
samuelburnhamforce-pushed the bench-deploy branch 3 times, most recently from 4123fb0 to 8406701CompareFebruary 28, 2024 02:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@samuelburnham@huitseeker