|
| 1 | + |
| 2 | +# Android Startup Test |
| 3 | + |
| 4 | +## Prereqs |
| 5 | + |
| 6 | +- Ensure `python` is installed and available. Any currently supported `python` 3.* version should work. Downloads are available at https://www.python.org/downloads/. |
| 7 | +- Ensure `dotnet` is installed and available with the `dotnet` command for easy xharness installation. Any supported .NET Core version should work. [Dotnet Download](https://dotnet.microsoft.com/en-us/download) or [Daily Dotnet Download](https://github.com/dotnet/sdk/blob/main/documentation/package-table.md). |
| 8 | +- Ensure `xharness` is installed and available with the `xharness` command. The current version in use can be found in the `eng/performance/maui_scenarios_android.proj` file at line 7 (under the tag `MicrosoftDotNetXHarnessCLIVersion`), although any recent version should work. [XHarness Install Instructions](https://github.com/dotnet/xharness?tab=readme-ov-file#installation-and-usage). |
| 9 | +- Have an Android app APK available for testing. |
| 10 | +- Have an Android Device (with developer mode enabled) or emulator connected to computer, and viewable with `xharness android device` or `xharness android adb -- devices -l`. |
| 11 | + |
| 12 | +## Steps |
| 13 | + |
| 14 | +1. Initialize the environment (note the . for bash): |
| 15 | + |
| 16 | + ```sh |
| 17 | + cd src/scenarios |
| 18 | + . ./init.sh # or `.\init.ps1` on Windows. Can specify custom dotnet install with -dotnetdir <dir>, but dotnet install should not impact Android Startup testing itself. |
| 19 | + ``` |
| 20 | + |
| 21 | +2. Navigate to the `genericandroidstartup` scenario directory: |
| 22 | + |
| 23 | + ```sh |
| 24 | + cd genericandroidstartup |
| 25 | + ``` |
| 26 | + |
| 27 | +3. Copy the APK into the `genericandroidstartup` directory. |
| 28 | +4. Run the test: |
| 29 | + |
| 30 | + ```sh |
| 31 | + python test.py devicestartup --device-type android --package-path <path-to-apk> --package-name <apk-package-name> [--disable-animations] [--use-fully-drawn-time --fully-drawn-extra-delay <delay-in-sec>] |
| 32 | + ``` |
| 33 | + |
| 34 | +* Refer to the [Notes](./android-startup-scenarios.md#notes) below about specifying --use-fully-drawn-time --fully-drawn-extra-delay parameters. |
| 35 | + |
| 36 | +5. Read the output: |
| 37 | + |
| 38 | + During the running of the test you will see the loop of the activity being started to get the startup times. |
| 39 | + Once the testing is completed, you will see output similar to the following: |
| 40 | + |
| 41 | + ```txt |
| 42 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 713 |
| 43 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 715 |
| 44 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 728 |
| 45 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 716 |
| 46 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 715 |
| 47 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 734 |
| 48 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 716 |
| 49 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 718 |
| 50 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 713 |
| 51 | + [2025/01/29 11:15:44][INFO] Found Value (ms): 706 |
| 52 | + [2025/01/29 11:15:44][INFO] Device Startup - Maui Android Default NoAnimation |
| 53 | + [2025/01/29 11:15:44][INFO] Metric |Average |Min |Max |
| 54 | + [2025/01/29 11:15:44][INFO] ----------------|---------------|---------------|--------------- |
| 55 | + [2025/01/29 11:15:44][INFO] Generic Startup |717.400 ms |706.000 ms |734.000 ms |
| 56 | + ``` |
| 57 | + |
| 58 | + The Found Value's are the individual test run startup times with the overall stats at the bottom. The stats provided include the following startup stats: average, minimum, and maximum times. |
| 59 | +
|
| 60 | +## Notes |
| 61 | +
|
| 62 | +- Specific example command such as when using the runtime android example app: `python test.py devicestartup --device-type android --package-path HelloAndroid.apk --package-name net.dot.HelloAndroid`. |
| 63 | +- Other example commands and additional logic can be found in the `maui_scenarios_android.proj` and `runner.py` files in the `performance` repository. |
| 64 | +- If using `[--use-fully-drawn-time --fully-drawn-extra-delay <delay in sec>]` arguments, the Android app must have reportFullyDrawn() called on a ComponentActivity. Reference: https://developer.android.com/topic/performance/vitals/launch-time#retrieve-TTFD. |
0 commit comments