blob: b80392b735dbcc625d6c3dd73042eaaa94407378 [file] [view]
# Integration Guide: Wiring HprofDumpDataSource into system_server
## Files to modify in AOSP `frameworks/base`
### 1. Create the data source
Copy `HprofDumpDataSource.java` to:
```
services/core/java/com/android/server/am/HprofDumpDataSource.java
```
### 2. Register in ActivityManagerService
In `ActivityManagerService.java`, add to the constructor or `systemReady()`:
```java
// In ActivityManagerService.java, after other Perfetto data sources are initialized:
private HprofDumpDataSource mHprofDumpDataSource;
// In systemReady() or start():
mHprofDumpDataSource = new HprofDumpDataSource(this);
```
This is the same pattern as `WindowTracingDataSource` which is created in
`WindowManagerService` and registers itself with Perfetto in its constructor.
### 3. SELinux policy (if needed)
The data source writes to `/data/local/tmp/perfetto_hprof/`. This directory
must be writable by system_server. On userdebug/eng builds this should work.
For production, a dedicated directory with proper SELinux labels may be needed.
### 4. Build file
Add `HprofDumpDataSource.java` to the appropriate `Android.bp` or
`Android.mk` for the services module.
## Trace config to test
```sh
adb shell perfetto -c - --txt <<EOF
buffers { size_kb: 262144 }
data_sources {
config {
name: "android.hprof_dump"
}
}
duration_ms: 60000
EOF
```
## Notes
- The data source uses the existing `AMS.dumpHeap()` API -- no new
system APIs needed
- The dump is async: AMS sends a binder call to the target app,
the app does the dump, then calls back
- Large hprof files (50-200MB) are split into 4MB chunks
- Bitmap PNGs are written as separate packets
- The data source cleans up temp files after writing to the trace