The Wire · Showcase
FLUTTER KILLS METAL CRASH, SWIFT DITCHES DEAD THREAD CODE
By RepoJournal · Filed · About Mobile platforms
Impeller's shader compiler was silently crashing Metal apps at draw time; Flutter just plugged it with a bounds check that the GLES backend had months ago.
Flutter shipped three critical fixes across the rendering stack. The biggest: Impeller now skips dead-code-eliminated resources on Metal [1], stopping the AGX driver crash that happened when the shader compiler optimized out a fragment sampler but reflection still tried to bind it at an out-of-range index. On the same front, Flutter GPU now raises proper Dart exceptions instead of crashing the process when you build an invalid render pipeline [2], surfacing shader stage mismatches up front rather than on first draw. A platform views regression that gutted web view buttons got reverted [3] after an internal project reported the damage; the team couldn't repro locally but shipped the revert rather than ship broken. Meanwhile, iOS fixed a thread-safety data race in VSyncClient tests [4] where the test harness was reaching unsynchronized into CADisplayLink from the test thread while the actual client ran on a dedicated worker, triggering undefined behavior that CADisplayLink's design forbids. On the Swift side, the standard library shipped a cleanup: Doug Gregor removed the ThreadLocalStorage abstraction that's sat unused for four years [5], and embedded Swift now connects Concurrency to platform-backed threading instead of the single-threaded stub [6], letting embedded targets define their own execution-context behavior. Kotlin fixed a reflection bug where inline classes with companion properties shadowed the underlying field lookup [7].
One email a day. Unsubscribe in one click.
Keep up with Mobile platforms in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Update Flutter to pick up the Metal crash fix if you ship Impeller on iOS flutter/flutter [immediate]
- → If you use Flutter GPU render pipelines, upgrade to surface Dart exceptions instead of silent crashes flutter/flutter [plan]
- → Monitor Kotlin inline class reflection if you're on nightly builds JetBrains/kotlin [monitor]
References
- [1] [Impeller] Skip binding dead-code-eliminated resources on Metal ↗ flutter/flutter
- [2] [Flutter GPU] Raise Dart errors for invalid render pipelines and memoize per-draw pipeline state ↗ flutter/flutter
- [3] Revert "Improve non rect platform view rendering (#182662)" ↗ flutter/flutter
- [4] iOS: Serialise CADisplayLink access in VSyncClient tests ↗ flutter/flutter
- [5] [stdlib] Remove standard library's ThreadLocalStorage ↗ apple/swift
- [6] [Embedded] Enable platform-backed threading in Concurrency ↗ apple/swift
- [7] JVM/Reflection: fix underlying field search for inline classes ↗ JetBrains/kotlin