From 43807f04fe2efa2653b647b25a3bc97225cbd669 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 20 Sep 2019 10:48:50 -0700 Subject: [PATCH] Give TurboModules access to the native CallInvoker Summary: Self explanatory. 1. **Existing:** We create the NativeModules thread in CatalystInstanceImpl.cpp. 2. D17422165: We wrap this thread in a `BridgeNativeCallInvoker`. 3. D17422164: We use `CatalystInstanceImpl::getNativeCallInvokerHolder()` to get a hold of the `BridgeNitiveCallInvoker` in Java. 4. D17422163: From Java, we pass this `CallInvokerHolder` to `TurboModuleManager`'s constructor. 5. **This diff:** `TurboModuleManager` then unwraps the `CallInvoker` from `CallInvokerHolder`, and passes it to all TurboModules in their constructor. Reviewed By: PeteTheHeat Differential Revision: D17422160 fbshipit-source-id: c0a76dfe5fdedac2e0e21f7a562bc7588dc190fb --- .../core/jni/ReactCommon/TurboModuleManager.cpp | 2 +- .../core/jni/ReactCommon/TurboModuleManagerDelegate.h | 2 +- .../turbomodule/core/platform/android/JavaTurboModule.cpp | 7 +++++-- .../turbomodule/core/platform/android/JavaTurboModule.h | 4 +++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.cpp b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.cpp index cfc5e37d310..acaae54701e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.cpp @@ -84,7 +84,7 @@ void TurboModuleManager::installJSIBindings() { auto moduleInstance = getJavaModule(javaPart_.get(), name); if (moduleInstance) { - auto turboModule = delegate_->cthis()->getTurboModule(name, moduleInstance, jsCallInvoker_); + auto turboModule = delegate_->cthis()->getTurboModule(name, moduleInstance, jsCallInvoker_, nativeCallInvoker_); turboModuleCache_.insert({name, turboModule}); return turboModule; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManagerDelegate.h b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManagerDelegate.h index b8c7d5718f2..aa271eb7b60 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManagerDelegate.h +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManagerDelegate.h @@ -20,7 +20,7 @@ class TurboModuleManagerDelegate : public jni::HybridClass getTurboModule(std::string name, jni::alias_ref turboModule, std::shared_ptr jsInvoker) = 0; + virtual std::shared_ptr getTurboModule(std::string name, jni::alias_ref turboModule, std::shared_ptr jsInvoker, std::shared_ptr nativeInvoker) = 0; virtual std::shared_ptr getTurboModule(std::string name, std::shared_ptr jsInvoker) = 0; private: diff --git a/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.cpp b/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.cpp index ce7e0d2a01f..7573893de9d 100644 --- a/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.cpp +++ b/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.cpp @@ -26,8 +26,11 @@ namespace react { JavaTurboModule::JavaTurboModule( const std::string &name, jni::alias_ref instance, - std::shared_ptr jsInvoker) - : TurboModule(name, jsInvoker), instance_(jni::make_global(instance)) {} + std::shared_ptr jsInvoker, + std::shared_ptr nativeInvoker) + : TurboModule(name, jsInvoker), + instance_(jni::make_global(instance)), + nativeInvoker_(nativeInvoker) {} jni::local_ref JavaTurboModule::createJavaCallbackFromJSIFunction( diff --git a/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.h b/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.h index 90056eb3c73..a4a970e46c5 100644 --- a/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.h +++ b/ReactCommon/turbomodule/core/platform/android/JavaTurboModule.h @@ -29,7 +29,8 @@ class JSI_EXPORT JavaTurboModule : public TurboModule { JavaTurboModule( const std::string &name, jni::alias_ref instance, - std::shared_ptr jsInvoker); + std::shared_ptr jsInvoker, + std::shared_ptr nativeInvoker); jsi::Value invokeJavaMethod( jsi::Runtime &runtime, TurboModuleMethodValueKind valueKind, @@ -48,6 +49,7 @@ class JSI_EXPORT JavaTurboModule : public TurboModule { private: jni::global_ref instance_; std::unordered_set> callbackWrappers_; + std::shared_ptr nativeInvoker_; /** * This method must be called from the JS Thread, since it accesses