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

Commit 69a31608 authored by Pablo Gamito's avatar Pablo Gamito Committed by Android (Google) Code Review
Browse files

Merge "Add logging to Perfetto Java API native" into main

parents 40b11e85 f668feb6
Loading
Loading
Loading
Loading
+52 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

#define LOG_TAG "Perfetto"
#define LOG_TAG "NativeJavaPerfettoDs"

#include "android_tracing_PerfettoDataSource.h"

@@ -166,16 +166,25 @@ jobject PerfettoDataSource::createIncrementalStateGlobalRef(JNIEnv* env,

void PerfettoDataSource::trace(JNIEnv* env, jobject traceFunction) {
    PERFETTO_DS_TRACE(dataSource, ctx) {
        ALOG(LOG_DEBUG, LOG_TAG, "\tin native trace callback function %p", this);
        TlsState* tls_state =
                reinterpret_cast<TlsState*>(PerfettoDsGetCustomTls(&dataSource, &ctx));
        IncrementalState* incr_state = reinterpret_cast<IncrementalState*>(
                PerfettoDsGetIncrementalState(&dataSource, &ctx));

        ALOG(LOG_DEBUG, LOG_TAG, "\t tls_state = %p", tls_state);
        ALOG(LOG_DEBUG, LOG_TAG, "\t incr_state = %p", incr_state);

        ALOG(LOG_DEBUG, LOG_TAG, "\t tls_state->jobj = %p", tls_state->jobj);
        ALOG(LOG_DEBUG, LOG_TAG, "\t incr_state->jobj = %p", incr_state->jobj);

        ScopedLocalRef<jobject> jCtx(env,
                                     env->NewObject(gTracingContextClassInfo.clazz,
                                                    gTracingContextClassInfo.init, &ctx,
                                                    tls_state->jobj, incr_state->jobj));

        ALOG(LOG_DEBUG, LOG_TAG, "\t jCtx = %p", jCtx.get());

        jclass objclass = env->GetObjectClass(traceFunction);
        jmethodID method =
                env->GetMethodID(objclass, "trace", "(Landroid/tracing/perfetto/TracingContext;)V");
@@ -209,7 +218,9 @@ PerfettoDataSource::~PerfettoDataSource() {

jlong nativeCreate(JNIEnv* env, jclass clazz, jobject javaDataSource, jstring name) {
    const char* nativeString = env->GetStringUTFChars(name, 0);
    ALOG(LOG_DEBUG, LOG_TAG, "nativeCreate(%p, %s)", javaDataSource, nativeString);
    PerfettoDataSource* dataSource = new PerfettoDataSource(env, javaDataSource, nativeString);
    ALOG(LOG_DEBUG, LOG_TAG, "\tdatasource* = %p", dataSource);
    env->ReleaseStringUTFChars(name, nativeString);

    dataSource->incStrong((void*)nativeCreate);
@@ -218,33 +229,39 @@ jlong nativeCreate(JNIEnv* env, jclass clazz, jobject javaDataSource, jstring na
}

void nativeDestroy(void* ptr) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeCreate(%p)", ptr);
    PerfettoDataSource* dataSource = reinterpret_cast<PerfettoDataSource*>(ptr);
    dataSource->decStrong((void*)nativeCreate);
}

static jlong nativeGetFinalizer(JNIEnv* /* env */, jclass /* clazz */) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeGetFinalizer()");
    return static_cast<jlong>(reinterpret_cast<uintptr_t>(&nativeDestroy));
}

void nativeTrace(JNIEnv* env, jclass clazz, jlong dataSourcePtr, jobject traceFunctionInterface) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeTrace(%p)", (void*)dataSourcePtr);
    sp<PerfettoDataSource> datasource = reinterpret_cast<PerfettoDataSource*>(dataSourcePtr);

    datasource->trace(env, traceFunctionInterface);
}

void nativeFlush(JNIEnv* env, jclass clazz, jobject jCtx, jlong ctxPtr) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeFlush(%p, %p)", jCtx, (void*)ctxPtr);
    auto* ctx = reinterpret_cast<struct PerfettoDsTracerIterator*>(ctxPtr);
    traceAllPendingPackets(env, jCtx, ctx);
    PerfettoDsTracerFlush(ctx, nullptr, nullptr);
}

void nativeFlushAll(JNIEnv* env, jclass clazz, jlong ptr) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeFlushAll(%p)", (void*)ptr);
    sp<PerfettoDataSource> datasource = reinterpret_cast<PerfettoDataSource*>(ptr);
    datasource->flushAll();
}

void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
                              int buffer_exhausted_policy) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeRegisterDataSource(%p)", (void*)datasource_ptr);
    sp<PerfettoDataSource> datasource = reinterpret_cast<PerfettoDataSource*>(datasource_ptr);

    struct PerfettoDsParams params = PerfettoDsParamsDefault();
