android_sdk: Host JVM test runner for PerfettoTraceTest
Companion to tools/run_android_test (which runs the SDK test under ART on
a device or emulator). tools/run_android_sdk_host_test compiles the
upstream perfetto Java SDK against a small set of host-only stubs for the
android.* classes the SDK references, links against the standard
libperfetto_jni.so the gn+ninja pipeline produces, and runs the JUnit
suite under whatever host JVM is on PATH.
Mechanics
---------
* Stubs at src/android_sdk/java/host_stubs/ cover the only Android
symbols the SDK + test touch: dalvik.annotation.optimization.{Critical,
Fast}Native (no-op annotations), android.system.SystemCleaner (delegates
to java.lang.ref.Cleaner), android.util.{ArraySet,Log},
android.os.Process, and androidx.test.ext.junit.runners.AndroidJUnit4
(delegates to BlockJUnit4ClassRunner). Same .java sources compile and
run on both Android and host -- no codegen, no patched SDK file.
* libperfetto_jni's source set gains a conditional include path
(jdk_include_path, opt-in via tools/gn args) that wires up the host
JDK's jni.h and a small android/log.h shim under host_shims/. AOSP /
device builds are untouched because the conditional only fires when
jdk_include_path is set, which the runner does itself when the user
invokes it.
* tools/install-build-deps --java-sdk lands JUnit 4, Hamcrest, Truth,
Guava + failureaccess, protobuf-java 4.31.1 (matches protoc 31.x),
error_prone_annotations, checker-qual and j2objc-annotations in
buildtools/java_sdk_host_test/. All SHA256-pinned from Maven Central.
The flag is opt-in -- a plain tools/install-build-deps doesn't pull
Java deps, so the standard build is unaffected.
* The runner generates the Java proto codegen for the transitive
closure of imports starting from the protos PerfettoTraceTest
references, javac-compiles SDK + stubs + protos to
out/release/perfetto_sdk_host.jar, compiles the test to
perfetto_sdk_host_test.jar, and invokes JUnitCore with java.library.path
+ LD_LIBRARY_PATH pointing at out/release.
Why the macro + this runner together
------------------------------------
Running the upstream SDK natives under HotSpot requires the standard
JNIEnv*/jclass prefix on the C side; PERFETTO_JNI_HOST_PARAMS handles
that. This change adds the surrounding glue (host stubs + native build
wiring + JUnit driver) so contributors can iterate on the Java SDK on
their dev machine without a connected device or emulator. C++ tests and
benchmarks (perfetto_unittests / perfetto_benchmarks) already run on
host; this closes the same loop for the Java side.
Usage
-----
tools/install-build-deps
tools/install-build-deps --java-sdk
tools/run_android_sdk_host_test
# -> "OK (20 tests)" on HotSpot 21
Verification
------------
PerfettoTraceTest -> 20/20 PASS on host OpenJDK 21 (3.08s).
AOSP / device build path unaffected: jdk_include_path defaults to "" so
the new include_dirs and cflags blocks in libperfetto_jni_src are inert
unless the runner is in use.
Change-Id: If4b9451acc9d3381a597ef9661f245e7bcdb342b
Perfetto is an open-source suite of SDKs, daemons and tools which use tracing to help developers understand the behaviour of complex systems and root-cause functional and performance issues on client and embedded systems.
It is a production-grade tool that is the default tracing system for the Android operating system and the Chromium browser.
Perfetto is not a single tool, but a collection of components that work together:
Perfetto was designed to be a versatile and powerful tracing system for a wide range of use cases.
ftrace, allowing you to visualize scheduling, syscalls, interrupts, and custom kernel tracepoints on a timeline.chrome://tracing. Use it to debug and root-cause issues in the browser, V8, and Blink.We‘ve designed our documentation to guide you to the right information as quickly as possible, whether you’re a newcomer to performance analysis or an experienced developer.
New to tracing? If you're unfamiliar with concepts like tracing and profiling, start here:
Ready to dive in? Our “Getting Started” guide is the main entry point for all users. It will help you find the right tutorials and documentation for your specific needs:
Want the full overview? For a comprehensive look at what Perfetto is, why it's useful, and who uses it, see our main documentation page:
For users interested in the Debian distribution of Perfetto, the official source of truth and packaging efforts are maintained at Debian Perfetto Salsa Repository
Have questions? Need help?
We follow Google's Open Source Community Guidelines.