Skip to content

Benchmarks - #3606

Open
Konstantin (terrakok) wants to merge 61 commits into
jb-mainfrom
benchmarks
Open

Konstantin (terrakok) wants to merge 61 commits into
jb-mainfrom
benchmarks

Conversation

@terrakok

Copy link
Copy Markdown
Member

Introduce a standalone Compose Multiplatform benchmarking project in compose/mpp/benchmarks to measure and compare startup and rendering performance across Compose and Kotlin versions.

  • Support JVM, macOS ARM64, iOS ARM64 Simulator, JS, and WasmJS targets.
  • Add reusable benchmark cases and four measurement modes: application startup, real UI frame timing, average offscreen rendering, and per-frame offscreen rendering.
  • Add a command-line launcher with version, target, and browser matrices, configurable repetitions and timeouts, input validation, and process cleanup.
  • Support benchmarking both published Compose versions and local core sources.
  • Collect JSON results, logs, environment metadata, and test parameters, and generate interactive HTML reports with comparison charts, frame-time distributions, and links to raw results.
  • Add manually triggered GitHub Actions workflows for JVM, iOS, and web benchmarks.
  • Document how to run benchmarks and add new cases.

Testing

Smoke test from the repository root:

./run-benchmarks.sh --target jvm \
  --compose-version local \
  --tests LazyGrid \
  --modes startup realFrames averageFrame fps \
  --repeat 1 \
  --output-dir /tmp/compose-benchmark-results

Verify that the session directory contains an HTML report, JSON results, environment metadata, and logs.

Release Notes

N/A

Install Mesa OpenGL dependencies, run benchmarks with software rendering under Xvfb, and capture GL diagnostics with the results.
Run five representative benchmarks once per workflow job instead of repeating all tests three times.
Use Chrome with ANGLE Metal on macOS runners instead of software WebGL under Xvfb.
Lower rendering and startup benchmark warmup from 100 to 30 and frame counts from 1000 to 300.
Sign up for free to 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.

1 participant