Skip to content

Default iOS rendering to Ganesh and add benchmarks#17

Merged
markm39 merged 1 commit into
mainfrom
feat/ganesh-renderer-benchmarks
May 12, 2026
Merged

Default iOS rendering to Ganesh and add benchmarks#17
markm39 merged 1 commit into
mainfrom
feat/ganesh-renderer-benchmarks

Conversation

@markm39
Copy link
Copy Markdown
Contributor

@markm39 markm39 commented May 12, 2026

Summary

  • Adds the iOS Ganesh/Metal render path, defaults public iOS rendering to Ganesh, and keeps CPU selectable for A/B comparisons and fallback.
  • Adds on-device benchmark tooling for replayed strokes, manual notebook recordings, viewport scroll sampling, multi-page suite runs, eraser, selection, and tool coverage.
  • Applies Ganesh output color compatibility so tool colors and selection chrome match the CPU path.

Benchmark evidence

Captured on iPad using this branch's example benchmark screen. Lower p95 values are better; higher scroll FPS is better.

Manual full-notebook recording

xychart-beta
  title "Manual full-notebook p95"
  x-axis ["CPU render", "Ganesh render", "CPU latency", "Ganesh latency"]
  y-axis "milliseconds" 0 --> 16
  bar [13.93, 3.76, 8.41, 6.43]
Loading
Metric CPU Ganesh Result
Render p95 13.93 ms 3.76 ms 73% lower
Input-to-present latency p95 8.41 ms 6.43 ms 24% lower
Memory delta 101.9 MB 83.7 MB 18.2 MB lower
Viewport FPS 56.92 53.25 same range while scrolling/drawing

12-page automated notebook suite

xychart-beta
  title "12-page suite p95"
  x-axis ["CPU render", "Ganesh render", "CPU latency", "Ganesh latency"]
  y-axis "milliseconds" 0 --> 18
  bar [7.35, 4.87, 13.15, 16.92]
Loading
xychart-beta
  title "12-page suite scroll FPS"
  x-axis ["CPU", "Ganesh"]
  y-axis "fps" 0 --> 60
  bar [51.54, 52.68]
Loading
Metric CPU Ganesh Result
Render p95 average 7.35 ms 4.87 ms 34% lower
Synthetic input latency p95 average 13.15 ms 16.92 ms replay latency higher in the suite
Native dropped frames 134 183 higher in synthetic suite
Scroll FPS 51.54 52.68 same range
Scroll dropped frames 38 41 same range

Test plan

  • npm run validate
  • xcodebuild -quiet -workspace example/ios/MobileInkExample.xcworkspace -scheme MobileInkExample -configuration Debug -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' CODE_SIGNING_ALLOWED=NO build
  • Simplify review: no remaining maintainability findings after cleanup.
  • Security review: no auth, isolation, injection, secret, or sensitive-data findings.
  • iPad benchmark evidence captured for CPU vs Ganesh manual notebook recording and 12-page suite.

@markm39 markm39 merged commit f8735c8 into main May 12, 2026
1 check passed
@markm39 markm39 deleted the feat/ganesh-renderer-benchmarks branch May 12, 2026 20:41
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