iris: rebuild with the phone-crash diagnostic and without force-gles

The bench APK aborted on Iris's phone in AndroidRenderer::new with only
a truncated "wgpu error: Validation Error". This build carries ai-app-2
commit 46246ea: a renderer-creation failure now reports the adapter,
its limits/downlevel flags, and wgpu's full error chain on screen and
in logcat instead of aborting, and build-apk.sh no longer forces the
GLES backend (force-gles was meant only for one emulator measurement,
but the delivered APK inherited it regardless of target -- the named
hypothesis for the crash, per ai-app-2's RUST.md P0 box).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
irisandClaude Fable 5.1 committed 2026-09-05 23:05:27 -04:00
1 parent 5d7dee5d1f
commit 8eb87a2289
2 files changed
+35 -5

No files matched your search

+35 -5
View File
@@ -74,13 +74,43 @@ into the repo, never a real transcript).
covers only that run.
Built with `iris/android-app/build-apk.sh release --abi arm64-v8a` (wraps `cargo ndk -t arm64-v8a
-P 26 -o app/src/main/jniLibs/ build --release --features "transcript-screen force-gles bench"`
plus `gradle :app:assembleRelease`, signed with the same `~/.config/ai-app/release.jks`
`app/build-apk.sh` generates, and verifies the result with `aapt2`/`apksigner`). `force-gles`
matches I5's own "Where iris's frame time goes" finding: the default Vulkan backend has no adapter
under a plain `-gpu host` boot on this AVD.
-P 26 -o app/src/main/jniLibs/ build --release --features "transcript-screen bench"` plus `gradle
:app:assembleRelease`, signed with the same `~/.config/ai-app/release.jks` `app/build-apk.sh`
generates, and verifies the result with `aapt2`/`apksigner`). **No longer built with `force-gles`
as of the 2026-09-06 rebuild below** -- see that entry for why it was there and why it had to come
out for a phone build specifically.
**2026-09-06, commit `46d3a6f`**: rebuilt after `transcript_ui::TranscriptScreen::apply` replaced
the full-rebuild-per-event streaming path in all three iris clients (docs/RUST.md's P0 box has the
before/after numbers) -- this is the build to use if comparing against an iris APK from before that
commit.
**2026-09-06, second rebuild, ai-app-2 commit `46246ea`**: this build aborted on Iris's
phone (a Pixel, GrapheneOS) in `AndroidRenderer::new`, on the very first `surface_changed`, with
only `wgpu error: Validation Error` surviving into the crash report before Android truncated it.
Two things changed:
1. **A renderer-creation failure no longer aborts the process.** `iris_core::UiRenderNode::new`
now runs its bind-group-layout/pipeline creation inside wgpu error scopes and returns
`Result<Self, String>` instead of letting wgpu's default handler panic; the Android backend
turns a failure into the adapter's identity, the exact limits and downlevel flags bind-group
layouts validate against, and wgpu's own "Caused by" chain, logged as one line under the
`iris-android-app` logcat tag and shown on screen as plain, selectable, scrollable text (a
`TextView` swapped in for the whole activity) saying to copy it and send it back. If this build
still fails on the phone, **that screen is what to screenshot or copy** -- there is no more
silent abort to chase through a truncated crash report.
2. **This build no longer forces the GLES backend.** Every earlier `iris-bench-arm64.apk`
(including the one above) was built with `--features "... force-gles ..."`, a flag that exists
only to force the *emulator* off its default software Vulkan and onto GLES for one specific
frame-time measurement (RUST.md's I5) -- its own doc in `iris/Cargo.toml` never mentions real
hardware. `build-apk.sh`'s default feature list carried it into every arm64 build regardless,
so the APK actually delivered to a phone was locked to GLES rather than the phone's own Vulkan
driver. That is the named hypothesis for the crash (docs/RUST.md's P0 box has the full audit):
GLES support for a storage buffer bound in the *vertex* stage (`move_offsets`, `masks_layout`)
depends on the driver reporting `GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS > 0`, which real Vulkan
grants unconditionally but a phone's GLES path is not guaranteed to -- and RUST.md's own
SwiftShader finding already flagged GLES-on-Android as the fragile backend for this exact
shader. This build uses the default backend (Vulkan on a real device) instead.
If this rebuild still crashes, the on-screen report from point 1 names the real cause directly;
paste it back rather than guessing further from a truncated log.