Skip to content

馃搳 Add Evolve Charts: compare Evolve results without Python or git - #8

Merged
maxded merged 1 commit into
mainfrom
easy-deep-analysis-charts
Oct 6, 2026
Merged

maxded merged 1 commit into
mainfrom
easy-deep-analysis-charts

Conversation

@maxded

@maxded maxded commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Journalists need to compare Evolve results (scores, GPU time per workload category and per pass, GPU sensors) across GPUs, but evolve-scripts only had a two-file CSV comparison script and unmerged Jupyter notebooks, which need Python and git to use.

This tool gives users a way to inspect their own Evolve data with a script authored by us. Ultimately this inspection tooling should live on our website, as part of the hall of fame. This is a starting point for quickly prototyping functionality and comparison graphs, so we learn what information and graphs we need before building the proper version.

Changes

  • Evolve Charts, a local Streamlit app in Evolve's styling (ui/styling.rs colours, Spartan, logo). Pages:

    • Results: load files, rename them, see system details and what each file contains.
    • Scores: Evolve's scores side by side, with the workload category each one scores.
    • GPU time: per workload category over the run, and the passes each one is made of.
    • Passes: one searchable table; tick passes to plot them.
    • GPU sensors: clocks, power, temperature.
    • Export: Datawrapper-ready CSVs.

    Charts download as PNG or SVG with a source line (GPU, driver, Evolve version). Nothing leaves the machine.

  • Reads every Evolve export: the score screen's Export zip (with or without deep analysis), evolve_results.csv, scores.csv, the per-frame CSV and deep_analysis.json. Pages leave out results that lack the data they need and say so.

  • Pass mapping from Evolve's source: tools/sync_categories.py generates the pass-to-workload-category mapping from evolve-frame-bucketing. Passes Evolve doesn't categorise are left out of totals and reported. Copies, clears and other utility work are hidden from the Passes page.

  • Downloadable without git:

    • tools/package.py builds Evolve-Charts.zip with double-click launchers for Windows (.bat) and macOS (.command).
    • The launchers install uv on first start.
    • Dependencies are locked in evolve-charts.py.lock.
    • release.yml publishes the zip on v* tags, so releases/latest/download/Evolve-Charts.zip is a stable link. ci.yml runs ruff and pytest on PRs.
  • Removes the old compare_deep_analysis.py and its requirements.txt. The README is rewritten as a journalist quick start.

Evidence

  • Real exports: tested with six exports from Evolve 16.0 (main, same breda revision on both platforms):

    • RTX 4070 Ti, driver 615.71.9, Fedora 44: hybrid inline/pipeline and path tracing inline/pipeline.
    • Galaxy S24 (Xclipse 940, driver 24.3.9, Android 15): hybrid inline/pipeline.
  • The mapping reproduces Evolve's own numbers. Summing each workload category's passes from deep analysis matches Evolve's per-frame CSV exactly (4070 Ti hybrid inline):

    Workload category Evolve CSV Sum of passes
    Raytracing 6.222 ms 6.222 ms
    Acceleration Structure Builds 0.680 ms 0.680 ms
    Rasterization 1.849 ms 1.849 ms
    Compute 9.304 ms 9.304 ms

    Uncategorised work left out: 0.145 ms per frame (egui_render, fallback-upscaler).

  • Download path: the release zip was extracted into an empty folder and started through its own launcher with a clean uv cache. It installed the locked packages (Streamlit 1.65.0, Plotly 7.1.0, pandas 3.0.6), loaded the export from its exports folder, and showed the theme and version.

  • Browser checks: every page was checked in Chrome via Playwright with no exceptions, and PNG downloads were inspected.

  • Not tested: the Windows .bat and macOS .command on real machines, and the GitHub workflows themselves.

  • Found along the way (Evolve side):

    • Exports don't record render resolution or quality preset, so phone and desktop runs can't be flagged as not comparable.
    • The S24 recorded no GPU sensor data.

Examples

Screenshot From 2026-10-06 16-40-41 Screenshot From 2026-10-06 16-41-02 Screenshot From 2026-10-06 16-39-15 Screenshot From 2026-10-06 16-39-28 Screenshot From 2026-10-06 16-39-36 Screenshot From 2026-10-06 16-39-02

馃 Generated with Claude Code

A local Streamlit app, styled like Evolve, for journalists who don't know
Python or git. It reads every Evolve export (the score screen's Export
zip, evolve_results.csv, scores.csv, the per-frame CSV and
deep_analysis.json) and has a page per question: Results, Scores, GPU
time per workload category and per pass, GPU sensors and CSV export.
Charts download as PNG or SVG with a source line.

Which pass belongs to which workload category is generated from Evolve's
frame bucketing source by tools/sync_categories.py.

Downloadable without git: tools/package.py builds Evolve-Charts.zip with
double-click launchers for Windows and macOS, and a release workflow
publishes it on v* tags. Dependencies are locked in evolve-charts.py.lock.

Replaces the old compare_deep_analysis.py script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@maxded maxded added the enhancement New feature or request label Oct 6, 2026
@maxded
maxded merged commit b291da8 into main Oct 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant