diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index ce9fe9cea9b..7ccd22a4784 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -3616,7 +3616,7 @@ public abstract interface class com/facebook/react/packagerconnection/Responder public abstract class com/facebook/react/perflogger/NativeModulePerfLogger { protected fun ()V protected abstract fun initHybrid ()Lcom/facebook/jni/HybridData; - protected fun maybeLoadOtherSoLibraries ()V + protected final fun maybeLoadOtherSoLibraries ()V public abstract fun moduleCreateCacheHit (Ljava/lang/String;I)V public abstract fun moduleCreateConstructEnd (Ljava/lang/String;I)V public abstract fun moduleCreateConstructStart (Ljava/lang/String;I)V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java deleted file mode 100644 index 7c7f9c438c1..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and 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.perflogger; - -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.jni.HybridData; -import com.facebook.soloader.SoLoader; - -@Nullsafe(Nullsafe.Mode.LOCAL) -public abstract class NativeModulePerfLogger { - private final HybridData mHybridData; - - private static volatile boolean sIsSoLibraryLoaded; - - protected abstract HybridData initHybrid(); - - protected NativeModulePerfLogger() { - maybeLoadOtherSoLibraries(); - maybeLoadSoLibrary(); - mHybridData = initHybrid(); - } - - public abstract void moduleDataCreateStart(String moduleName, int id); - - public abstract void moduleDataCreateEnd(String moduleName, int id); - - public abstract void moduleCreateStart(String moduleName, int id); - - public abstract void moduleCreateCacheHit(String moduleName, int id); - - public abstract void moduleCreateConstructStart(String moduleName, int id); - - public abstract void moduleCreateConstructEnd(String moduleName, int id); - - public abstract void moduleCreateSetUpStart(String moduleName, int id); - - public abstract void moduleCreateSetUpEnd(String moduleName, int id); - - public abstract void moduleCreateEnd(String moduleName, int id); - - public abstract void moduleCreateFail(String moduleName, int id); - - // Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context. - private static synchronized void maybeLoadSoLibrary() { - if (!sIsSoLibraryLoaded) { - SoLoader.loadLibrary("reactperfloggerjni"); - sIsSoLibraryLoaded = true; - } - } - - /** Subclasses will override this method to load their own SO libraries. */ - protected synchronized void maybeLoadOtherSoLibraries() {} -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.kt new file mode 100644 index 00000000000..ad9d3ce9450 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.kt @@ -0,0 +1,63 @@ +/* + * Copyright (c) Meta Platforms, Inc. and 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.perflogger + +import com.facebook.jni.HybridData +import com.facebook.soloader.SoLoader + +public abstract class NativeModulePerfLogger protected constructor() { + + @Suppress("NoHungarianNotation") private val mHybridData: HybridData + + init { + maybeLoadOtherSoLibraries() + maybeLoadSoLibrary() + mHybridData = initHybrid() + } + + protected abstract fun initHybrid(): HybridData + + public abstract fun moduleDataCreateStart(moduleName: String, id: Int) + + public abstract fun moduleDataCreateEnd(moduleName: String, id: Int) + + public abstract fun moduleCreateStart(moduleName: String, id: Int) + + public abstract fun moduleCreateCacheHit(moduleName: String, id: Int) + + public abstract fun moduleCreateConstructStart(moduleName: String, id: Int) + + public abstract fun moduleCreateConstructEnd(moduleName: String, id: Int) + + public abstract fun moduleCreateSetUpStart(moduleName: String, id: Int) + + public abstract fun moduleCreateSetUpEnd(moduleName: String, id: Int) + + public abstract fun moduleCreateEnd(moduleName: String, id: Int) + + public abstract fun moduleCreateFail(moduleName: String, id: Int) + + /** Subclasses will override this method to load their own SO libraries. */ + @Synchronized + protected fun maybeLoadOtherSoLibraries() { + // No-op by default. + } + + private companion object { + @Volatile private var isSoLibraryLoaded = false + + // Prevents issues with initializer interruptions. See T38996825 and D13793825 for more context. + @Synchronized + private fun maybeLoadSoLibrary() { + if (!isSoLibraryLoaded) { + SoLoader.loadLibrary("reactperfloggerjni") + isSoLibraryLoaded = true + } + } + } +}