Use libtracing_perfetto for Trace.java calls
Test: atest libtracing_perfetto_tests
Bug: 303199244
Change-Id: I75e4b747e29c3974a8ad0b3753c36692c0c96e03
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index a80194c..48d6392 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -346,6 +346,12 @@
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 c0b4909..bebb912 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -164,6 +164,8 @@
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 @@
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 c2b6aea..943014c 100644
--- a/core/java/android/os/flags.aconfig
+++ b/core/java/android/os/flags.aconfig
@@ -134,3 +134,10 @@
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 76e7138..a0dc94f 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -93,6 +93,7 @@
shared_libs: [
"libbase",
"libcutils",
+ "libtracing_perfetto",
"libharfbuzz_ng",
"liblog",
"libminikin",
@@ -358,6 +359,7 @@
"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 ffacd9c..b579daf 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 @@
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 @@
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_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 },
+ /* name, signature, funcPtr */
+ {"nativeSetAppTracingAllowed", "(Z)V", (void*)android_os_Trace_nativeSetAppTracingAllowed},
+ {"nativeSetTracingEnabled", "(Z)V", (void*)android_os_Trace_nativeSetTracingEnabled},
- // ----------- @FastNative ----------------
+ // ----------- @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 },
+ {"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*)atrace_get_enabled_tags },
+ // ----------- @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 9d95c5b..2112dae 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -76,6 +76,7 @@
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 @@
final Context systemUiContext = activityThread.getSystemUiContext();
systemUiContext.setTheme(DEFAULT_SYSTEM_THEME);
+ Trace.registerWithPerfetto();
}
/**