1*6dbdd20aSAndroid Build Coastguard WorkerThis directory contains code that accesses Android (hw)binder interfaces and is 2*6dbdd20aSAndroid Build Coastguard Workerdynamically loaded and used by traced_probes / perfetto command line client. 3*6dbdd20aSAndroid Build Coastguard WorkerThe code in this directory is built as a separate .so library and can depend on 4*6dbdd20aSAndroid Build Coastguard Workeron Android internals. 5*6dbdd20aSAndroid Build Coastguard Worker 6*6dbdd20aSAndroid Build Coastguard WorkerBlock diagram: 7*6dbdd20aSAndroid Build Coastguard Worker 8*6dbdd20aSAndroid Build Coastguard Worker``` 9*6dbdd20aSAndroid Build Coastguard Worker+---------------+ +---------------------------------+ 10*6dbdd20aSAndroid Build Coastguard Worker| traced_probes |- - -> | libperfetto_android_internal.so | 11*6dbdd20aSAndroid Build Coastguard Worker+---------------+ ^ +---------------+-----------------+ 12*6dbdd20aSAndroid Build Coastguard Worker | | 13*6dbdd20aSAndroid Build Coastguard Worker | | [ Non-NDK libraries ] 14*6dbdd20aSAndroid Build Coastguard Worker | +-> libbase.so 15*6dbdd20aSAndroid Build Coastguard Worker | +-> libutils.so 16*6dbdd20aSAndroid Build Coastguard Worker | +-> libhidltransport.so 17*6dbdd20aSAndroid Build Coastguard Worker | +-> libhwbinder.so 18*6dbdd20aSAndroid Build Coastguard Worker | +-> [email protected] 19*6dbdd20aSAndroid Build Coastguard Worker | 20*6dbdd20aSAndroid Build Coastguard Worker + dynamically loaded on first use via dlopen() 21*6dbdd20aSAndroid Build Coastguard Worker``` 22*6dbdd20aSAndroid Build Coastguard Worker 23*6dbdd20aSAndroid Build Coastguard WorkerThe major reason for using a separate .so() and introducing the shared library 24*6dbdd20aSAndroid Build Coastguard Workerlayer is avoiding the cost of linker relocations (~150 KB private dirty) 25*6dbdd20aSAndroid Build Coastguard Workerrequired for loading the graph of binder-related libraries. 26*6dbdd20aSAndroid Build Coastguard Worker 27*6dbdd20aSAndroid Build Coastguard WorkerThe general structure and rules for code in this directory is as-follows: 28*6dbdd20aSAndroid Build Coastguard Worker- Targets herein defined must be leaf targets. Dependencies to perfetto targets 29*6dbdd20aSAndroid Build Coastguard Worker (e.g. base) are not allowed, as doing that would create ODR violations. 30*6dbdd20aSAndroid Build Coastguard Worker- Headers (e.g. health_hal.h) must have a plain old C interface (to avoid 31*6dbdd20aSAndroid Build Coastguard Worker dealing with name mangling) and should not expose neither android internal 32*6dbdd20aSAndroid Build Coastguard Worker structure/types nor struct/types defined in perfetto headers outside of this 33*6dbdd20aSAndroid Build Coastguard Worker directory. 34*6dbdd20aSAndroid Build Coastguard Worker- Dependencies to Android internal headers are allowed only in .cc files, not 35*6dbdd20aSAndroid Build Coastguard Worker in headers. 36