Skip to content

[Testing] anyrender_skia Graphite backend (anyrender#103) + skia_paint_bench - #983

Draft
nicoburns wants to merge 1 commit into
mainfrom
devin/1790697507-test-skia-graphite
Draft

nicoburns wants to merge 1 commit into
mainfrom
devin/1790697507-test-skia-graphite

Conversation

@nicoburns

@nicoburns nicoburns commented Sep 29, 2026 •

Copy link
Copy Markdown
Member

Summary

A testing PR for DioxusLabs/anyrender#103, which adds an opt-in Skia Graphite backend on macOS/iOS. Don't merge as is: it patches all anyrender crates to that PR's git branch.

Opting into Graphite

  • The workspace anyrender_skia dependency now sets default-features = false. Each feature picks an engine explicitly, because rust-skia only publishes prebuilt binaries with a single GPU engine.
    • skia / skia-pixels / skia-softbuffer enable anyrender_skia/ganesh, the same engine as before.
    • The new skia-graphite feature enables anyrender_skia/graphite. It exists in dioxus-native, browser and readme, and is only different from skia on Apple.
  • Example: cargo run --release -p rdme --no-default-features --features skia-graphite,comrak,floats -- https://github.com/DioxusLabs/blitz

New examples/skia_paint_bench (macOS only)

  • Renders a page offscreen on Metal. It's modelled on paint_bench, which doesn't support Skia.
  • Each frame is timed in two parts:
    • paint_scene: blitz_paint::paint_scene → SkiaScenePainter.
    • rasterize: Ganesh flush_submit_and_sync_cpu, or Graphite snap + insert_recording + submit_and_wait.
  • It's a separate crate because only one engine can be enabled per build if you want prebuilt binaries:
cargo run --release -p skia_paint_bench -- <url> [width] [height] [scale] [iters]                                       # Ganesh
cargo run --release -p skia_paint_bench --no-default-features --features graphite -- <url> [width] [height] [scale] [iters]  # Graphite

Results

  • Measured on the Devin macOS VM (VirtualMac2,1: paravirtualized GPU, 8 vCPUs, with a background iOS simulator adding load). Absolute numbers aren't representative of real Apple hardware.
  • 1366x768@2x. Each figure is the median of 5 runs; each run's value is the median of 300 frames. Times in µs:
page engine paint_scene rasterize total
servo.org Ganesh 65 632 695
Graphite 104 749 850
news.ycombinator.com Ganesh 288 760 1054
Graphite 432 653 1095
en.wikipedia.org/wiki/Rust_(programming_language) Ganesh 276 1871 2150
Graphite 413 2006 2427
github.com/DioxusLabs/blitz Ganesh 594 2544 3156
Graphite 608 2435 3058
  • Graphite spends about 1.5x longer recording draw calls (paint_scene) on 3 of the 4 pages. Rasterize time is within ±15%, faster on some pages and slower on others. Totals range from 3% faster to 22% slower.
  • No Skia warnings were logged with Graphite on any of these pages.

rdme on Graphite:
rdme on Graphite

Link to Devin session: https://dioxus.staging.devinenterprise.com/sessions/7b8d8492640e46d08ea6cd8b5ab63dbb
Open in Devin Desktop: https://dioxus.staging.devinenterprise.com/desktop/session/7b8d8492640e46d08ea6cd8b5ab63dbb?variant=devin-insiders
Requested by: @nicoburns

WPT results

No changes in test results compared to main.

Generated by the WPT workflow.

@staging-devin-ai-integration

Copy link
Copy Markdown
Contributor

I'll fix CI failures and address comments from users with write access that start with 'Devin'.

  • Disable automatic comment, CI, and merge conflict monitoring

This branch has not been deployed

No deployments
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