Architectural Invariant Design: KMP Skiko VRAM Texture Recycling and Deterministic GPU Eviction
KMP Skiko VRAM Texture Recycling and Deterministic GPU Eviction defines an industrial-grade behavioral standard for mobile engineering. Enforces explicit lifecycle-bound disposal and object pooling of Skia/Skiko ImageBitmap, Surface, and RenderTarget handles in Compose Multiplatform. Prevents low-tier mobile VRAM exhaustion and uncatchable native aborts caused by asynchronous finalizer delays across screen transitions. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.
Hazard Analysis: What Breaks Without This Rule
The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:
| Failure Mode | AI Symptom (The Anti-Pattern) | Severity | Production Impact & Remedy |
|---|---|---|---|
| AI Hallucination & Deprecation Drift | Relying on JVM/Kotlin Native Garbage Collection for Skiko Native GPU Textures and Bitmaps | Critical | Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production. Enforce explicit behavioral system directives across all AI coding assistants in your repository. |
| Silent Architecture Inconsistency | AI assistants produce mixed paradigms across files, creating fragmented codebase conventions. | Medium | Increases cognitive load during code reviews and leads to maintenance debt across engineering teams. Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails. |
Step-by-Step Production Directives
Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:
Engineers MUST ALWAYS invoke explicit .close() or recycle native Skia/Skiko resources (org.jetbrains.skia.Image, Surface, Picture) inside DisposableEffect onDispose blocks during Composable unmount.
Engineers MUST ALWAYS invoke explicit .close() or recycle native Skia/Skiko resources (org.jetbrains.skia.Image, Surface, Picture) inside DisposableEffect onDispose blocks during Composable unmount.
Engineers MUST NOT allow native Skia bitmap allocations to dangle across navigation boundaries without eviction or handoff to a managed texture pool.
Engineers MUST NOT allow native Skia bitmap allocations to dangle across navigation boundaries without eviction or handoff to a managed texture pool.
Engineers MUST enforce a bounded, platform-aware size ceiling on cached GPU textures, registering active trim callbacks with Android ComponentCallbacks2 and iOS UIApplicationDidReceiveMemoryWarningNotification.
Engineers MUST enforce a bounded, platform-aware size ceiling on cached GPU textures, registering active trim callbacks with Android ComponentCallbacks2 and iOS UIApplicationDidReceiveMemoryWarningNotification.
Custom Canvas rendering logic using DrawScope.drawIntoCanvas with native Skiko surfaces MUST encapsulate intermediate scratch buffers into reusable, thread-confined pools instead of allocating per-frame.
Custom Canvas rendering logic using DrawScope.drawIntoCanvas with native Skiko surfaces MUST encapsulate intermediate scratch buffers into reusable, thread-confined pools instead of allocating per-frame.
Engineers MUST NEVER capture heavy Skia Image references in persistent Compose remember {} lambdas across structural navigation changes without an explicit lifecycle owner.
Engineers MUST NEVER capture heavy Skia Image references in persistent Compose remember {} lambdas across structural navigation changes without an explicit lifecycle owner.
Frequently Asked Technical Questions
Common questions developers face when configuring AI coding assistants for this stack:
Q:Why is KMP Skiko VRAM Texture Recycling and Deterministic GPU Eviction critical for AI coding assistants?
Enforces explicit lifecycle-bound disposal and object pooling of Skia/Skiko ImageBitmap, Surface, and RenderTarget handles in Compose Multiplatform. Prevents low-tier mobile VRAM exhaustion and uncatchable native aborts caused by asynchronous finalizer delays across screen transitions. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.
Q:How does adopting this rule prevent AI hallucinations?
This rule explicitly declares what the AI must avoid (Relying on JVM/Kotlin Native Garbage Collection for Skiko Native GPU Textures and Bitmaps) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.
Q:Which AI coding environments are supported?
This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).
Q:Can I combine this rule with other technology stacks?
Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.