In Android 12 (upcoming)

New features

  • Support Custom Allocators. This allows developers to instrument their applications to report memory allocations / frees that are not done through the malloc-based system allocators.

Bugfixes

  • Fix problems with allocations done in signal handlers using SA_ONSTACK.
  • Fixed heapprofd for multi API. A 64-bit heapprofd service can now correctly profile a 32-bit target.
  • Fixed a bug where specifying a sampling rate of 0 would crash the target process.

In Android 11

New features

  • Allow to specify whether profiling should only be done for existing processes or only for newly spawned ones using no_startup or no_running in HeapprofdConfig.
  • Allow to get the number of bytes that were allocated at a callstack but then not used.
  • Allow to dump the maximum, rather than at the time of the dump using dump_at_max in HeapprofdConfig.
  • Allow to specify timeout (block_client_timeout_us) when blocking mode is used. This will tear down the profile if the client would be blocked for longer than this.
  • Try to auto-detect if a process uses vfork(2) or clone(2) with CLONE_VM. In Android 10, doing memory operations in a vfork-ed child (in violation of POSIX) would tear down the parent's profiling session early.

Bugfixes

  • Fixed heapprofd on x86.
  • Fixed issue with calloc being incorrectly sampled.
  • Remove benign ERROR 2 bottom-most frame on ARM32.