xref: /aosp_15_r20/external/perfetto/docs/quickstart/heap-profiling.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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![Profile Diamond](/docs/images/profile-diamond.png)
73*6dbdd20aSAndroid Build Coastguard Worker![Native Flamegraph](/docs/images/native-heap-prof.png)
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