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.