From 3f773678838fcc01fac09883aa951e81e1ae4387 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Tue, 18 Aug 2020 12:09:43 -0700 Subject: [PATCH] Delay turbomodulejsijni so load until we need it in TurboModulePerfLogger Summary: Twilight doesn't have TMPerfLogging enabled. However, the TurboModule infra uses the TMPerfLogger java class everywhere, which loads the turbomodulejsijni library on class load. For some reason, this class load doesn't work, and causes Twilight prod to crash. To mitigate that crash, this diff delays the so load until it's absolutely necessary, which is by the time we call jniEnableCppLogging. This should never be called in Twilight, because it doesn't have TMPerfLogging enabled. Therefore, the crash should disappear on Twilight. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D23192072 fbshipit-source-id: b73ece580e4345dbf835b0fc2f7d43b90f202411 --- .../turbomodule/core/TurboModulePerfLogger.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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 index fdb95884b3c..eb8e49d5dfd 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModulePerfLogger.java @@ -13,10 +13,7 @@ import javax.annotation.Nullable; public class TurboModulePerfLogger { @Nullable private static NativeModulePerfLogger sNativeModulePerfLogger = null; - - static { - SoLoader.loadLibrary("turbomodulejsijni"); - } + private static boolean sIsSoLibraryLoaded = false; public static void moduleDataCreateStart(String moduleName, int id) { if (sNativeModulePerfLogger != null) { @@ -80,9 +77,17 @@ public class TurboModulePerfLogger { private static native void jniEnableCppLogging(NativeModulePerfLogger perfLogger); + private static synchronized void maybeLoadSoLibrary() { + if (!sIsSoLibraryLoaded) { + SoLoader.loadLibrary("turbomodulejsijni"); + sIsSoLibraryLoaded = true; + } + } + public static void enableLogging(NativeModulePerfLogger perfLogger) { if (perfLogger != null) { sNativeModulePerfLogger = perfLogger; + maybeLoadSoLibrary(); jniEnableCppLogging(perfLogger); } }