Loading AconfigFlags.bp +6 −0 Original line number Diff line number Diff line Loading @@ -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", Loading core/java/android/os/Trace.java +13 −0 Original line number Diff line number Diff line Loading @@ -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() { } Loading Loading @@ -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(); } } core/java/android/os/flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -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" } core/jni/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ cc_library_shared_for_libandroid_runtime { shared_libs: [ "libbase", "libcutils", "libtracing_perfetto", "libharfbuzz_ng", "liblog", "libminikin", Loading Loading @@ -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 Loading core/jni/android_os_Trace.cpp +47 −61 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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); }); } Loading @@ -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); }); }); } Loading @@ -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 }, {"nativeSetAppTracingAllowed", "(Z)V", (void*)android_os_Trace_nativeSetAppTracingAllowed}, {"nativeSetTracingEnabled", "(Z)V", (void*)android_os_Trace_nativeSetTracingEnabled}, // ----------- @FastNative ---------------- { "nativeTraceCounter", "(JLjava/lang/String;J)V", {"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", {"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", {"nativeAsyncTraceEnd", "(JLjava/lang/String;I)V", (void*)android_os_Trace_nativeAsyncTraceEnd}, { "nativeAsyncTraceForTrackBegin", "(JLjava/lang/String;Ljava/lang/String;I)V", {"nativeAsyncTraceForTrackBegin", "(JLjava/lang/String;Ljava/lang/String;I)V", (void*)android_os_Trace_nativeAsyncTraceForTrackBegin}, { "nativeAsyncTraceForTrackEnd", "(JLjava/lang/String;I)V", {"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", {"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*)atrace_get_enabled_tags }, {"nativeGetEnabledTags", "()J", (void*)android_os_Trace_nativeGetEnabledTags}, }; int register_android_os_Trace(JNIEnv* env) { Loading Loading
AconfigFlags.bp +6 −0 Original line number Diff line number Diff line Loading @@ -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", Loading
core/java/android/os/Trace.java +13 −0 Original line number Diff line number Diff line Loading @@ -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() { } Loading Loading @@ -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(); } }
core/java/android/os/flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -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" }
core/jni/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ cc_library_shared_for_libandroid_runtime { shared_libs: [ "libbase", "libcutils", "libtracing_perfetto", "libharfbuzz_ng", "liblog", "libminikin", Loading Loading @@ -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 Loading
core/jni/android_os_Trace.cpp +47 −61 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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); }); } Loading @@ -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); }); }); } Loading @@ -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 }, {"nativeSetAppTracingAllowed", "(Z)V", (void*)android_os_Trace_nativeSetAppTracingAllowed}, {"nativeSetTracingEnabled", "(Z)V", (void*)android_os_Trace_nativeSetTracingEnabled}, // ----------- @FastNative ---------------- { "nativeTraceCounter", "(JLjava/lang/String;J)V", {"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", {"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", {"nativeAsyncTraceEnd", "(JLjava/lang/String;I)V", (void*)android_os_Trace_nativeAsyncTraceEnd}, { "nativeAsyncTraceForTrackBegin", "(JLjava/lang/String;Ljava/lang/String;I)V", {"nativeAsyncTraceForTrackBegin", "(JLjava/lang/String;Ljava/lang/String;I)V", (void*)android_os_Trace_nativeAsyncTraceForTrackBegin}, { "nativeAsyncTraceForTrackEnd", "(JLjava/lang/String;I)V", {"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", {"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*)atrace_get_enabled_tags }, {"nativeGetEnabledTags", "()J", (void*)android_os_Trace_nativeGetEnabledTags}, }; int register_android_os_Trace(JNIEnv* env) { Loading