Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a625b66 authored by Biswarup Pal's avatar Biswarup Pal
Browse files

Use libtracing_perfetto for Trace.java calls

Test: atest libtracing_perfetto_tests
Bug: 303199244
Change-Id: I75e4b747e29c3974a8ad0b3753c36692c0c96e03
parent b4d80752
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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",
+13 −0
Original line number Diff line number Diff line
@@ -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();
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -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"
}
+2 −0
Original line number Diff line number Diff line
@@ -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
+47 −61
Original line number Diff line number Diff line
@@ -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 },
        {"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