> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mobileboost.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Performance testing

> See whether a pull request made your app slower, and which code did it

A performance report compares your pull request build (head) with the build it merges into (base), on the same real phone. Both builds run app startup and your flows many times each, in random order, so the result is a measured difference rather than one lucky or unlucky run.

> [card] [Prepare builds for performance testing](https://docs.mobileboost.io/ai-sdet/get-started/performance-builds.md)
>
> Set up your iOS and Android CI so the report can name the functions that got slower.

## What a report answers

1. Did the check pass?
2. Which metrics moved, and was it your code or the network?
3. For the metric you care about: is the change real, how big is it, and where did the time go?
4. What should you hand your coding agent to fix it?

## Your code or the network

Every metric runs twice:

* **Mocked network.** Responses recorded from the base build are replayed, so only the app code differs between the two builds. This is the precise measurement.
* **Live network.** The app talks to your backend, which is what your users wait for.

Base and head share the backend at the same time, so backend drift cancels out. Comparing the two modes tells you where a change comes from:

| Mocked | Live | Cause shown |
| - | - | - |
| Changed | Changed or noisy | App code |
| No change | Changed | Network requests |
| Changed | No change | App code, hidden by network wait |
| Inconclusive | Anything | Too noisy to say |

## Verdicts

Each metric gets the median of each build, the change in milliseconds and percent, and a 95% interval for that change. A change counts when it is at least 5% of the base median or 20 ms, whichever is larger.

| Verdict | Meaning |
| - | - |
| **Regressed** or **Improved** | The interval excludes zero and the change is at least the threshold |
| **No change** | The interval stays inside the threshold. A real change smaller than the threshold is shown as a small change |
| **Inconclusive** | The interval holds zero but reaches past the threshold. The report says how many more iterations would settle it |

"No change" is a claim backed by the data, not the absence of a result.

## What you see depends on what you upload

| You provide | The report shows |
| - | - |
| The release-like APK or IPA | Total times, the operating system's own startup phases, and what changed in your network requests |
| Plus symbol files: the R8 mapping file on Android, dSYMs on iOS | Which functions got slower, such as `AnalyticsClient.<init>: 6 ms -> 188 ms` |
| Plus markers in your code: `trace()` or `reportFullyDrawn()` on Android, `os_signpost` on iOS | Exact named spans, and flows that end where you say they do |

See [Prepare builds for performance testing](https://docs.mobileboost.io/ai-sdet/get-started/performance-builds.md) for the setup.

## Reading a report

* **Counts at the top:** how many metrics regressed, improved, stayed the same or are inconclusive, and one sentence on the check.
* **Comparison table, worst first:** mocked and live side by side, each with the change, its interval against the threshold, and base and head medians.
* **Detail for one metric:** every iteration of both builds, the run order to spot drift, main-thread changes from the trace, and the network requests that changed.

## Hand it to your coding agent

Each report comes with a pull request comment in Markdown and a JSON export (`mobileboost-perf/v1`). Copy either into your coding agent, and it gets the regressions, their cause and the slower functions in one place.

## Also in every functional run

* **Test runtime.** Each test reports the time it spent on a device, and each run reports its wall-clock time. `GET /runs/{runId}` returns both as `runtimeSeconds`.
* **Crashes.** Run reports show app crashes that happened during a test.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.