This directory contains code that accesses Android (hw)binder interfaces
and is dynamically loaded and used by traced_probes.
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.
