diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/BUCK b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/BUCK index 50e716a39a8..721fe18d0cc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/BUCK @@ -22,6 +22,7 @@ rn_android_library( react_native_dep("third-party/java/infer-annotations:infer-annotations"), react_native_dep("third-party/java/jsr-305:jsr-305"), react_native_target("java/com/facebook/react/common:common"), + react_native_target("java/com/facebook/react/reactperflogger:reactperflogger"), react_native_target("java/com/facebook/react/turbomodule/core/jni:jni"), react_native_target("java/com/facebook/debug/holder:holder"), react_native_target("java/com/facebook/react/bridge:interfaces"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java new file mode 100644 index 00000000000..19d84a41a5a --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.turbomodule.core; + +import com.facebook.react.perflogger.NativeModulePerfLogger; +import com.facebook.soloader.SoLoader; +import javax.annotation.Nullable; + +public class TurboModulePerfLogger { + @Nullable private static NativeModulePerfLogger sNativeModulePerfLogger = null; + + static { + SoLoader.loadLibrary("turbomodulejsijni"); + } + + public static void moduleDataCreateStart(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleDataCreateStart(moduleName, id); + } + } + + public static void moduleDataCreateEnd(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleDataCreateEnd(moduleName, id); + } + } + + public static void moduleCreateStart(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateStart(moduleName, id); + } + } + + public static void moduleCreateCacheHit(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateCacheHit(moduleName, id); + } + } + + public static void moduleCreateConstructStart(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateConstructStart(moduleName, id); + } + } + + public static void moduleCreateConstructEnd(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateConstructEnd(moduleName, id); + } + } + + public static void moduleCreateSetUpStart(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateSetUpStart(moduleName, id); + } + } + + public static void moduleCreateSetUpEnd(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateSetUpEnd(moduleName, id); + } + } + + public static void moduleCreateEnd(String moduleName, int id) { + if (sNativeModulePerfLogger != null) { + sNativeModulePerfLogger.moduleCreateEnd(moduleName, id); + } + } + + private static native void jniEnableCppLogging(NativeModulePerfLogger perfLogger); + + public static void enableLogging(NativeModulePerfLogger perfLogger) { + if (perfLogger != null) { + sNativeModulePerfLogger = perfLogger; + jniEnableCppLogging(perfLogger); + } + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk index 1633f5ad878..80ba4096da6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk @@ -15,7 +15,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) LOCAL_CFLAGS += -fexceptions -frtti -std=c++14 -Wall -LOCAL_STATIC_LIBRARIES = libcallinvoker +LOCAL_STATIC_LIBRARIES = libcallinvoker libreactperfloggerjni LOCAL_SHARED_LIBRARIES = libfb libfbjni diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK index 9a7eb46af4b..84258474072 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK @@ -35,6 +35,7 @@ rn_xplat_cxx_library( ":callinvokerholder", "//xplat/jsi:jsi", react_native_xplat_target("turbomodule/core:core"), + react_native_target("java/com/facebook/react/reactperflogger/jni:jni"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp index 65dc87dd688..9cc583c7231 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/OnLoad.cpp @@ -5,15 +5,29 @@ * LICENSE file in the root directory of this source tree. */ +#include #include #include +#include #include "TurboModuleManager.h" +void jniEnableCppLogging( + jni::alias_ref cls, + jni::alias_ref + perfLogger) { + facebook::react::TurboModulePerfLogger::enableLogging( + perfLogger->cthis()->get()); +} + JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { return facebook::xplat::initialize(vm, [] { // TODO: dvacca ramanpreet unify this with the way // "ComponentDescriptorFactory" is defined in Fabric facebook::react::TurboModuleManager::registerNatives(); + + facebook::jni::registerNatives( + "com/facebook/react/turbomodule/core/TurboModulePerfLogger", + {makeNativeMethod("jniEnableCppLogging", jniEnableCppLogging)}); }); } diff --git a/ReactAndroid/src/main/jni/react/jni/Android.mk b/ReactAndroid/src/main/jni/react/jni/Android.mk index 38a51019ee0..b649da6329c 100644 --- a/ReactAndroid/src/main/jni/react/jni/Android.mk +++ b/ReactAndroid/src/main/jni/react/jni/Android.mk @@ -73,6 +73,7 @@ $(call import-module,reactperflogger) $(call import-module,hermes) $(call import-module,runtimeexecutor) +include $(REACT_SRC_DIR)/reactperflogger/jni/Android.mk include $(REACT_SRC_DIR)/turbomodule/core/jni/Android.mk # TODO(ramanpreet):