# `:baselineprofile`

Generates a [Baseline Profile](https://developer.android.com/topic/performance/baselineprofiles/overview)
for `:androidApp` — AOT-compiling the cold-start and first-frame code paths so ART doesn't pay the
JIT cost on first launch. Targets the **google** flavor (the variant most users run).

## Generate the profile (run on a device/emulator)

```bash
./gradlew :androidApp:generateGoogleReleaseBaselineProfile
```

Output is merged into `androidApp/src/google/generated/baselineProfiles/baseline-prof.txt`.
**Commit that file** — release builds package it via `androidx.profileinstaller`.

## Quantify the win

```bash
./gradlew :androidApp:benchmarkGoogleReleaseBaselineProfile
```

Compare `startupCompilationNone` vs `startupCompilationBaselineProfiles` in the output.

## Scope / TODO

- The journey (`BaselineProfileGenerator`) is cold-start only, since CI has no paired radio.
  Extend it with post-connection screens (node list, map, message thread) once a fake transport or
  connected device is wired into the harness — a more representative journey yields a better profile.
- For hermetic CI generation, swap `useConnectedDevices = true` in `build.gradle.kts` for a
  [Gradle Managed Device](https://developer.android.com/topic/performance/baselineprofiles/measure-baselineprofile#gradle-managed).
- f-droid currently inherits no profile (only `google` is produced). Add a second flavor here if
  the f-droid startup path ever diverges enough to matter.
