1*6dbdd20aSAndroid Build Coastguard Worker# Quickstart: Heap profiling 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard Worker## Prerequisites 4*6dbdd20aSAndroid Build Coastguard Worker 5*6dbdd20aSAndroid Build Coastguard Worker* [ADB](https://developer.android.com/studio/command-line/adb) installed. 6*6dbdd20aSAndroid Build Coastguard Worker* A device running Android 10+. 7*6dbdd20aSAndroid Build Coastguard Worker* A _Profileable_ or _Debuggable_ app. If you are running on a _"user"_ build of 8*6dbdd20aSAndroid Build Coastguard Worker Android (as opposed to _"userdebug"_ or _"eng"_), your app needs to be marked 9*6dbdd20aSAndroid Build Coastguard Worker as profileable or debuggable in its manifest. 10*6dbdd20aSAndroid Build Coastguard Worker See the [heapprofd documentation][hdocs] for more details. 11*6dbdd20aSAndroid Build Coastguard Worker 12*6dbdd20aSAndroid Build Coastguard Worker[hdocs]: /docs/data-sources/native-heap-profiler.md#heapprofd-targets 13*6dbdd20aSAndroid Build Coastguard Worker 14*6dbdd20aSAndroid Build Coastguard Worker## Capture a heap profile 15*6dbdd20aSAndroid Build Coastguard Worker 16*6dbdd20aSAndroid Build Coastguard Worker### Linux / macOS 17*6dbdd20aSAndroid Build Coastguard WorkerMake sure adb is installed and in your PATH. 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Worker```bash 20*6dbdd20aSAndroid Build Coastguard Workeradb devices -l 21*6dbdd20aSAndroid Build Coastguard Worker``` 22*6dbdd20aSAndroid Build Coastguard Worker 23*6dbdd20aSAndroid Build Coastguard WorkerIf more than one device or emulator is reported you must select one upfront as follows: 24*6dbdd20aSAndroid Build Coastguard Worker 25*6dbdd20aSAndroid Build Coastguard Worker```bash 26*6dbdd20aSAndroid Build Coastguard Workerexport ANDROID_SERIAL=SER123456 27*6dbdd20aSAndroid Build Coastguard Worker``` 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard WorkerDownload the `tools/heap_profile` (if you don't have a perfetto checkout): 30*6dbdd20aSAndroid Build Coastguard Worker 31*6dbdd20aSAndroid Build Coastguard Worker```bash 32*6dbdd20aSAndroid Build Coastguard Workercurl -LO https://raw.githubusercontent.com/google/perfetto/main/tools/heap_profile 33*6dbdd20aSAndroid Build Coastguard Workerchmod +x heap_profile 34*6dbdd20aSAndroid Build Coastguard Worker``` 35*6dbdd20aSAndroid Build Coastguard Worker 36*6dbdd20aSAndroid Build Coastguard WorkerThen start the profile: 37*6dbdd20aSAndroid Build Coastguard Worker 38*6dbdd20aSAndroid Build Coastguard Worker```bash 39*6dbdd20aSAndroid Build Coastguard Worker./heap_profile -n system_server 40*6dbdd20aSAndroid Build Coastguard Worker``` 41*6dbdd20aSAndroid Build Coastguard Worker 42*6dbdd20aSAndroid Build Coastguard Worker### Windows 43*6dbdd20aSAndroid Build Coastguard Worker 44*6dbdd20aSAndroid Build Coastguard WorkerMake sure that the downloaded adb.exe is in the PATH. 45*6dbdd20aSAndroid Build Coastguard Worker 46*6dbdd20aSAndroid Build Coastguard Worker```bash 47*6dbdd20aSAndroid Build Coastguard Workerset PATH=%PATH%;%USERPROFILE%\Downloads\platform-tools 48*6dbdd20aSAndroid Build Coastguard Worker 49*6dbdd20aSAndroid Build Coastguard Workeradb devices -l 50*6dbdd20aSAndroid Build Coastguard Worker``` 51*6dbdd20aSAndroid Build Coastguard Worker 52*6dbdd20aSAndroid Build Coastguard WorkerIf more than one device or emulator is reported you must select one upfront as follows: 53*6dbdd20aSAndroid Build Coastguard Worker 54*6dbdd20aSAndroid Build Coastguard Worker```bash 55*6dbdd20aSAndroid Build Coastguard Workerset ANDROID_SERIAL=SER123456 56*6dbdd20aSAndroid Build Coastguard Worker``` 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard WorkerDownload the 59*6dbdd20aSAndroid Build Coastguard Worker[heap_profile](https://raw.githubusercontent.com/google/perfetto/main/tools/heap_profile) 60*6dbdd20aSAndroid Build Coastguard Workerscript. Then start the profile: 61*6dbdd20aSAndroid Build Coastguard Worker 62*6dbdd20aSAndroid Build Coastguard Worker```bash 63*6dbdd20aSAndroid Build Coastguard Workerpython /path/to/heap_profile -n system_server 64*6dbdd20aSAndroid Build Coastguard Worker``` 65*6dbdd20aSAndroid Build Coastguard Worker 66*6dbdd20aSAndroid Build Coastguard Worker## View profile 67*6dbdd20aSAndroid Build Coastguard Worker 68*6dbdd20aSAndroid Build Coastguard WorkerUpload the `raw-trace` file from the output directory to the [Perfetto UI]( 69*6dbdd20aSAndroid Build Coastguard Workerhttps://ui.perfetto.dev) and click on diamond marker in the UI track labeled 70*6dbdd20aSAndroid Build Coastguard Worker_"Heap profile"_. 71*6dbdd20aSAndroid Build Coastguard Worker 72*6dbdd20aSAndroid Build Coastguard Worker 73*6dbdd20aSAndroid Build Coastguard Worker 74*6dbdd20aSAndroid Build Coastguard Worker 75*6dbdd20aSAndroid Build Coastguard Worker## Next steps 76*6dbdd20aSAndroid Build Coastguard Worker 77*6dbdd20aSAndroid Build Coastguard WorkerLearn more about memory debugging in the [Memory Usage on Android Guide]( 78*6dbdd20aSAndroid Build Coastguard Worker/docs/case-studies/memory.md) and more about the [heapprofd data-source]( 79*6dbdd20aSAndroid Build Coastguard Worker/docs/data-sources/native-heap-profiler.md) 80