From 8a625b665cfec91d51d6142324d72a00f0d0b7b5 Mon Sep 17 00:00:00 2001 From: Biswarup Pal <biswarupp@google.com> Date: Wed, 15 Nov 2023 14:53:32 +0000 Subject: [PATCH] Use libtracing_perfetto for Trace.java calls Test: atest libtracing_perfetto_tests Bug: 303199244 Change-Id: I75e4b747e29c3974a8ad0b3753c36692c0c96e03 --- AconfigFlags.bp | 6 + core/java/android/os/Trace.java | 13 +++ core/java/android/os/flags.aconfig | 7 ++ core/jni/Android.bp | 2 + core/jni/android_os_Trace.cpp | 108 ++++++++---------- .../java/com/android/server/SystemServer.java | 2 + 6 files changed, 77 insertions(+), 61 deletions(-) diff --git a/AconfigFlags.bp b/AconfigFlags.bp index a80194cf53d2..48d6392f8b9b 100644 --- a/AconfigFlags.bp +++ b/AconfigFlags.bp @@ -346,6 +346,12 @@ cc_aconfig_library { mode: "test", } +cc_aconfig_library { + name: "android.os.flags-aconfig-cc-host", + aconfig_declarations: "android.os.flags-aconfig", + host_supported: true, +} + // VirtualDeviceManager cc_aconfig_library { name: "android.companion.virtualdevice.flags-aconfig-cc", diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java index c0b490929c0a..bebb912bd069 100644 --- a/core/java/android/os/Trace.java +++ b/core/java/android/os/Trace.java @@ -164,6 +164,8 @@ public final class Trace { private static native void nativeInstant(long tag, String name); @FastNative private static native void nativeInstantForTrack(long tag, String trackName, String name); + @FastNative + private static native void nativeRegisterWithPerfetto(); private Trace() { } @@ -523,4 +525,15 @@ public final class Trace { nativeTraceCounter(TRACE_TAG_APP, counterName, counterValue); } } + + /** + * Initialize the perfetto SDK. This must be called before any tracing + * calls so that perfetto SDK can be used, otherwise libcutils would be + * used. + * + * @hide + */ + public static void registerWithPerfetto() { + nativeRegisterWithPerfetto(); + } } diff --git a/core/java/android/os/flags.aconfig b/core/java/android/os/flags.aconfig index c2b6aeaa29be..943014caeb09 100644 --- a/core/java/android/os/flags.aconfig +++ b/core/java/android/os/flags.aconfig @@ -134,3 +134,10 @@ flag { is_fixed_read_only: true bug: "324241334" } + +flag { + namespace: "system_performance" + name: "perfetto_sdk_tracing" + description: "Tracing using Perfetto SDK." + bug: "303199244" +} diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 76e71380017c..a0dc94f22c31 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -93,6 +93,7 @@ cc_library_shared_for_libandroid_runtime { shared_libs: [ "libbase", "libcutils", + "libtracing_perfetto", "libharfbuzz_ng", "liblog", "libminikin", @@ -358,6 +359,7 @@ cc_library_shared_for_libandroid_runtime { "libimage_io", "libultrahdr", "libperfetto_c", + "libtracing_perfetto", ], export_shared_lib_headers: [ // our headers include libnativewindow's public headers diff --git a/core/jni/android_os_Trace.cpp b/core/jni/android_os_Trace.cpp index ffacd9c8a95b..b579daf505e7 100644 --- a/core/jni/android_os_Trace.cpp +++ b/core/jni/android_os_Trace.cpp @@ -14,11 +14,11 @@ * limitations under the License. */ +#include <cutils/compiler.h> #include <jni.h> - -#include <cutils/trace.h> #include <log/log.h> #include <nativehelper/JNIHelp.h> +#include <tracing_perfetto.h> #include <array> @@ -59,33 +59,30 @@ inline static void withString(JNIEnv* env, jstring jstr, F callback) { static void android_os_Trace_nativeTraceCounter(JNIEnv* env, jclass, jlong tag, jstring nameStr, jlong value) { - withString(env, nameStr, [tag, value](const char* str) { - atrace_int64(tag, str, value); - }); + withString(env, nameStr, + [tag, value](const char* str) { tracing_perfetto::traceCounter(tag, str, value); }); } static void android_os_Trace_nativeTraceBegin(JNIEnv* env, jclass, jlong tag, jstring nameStr) { - withString(env, nameStr, [tag](const char* str) { - atrace_begin(tag, str); - }); + withString(env, nameStr, [tag](const char* str) { tracing_perfetto::traceBegin(tag, str); }); } static void android_os_Trace_nativeTraceEnd(JNIEnv*, jclass, jlong tag) { - atrace_end(tag); + tracing_perfetto::traceEnd(tag); } static void android_os_Trace_nativeAsyncTraceBegin(JNIEnv* env, jclass, jlong tag, jstring nameStr, jint cookie) { withString(env, nameStr, [tag, cookie](const char* str) { - atrace_async_begin(tag, str, cookie); + tracing_perfetto::traceAsyncBegin(tag, str, cookie); }); } static void android_os_Trace_nativeAsyncTraceEnd(JNIEnv* env, jclass, jlong tag, jstring nameStr, jint cookie) { withString(env, nameStr, [tag, cookie](const char* str) { - atrace_async_end(tag, str, cookie); + tracing_perfetto::traceAsyncEnd(tag, str, cookie); }); } @@ -93,7 +90,7 @@ static void android_os_Trace_nativeAsyncTraceForTrackBegin(JNIEnv* env, jclass, jlong tag, jstring trackStr, jstring nameStr, jint cookie) { withString(env, trackStr, [env, tag, nameStr, cookie](const char* track) { withString(env, nameStr, [tag, track, cookie](const char* name) { - atrace_async_for_track_begin(tag, track, name, cookie); + tracing_perfetto::traceAsyncBeginForTrack(tag, name, track, cookie); }); }); } @@ -101,77 +98,66 @@ static void android_os_Trace_nativeAsyncTraceForTrackBegin(JNIEnv* env, jclass, static void android_os_Trace_nativeAsyncTraceForTrackEnd(JNIEnv* env, jclass, jlong tag, jstring trackStr, jint cookie) { withString(env, trackStr, [tag, cookie](const char* track) { - atrace_async_for_track_end(tag, track, cookie); + tracing_perfetto::traceAsyncEndForTrack(tag, track, cookie); }); } static void android_os_Trace_nativeSetAppTracingAllowed(JNIEnv*, jclass, jboolean allowed) { - atrace_update_tags(); + // no-op } static void android_os_Trace_nativeSetTracingEnabled(JNIEnv*, jclass, jboolean enabled) { - atrace_set_tracing_enabled(enabled); + // no-op } static void android_os_Trace_nativeInstant(JNIEnv* env, jclass, jlong tag, jstring nameStr) { - withString(env, nameStr, [tag](const char* str) { - atrace_instant(tag, str); - }); + withString(env, nameStr, [tag](const char* str) { tracing_perfetto::traceInstant(tag, str); }); } static void android_os_Trace_nativeInstantForTrack(JNIEnv* env, jclass, jlong tag, jstring trackStr, jstring nameStr) { withString(env, trackStr, [env, tag, nameStr](const char* track) { withString(env, nameStr, [tag, track](const char* name) { - atrace_instant_for_track(tag, track, name); + tracing_perfetto::traceInstantForTrack(tag, track, name); }); }); } +static jlong android_os_Trace_nativeGetEnabledTags(JNIEnv* env) { + return tracing_perfetto::getEnabledCategories(); +} + +static void android_os_Trace_nativeRegisterWithPerfetto(JNIEnv* env) { + tracing_perfetto::registerWithPerfetto(); +} + static const JNINativeMethod gTraceMethods[] = { - /* name, signature, funcPtr */ - { "nativeSetAppTracingAllowed", - "(Z)V", - (void*)android_os_Trace_nativeSetAppTracingAllowed }, - { "nativeSetTracingEnabled", - "(Z)V", - (void*)android_os_Trace_nativeSetTracingEnabled }, - - // ----------- @FastNative ---------------- - - { "nativeTraceCounter", - "(JLjava/lang/String;J)V", - (void*)android_os_Trace_nativeTraceCounter }, - { "nativeTraceBegin", - "(JLjava/lang/String;)V", - (void*)android_os_Trace_nativeTraceBegin }, - { "nativeTraceEnd", - "(J)V", - (void*)android_os_Trace_nativeTraceEnd }, - { "nativeAsyncTraceBegin", - "(JLjava/lang/String;I)V", - (void*)android_os_Trace_nativeAsyncTraceBegin }, - { "nativeAsyncTraceEnd", - "(JLjava/lang/String;I)V", - (void*)android_os_Trace_nativeAsyncTraceEnd }, - { "nativeAsyncTraceForTrackBegin", - "(JLjava/lang/String;Ljava/lang/String;I)V", - (void*)android_os_Trace_nativeAsyncTraceForTrackBegin }, - { "nativeAsyncTraceForTrackEnd", - "(JLjava/lang/String;I)V", - (void*)android_os_Trace_nativeAsyncTraceForTrackEnd }, - { "nativeInstant", - "(JLjava/lang/String;)V", - (void*)android_os_Trace_nativeInstant }, - { "nativeInstantForTrack", - "(JLjava/lang/String;Ljava/lang/String;)V", - (void*)android_os_Trace_nativeInstantForTrack }, - - // ----------- @CriticalNative ---------------- - { "nativeGetEnabledTags", - "()J", - (void*)atrace_get_enabled_tags }, + /* name, signature, funcPtr */ + {"nativeSetAppTracingAllowed", "(Z)V", (void*)android_os_Trace_nativeSetAppTracingAllowed}, + {"nativeSetTracingEnabled", "(Z)V", (void*)android_os_Trace_nativeSetTracingEnabled}, + + // ----------- @FastNative ---------------- + + {"nativeTraceCounter", "(JLjava/lang/String;J)V", + (void*)android_os_Trace_nativeTraceCounter}, + {"nativeTraceBegin", "(JLjava/lang/String;)V", (void*)android_os_Trace_nativeTraceBegin}, + {"nativeTraceEnd", "(J)V", (void*)android_os_Trace_nativeTraceEnd}, + {"nativeAsyncTraceBegin", "(JLjava/lang/String;I)V", + (void*)android_os_Trace_nativeAsyncTraceBegin}, + {"nativeAsyncTraceEnd", "(JLjava/lang/String;I)V", + (void*)android_os_Trace_nativeAsyncTraceEnd}, + {"nativeAsyncTraceForTrackBegin", "(JLjava/lang/String;Ljava/lang/String;I)V", + (void*)android_os_Trace_nativeAsyncTraceForTrackBegin}, + {"nativeAsyncTraceForTrackEnd", "(JLjava/lang/String;I)V", + (void*)android_os_Trace_nativeAsyncTraceForTrackEnd}, + {"nativeInstant", "(JLjava/lang/String;)V", (void*)android_os_Trace_nativeInstant}, + {"nativeInstantForTrack", "(JLjava/lang/String;Ljava/lang/String;)V", + (void*)android_os_Trace_nativeInstantForTrack}, + {"nativeRegisterWithPerfetto", "()V", (void*)android_os_Trace_nativeRegisterWithPerfetto}, + + // ----------- @CriticalNative ---------------- + {"nativeGetEnabledTags", "()J", (void*)android_os_Trace_nativeGetEnabledTags}, }; int register_android_os_Trace(JNIEnv* env) { diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 9d95c5b4f649..2112dae0f311 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -76,6 +76,7 @@ import android.os.ServiceManager; import android.os.StrictMode; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.IStorageManager; @@ -1089,6 +1090,7 @@ public final class SystemServer implements Dumpable { final Context systemUiContext = activityThread.getSystemUiContext(); systemUiContext.setTheme(DEFAULT_SYSTEM_THEME); + Trace.registerWithPerfetto(); } /** -- GitLab