blob: a08e83d023f12a73b2e576338c2dbd7d1f60d8b1 [file] [log] [blame] [view]
This directory contains code that accesses Android (hw)binder interfaces and is
dynamically loaded and used by traced_probes / perfetto command line client.
The code in this directory is built as a separate .so library and can depend on
on Android internals.
Block diagram:
```
+---------------+ +---------------------------------+
| traced_probes |- - -> | libperfetto_android_internal.so |
+---------------+ ^ +---------------+-----------------+
| |
| | [ Non-NDK libraries ]
| +-> libbase.so
| +-> libutils.so
| +-> libhidltransport.so
| +-> libhwbinder.so
| +-> android.hardware.xxx@2.0
|
+ dynamically loaded on first use via dlopen()
```
The major reason for using a separate .so() and introducing the shared library
layer is avoiding the cost of linker relocations (~150 KB private dirty)
required for loading the graph of binder-related libraries.
The general structure and rules for code in this directory is as-follows:
- Targets herein defined must be leaf targets. Dependencies to perfetto targets
(e.g. base) are not allowed, as doing that would create ODR violations.
- Headers (e.g. health_hal.h) must have a plain old C interface (to avoid
dealing with name mangling) and should not expose neither android internal
structure/types nor struct/types defined in perfetto headers outside of this
directory.
- Dependencies to Android internal headers are allowed only in .cc files, not
in headers.