Add libperfetto_android_internal.so library to access HAL/VNDK
This CL introduces a new shared library, meant to be used
only in in-android-tree builds, to access Android internal
HAL services via hwbinder (and in future maybe other sw
binder interfaces).
The concrete use case is battery tracing (see CLs based
op top of this).
The reasons for splitting off a dedicated .so are twofold:
1) Keep non-NDK dependencies isolated in a standalone target
and avoid polluting the codebase with #ifdefs.
2) Avoid the memory impact of pulling the various VNDK .so(s)
unless necessary.
Using hwbinder requires pulling 6 (or more) .so(s), which adds
150 KB of private dirty memory at load time due to linker
relocations.
The plan is to dlopen() libperfetto_android_internal.so
only when required and unload it when unneeded.
Bug: 113076327
Change-Id: I55b76d3c6637fb3604afff6b27870418e4831aa1
diff --git a/src/android_internal/BUILD.gn b/src/android_internal/BUILD.gn
new file mode 100644
index 0000000..0930238
--- /dev/null
+++ b/src/android_internal/BUILD.gn
@@ -0,0 +1,56 @@
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import("../../gn/perfetto.gni")
+
+source_set("headers") {
+ deps = [
+ "../../gn:default_deps",
+ ]
+ sources = [
+ "health_hal.h",
+ ]
+}
+
+# This target proxies calls to Android internal libraries that are not part of
+# the NDK. See README.md.
+source_set("android_internal") {
+ visibility = [ "//:libperfetto_android_internal" ]
+ deps = [
+ ":headers",
+ "../../gn:default_deps",
+ ]
+ if (perfetto_build_with_android) {
+ sources = [
+ "health_hal.cc",
+ ]
+ libs = [
+ "android.hardware.health@2.0",
+ "base",
+ "log",
+ "hwbinder",
+ "hidlbase",
+ "hidltransport",
+ "utils",
+ ]
+ }
+
+ # This target should never depend on any other perfetto target to avoid ODR
+ # violation by doubly linking code in two .so(s) loaded in the same exe.
+ assert_no_deps = [
+ "//src/base/*",
+ "//src/tracing/*",
+ "//include/*",
+ ]
+}