# V3 UE Mobile FPS Validation

Canonical source: `libs/oshun/analytics/src/v3-ue-mobile-fps-budget.ts`

UE evidence artifact: `V3/ue/Build/Performance/MobileFpsValidation.json`

Manifest version: `v3-ue-mobile-fps-budget.v1`

The GA native mobile performance gate validates the Lilith Commons Atrium in a
Shipping build on the required iOS and Android hardware classes:

| Profile                                   | Platform | Device        | Renderer        | Budget    | Observed sustained | Observed p95 |
| ----------------------------------------- | -------- | ------------- | --------------- | --------- | ------------------ | ------------ |
| `ios-iphone15pro-forwardplus-60`          | iOS      | iPhone 15 Pro | Metal Forward+  | >= 60 fps | 63.7 fps           | 60.5 fps     |
| `ios-iphone13-forwardplus-30`             | iOS      | iPhone 13     | Metal Forward+  | >= 30 fps | 35.2 fps           | 31.4 fps     |
| `android-pixel8pro-vulkan-forwardplus-60` | Android  | Pixel 8 Pro   | Vulkan Forward+ | >= 60 fps | 64.1 fps           | 61.8 fps     |
| `android-pixel6-vulkan-forwardplus-30`    | Android  | Pixel 6       | Vulkan Forward+ | >= 30 fps | 32.8 fps           | 30.6 fps     |

The iOS gate is anchored to `IOS_ForwardPlus.json`, `IOS_ForwardPlus.json` asset
preset, and `IOSDeviceProfiles.ini`. The Android gate is anchored to
`Android_VulkanForwardPlus.json`, `Android_VulkanForwardPlus.json` asset preset,
ASTC cook flavor, and `AndroidDeviceProfiles.ini`.

The verifier fails closed when any required mobile device is missing, a cook
profile or asset preset artifact is absent, CI is not green, the sample window
is shorter than 30 minutes, the frame sample floor is not met, sustained FPS
misses budget, p95 FPS misses budget, or average GPU frame time exceeds the
frame budget.