@@ -267,6 +284,9 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        auto* datasource_instance =
                new PerfettoDataSourceInstance(env, java_data_source_instance.get(), inst_id);

        ALOG(LOG_DEBUG, LOG_TAG, "on_setup_cb ds=%p, ds_instance=%p", datasource,
             datasource_instance);

        return static_cast<void*>(datasource_instance);
    };

@@ -280,6 +300,8 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,

        auto* tls_state = new TlsState(java_tls_state);

        ALOG(LOG_DEBUG, LOG_TAG, "on_create_tls_cb ds=%p, tsl_state=%p", datasource, tls_state);

        return static_cast<void*>(tls_state);
    };

@@ -287,6 +309,9 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6);

        TlsState* tls_state = reinterpret_cast<TlsState*>(ptr);

        ALOG(LOG_DEBUG, LOG_TAG, "on_delete_tls_cb %p", tls_state);

        env->DeleteGlobalRef(tls_state->jobj);
        delete tls_state;
    };
@@ -299,6 +324,9 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        jobject java_incr_state = datasource->createIncrementalStateGlobalRef(env, inst_id);

        auto* incr_state = new IncrementalState(java_incr_state);

        ALOG(LOG_DEBUG, LOG_TAG, "on_create_incr_cb ds=%p, incr_state=%p", datasource, incr_state);

        return static_cast<void*>(incr_state);
    };

@@ -306,6 +334,9 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6);

        IncrementalState* incr_state = reinterpret_cast<IncrementalState*>(ptr);

        ALOG(LOG_DEBUG, LOG_TAG, "on_delete_incr_cb incr_state=%p", incr_state);

        env->DeleteGlobalRef(incr_state->jobj);
        delete incr_state;
    };
@@ -315,6 +346,9 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6);

        auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(inst_ctx);

        ALOG(LOG_DEBUG, LOG_TAG, "on_start_cb ds_instance=%p", datasource_instance);

        datasource_instance->onStart(env);
    };

@@ -323,6 +357,9 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6);

        auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(inst_ctx);

        ALOG(LOG_DEBUG, LOG_TAG, "on_flush_cb ds_instance=%p", datasource_instance);

        datasource_instance->onFlush(env);
    };

@@ -331,12 +368,18 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,
        JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6);

        auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(inst_ctx);

        ALOG(LOG_DEBUG, LOG_TAG, "on_stop_cb ds_instance=%p", datasource_instance);

        datasource_instance->onStop(env);
    };

    params.on_destroy_cb = [](struct PerfettoDsImpl* ds_impl, void* user_arg,
                              void* inst_ctx) -> void {
        auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(inst_ctx);

        ALOG(LOG_DEBUG, LOG_TAG, "on_destroy_cb ds_instance=%p", datasource_instance);

        delete datasource_instance;
    };

@@ -345,20 +388,28 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr,

jobject nativeGetPerfettoInstanceLocked(JNIEnv* env, jclass clazz, jlong dataSourcePtr,
                                        PerfettoDsInstanceIndex instance_idx) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeGetPerfettoInstanceLocked ds=%p, idx=%d", (void*)dataSourcePtr,
         instance_idx);
    sp<PerfettoDataSource> datasource = reinterpret_cast<PerfettoDataSource*>(dataSourcePtr);
    auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(
            PerfettoDsImplGetInstanceLocked(datasource->dataSource.impl, instance_idx));

    if (datasource_instance == nullptr) {
        // datasource instance doesn't exist
        ALOG(LOG_WARN, LOG_TAG,
             "DS instance invalid!! nativeGetPerfettoInstanceLocked returning NULL");
        return nullptr;
    }

    ALOG(LOG_DEBUG, LOG_TAG, "\tnativeGetPerfettoInstanceLocked got lock ds=%p, idx=%d",
         (void*)dataSourcePtr, instance_idx);
    return datasource_instance->GetJavaDataSourceInstance();
}

void nativeReleasePerfettoInstanceLocked(JNIEnv* env, jclass clazz, jlong dataSourcePtr,
                                         PerfettoDsInstanceIndex instance_idx) {
    ALOG(LOG_DEBUG, LOG_TAG, "nativeReleasePerfettoInstanceLocked got lock ds=%p, idx=%d",
         (void*)dataSourcePtr, instance_idx);
    sp<PerfettoDataSource> datasource = reinterpret_cast<PerfettoDataSource*>(dataSourcePtr);
    PerfettoDsImplReleaseInstanceLocked(datasource->dataSource.impl, instance_idx);
}
+0 −2
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
 * limitations under the License.
 */

#define LOG_TAG "Perfetto"

#include <android_runtime/AndroidRuntime.h>
#include <android_runtime/Log.h>
#include <nativehelper/JNIHelp.h>
+0 −2
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
 * limitations under the License.
 */

#define LOG_TAG "Perfetto"

#include <android_runtime/AndroidRuntime.h>
#include <android_runtime/Log.h>
#include <nativehelper/JNIHelp.h>