Skip to content

v0.1.0-beta.2 — Skia 3.7.1, safer vsync release

Pre-release
Pre-release

Choose a tag to compare

@batical batical released this 20 Oct 16:19
· 6 commits to main since this release
1eeaa3b

Requires react-native-skia@3.7.1 and react-native-webgpu@0.17.0. Thanks to @AmatoGiulio for contributing.

Install

npm install --save-exact react-native-skia@3.7.1 react-native-webgpu@0.17.0 react-native-reanimated@4.5.3 react-native-worklets@0.11.3
npm install --save-exact react-native-skia-webgpu-video@0.1.0-beta.2
npx --no-install skia-video-patch-canvas

Add the last command to your app's postinstall, then rebuild the native app; see the README. The archive attached here is the same package, installable by URL.

Changes since v0.1.0-beta.1

Send the vsync release through handleMessage, and note two option limits (#17, by @AmatoGiulio)

  • Vsync release goes through handleMessage. It was a posted runnable, which the playback thread runs directly: no releasing check, and an exception crashed the app instead of becoming an error event. It is now a PLAYBACK_VSYNC_RELEASE message. vsyncReleasePosted still coalesces it to one pending message.
  • Docs. redrawOnTime says that drawWhenPaused: true overrides it. splitImportAndDraw says that it applies on iOS too.

Move to react-native-skia 3.7.1 (#19)

  • react-native-skia 3.7.1. It contains a single upstream fix, iOS only (#4273): SkiaView now presents at the display's full rate on ProMotion devices. WebGPU stays at 0.17.0, with Dawn and Graphite 157.0.0.
  • Skia patch applied unchanged. The 7 patched files are byte-identical to 3.7.0's, so only the patch's version and file name change (patches/react-native-skia+3.7.1.patch). Our upstream PRs #4274–#4276 are still open, so the patch can't shrink yet.
  • Install pins updated in the README, BUILD_VALIDATION.md, UPSTREAM_NOTES.md and the example's Podfile.lock.

Release in one command: npm run ship (#18)

  • npm run ship does a whole release from a clean main:
    1. It bumps the version in a release/vX PR: package.json, the lockfile and the example's Podfile.lock.
    2. It waits for the Host checks, squash-merges the PR, then runs release.mjs: tag, GitHub release, npm.
    • By default it picks the next prerelease (0.1.0-beta.1 → 0.1.0-beta.2).
    • --dry-run prints the version and the notes, and changes nothing.
    • After a failure, running it again resumes where it stopped.
  • Generated release notes (scripts/release-notes.mjs, npm run release:notes), in the format of the earlier releases:
    • install block built from the pinned peers;
    • every PR since the previous tag, with the list from its Summary or Changes section and its author;
    • the not-yet-qualified list, kept in .github/release-status.md;
    • the archive's SHA-256.
    • release.mjs used to fall back on GitHub's generated notes, which list only titles.
  • Title vX — <summary> (--summary), and a post for X printed after publishing.
  • Already published: running it again on a fully released version now says so, instead of asking for a bump.

Release 0.1.0-beta.2 (#20)

Version bump for 0.1.0-beta.2. npm run ship merges it once CI passes, then tags and publishes it.

Not yet qualified

  • Memory over long sessions (last checked on 3.0.6).
  • HDR, audible output and A/V synchronization.
  • Two known 4K issues: a lazy composition seek times out in 1 of 3 runs on the Pixel 8a, and three simultaneous 4K clips stop on the video memory budget during iPhone playback.

Full changelog: v0.1.0-beta.1...v0.1.0-beta.2

SHA-256 of the archive: 694ef48ac45ee60b13620ae3f029a30007cf70ebba27fd0a63054abc01a9c034