From e78742a9d8bcd2949be6f32cdde150f09d183258 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 14 Jun 2024 09:17:32 -0700 Subject: [PATCH] Allow native module loads during react instance init Summary: ## Context Right now, the ReactInstance construtor eagerly initializes native modules. ## Problem When these modules initialize, they may load other modules. But, all those loads will fail, because the react instance is in the process of being constructed. ## Changes Eagerly initialize modules after the react instance is created. That way, these native module requires work. Changelog: [Internal] Reviewed By: javache Differential Revision: D58537536 fbshipit-source-id: d0e424df708ec35b014f5cecda11e8756e8f4346 --- .../com/facebook/react/runtime/ReactHostImpl.java | 3 +++ .../com/facebook/react/runtime/ReactInstance.java | 12 +++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java index c00c32b8e935ac..3977478b3134a0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java @@ -1073,6 +1073,9 @@ private Task getOrCreateReactInstanceTask() { getOrCreateReactHostInspectorTarget()); mReactInstance = instance; + // eagerly initailize turbo modules + instance.initializeEagerTurboModules(); + MemoryPressureListener memoryPressureListener = createMemoryPressureListener(instance); mMemoryPressureListener = memoryPressureListener; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java index 107ada4b40ca4f..7ab1ab6952833b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java @@ -198,11 +198,6 @@ final class ReactInstance { getJSCallInvokerHolder(), getNativeMethodCallInvokerHolder()); - // Eagerly initialize TurboModules - for (String moduleName : mTurboModuleManager.getEagerInitModuleNames()) { - mTurboModuleManager.getModule(moduleName); - } - Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); // Set up Fabric @@ -300,6 +295,13 @@ final class ReactInstance { Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); } + void initializeEagerTurboModules() { + // Eagerly initialize TurboModules + for (String moduleName : mTurboModuleManager.getEagerInitModuleNames()) { + mTurboModuleManager.getModule(moduleName); + } + } + private static synchronized void loadLibraryIfNeeded() { if (!sIsLibraryLoaded) { SoLoader.loadLibrary("rninstance");