Refactor RCTTurboModuleManager to take in a CallInvoker
Summary: In bridgeless mode, `RCTTurboModuleManager` is initialized with a nil bridge. This has mostly worked, since `RCTBridge` doesn't do too many things for TMM (some notifs and perf markers). The one important thing it provides is a `_jsInvoker`. In bridgeless mode, up until this point `_jsInvoker` has been nil, and turbo modules were not able to call functions on the JS thread. This diff fixes that. Reviewed By: RSNara Differential Revision: D19437174 fbshipit-source-id: 86bfc0a47bd9576e7d3203b860e86446eb0b63dd
This commit is contained in:
Родитель
dd476d0506
Коммит
459c54c407
|
@ -21,6 +21,7 @@
|
||||||
#import <React/RCTDataRequestHandler.h>
|
#import <React/RCTDataRequestHandler.h>
|
||||||
#import <React/RCTFileRequestHandler.h>
|
#import <React/RCTFileRequestHandler.h>
|
||||||
#import <React/RCTRootView.h>
|
#import <React/RCTRootView.h>
|
||||||
|
#import <ReactCommon/BridgeJSCallInvoker.h>
|
||||||
|
|
||||||
#import <cxxreact/JSExecutor.h>
|
#import <cxxreact/JSExecutor.h>
|
||||||
|
|
||||||
|
@ -114,7 +115,9 @@
|
||||||
|
|
||||||
- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
|
- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
|
||||||
{
|
{
|
||||||
_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge delegate:self];
|
_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
|
||||||
|
delegate:self
|
||||||
|
jsInvoker:std::make_shared<facebook::react::BridgeJSCallInvoker>(bridge.reactInstance)];
|
||||||
__weak __typeof(self) weakSelf = self;
|
__weak __typeof(self) weakSelf = self;
|
||||||
return std::make_unique<facebook::react::JSCExecutorFactory>([weakSelf, bridge](facebook::jsi::Runtime &runtime) {
|
return std::make_unique<facebook::react::JSCExecutorFactory>([weakSelf, bridge](facebook::jsi::Runtime &runtime) {
|
||||||
if (!bridge) {
|
if (!bridge) {
|
||||||
|
|
|
@ -38,7 +38,9 @@
|
||||||
|
|
||||||
@interface RCTTurboModuleManager : NSObject <RCTTurboModuleLookupDelegate>
|
@interface RCTTurboModuleManager : NSObject <RCTTurboModuleLookupDelegate>
|
||||||
|
|
||||||
- (instancetype)initWithBridge:(RCTBridge *)bridge delegate:(id<RCTTurboModuleManagerDelegate>)delegate;
|
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
||||||
|
delegate:(id<RCTTurboModuleManagerDelegate>)delegate
|
||||||
|
jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker;
|
||||||
|
|
||||||
- (void)installJSBindingWithRuntime:(facebook::jsi::Runtime *)runtime;
|
- (void)installJSBindingWithRuntime:(facebook::jsi::Runtime *)runtime;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#import <React/RCTLog.h>
|
#import <React/RCTLog.h>
|
||||||
#import <React/RCTModuleData.h>
|
#import <React/RCTModuleData.h>
|
||||||
#import <React/RCTPerformanceLogger.h>
|
#import <React/RCTPerformanceLogger.h>
|
||||||
#import <ReactCommon/BridgeJSCallInvoker.h>
|
|
||||||
#import <ReactCommon/TurboCxxModule.h>
|
#import <ReactCommon/TurboCxxModule.h>
|
||||||
#import <ReactCommon/TurboModuleBinding.h>
|
#import <ReactCommon/TurboModuleBinding.h>
|
||||||
|
|
||||||
|
@ -63,10 +62,12 @@ static Class getFallbackClassFromName(const char *name)
|
||||||
std::atomic<bool> _invalidating;
|
std::atomic<bool> _invalidating;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithBridge:(RCTBridge *)bridge delegate:(id<RCTTurboModuleManagerDelegate>)delegate
|
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
||||||
|
delegate:(id<RCTTurboModuleManagerDelegate>)delegate
|
||||||
|
jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
|
||||||
{
|
{
|
||||||
if (self = [super init]) {
|
if (self = [super init]) {
|
||||||
_jsInvoker = std::make_shared<react::BridgeJSCallInvoker>(bridge.reactInstance);
|
_jsInvoker = jsInvoker;
|
||||||
_delegate = delegate;
|
_delegate = delegate;
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
_invalidating = false;
|
_invalidating = false;
|
||||||
|
@ -353,10 +354,7 @@ static Class getFallbackClassFromName(const char *name)
|
||||||
[[NSNotificationCenter defaultCenter]
|
[[NSNotificationCenter defaultCenter]
|
||||||
postNotificationName:RCTDidInitializeModuleNotification
|
postNotificationName:RCTDidInitializeModuleNotification
|
||||||
object:strongBridge
|
object:strongBridge
|
||||||
userInfo:@{
|
userInfo:@{@"module" : module, @"bridge" : RCTNullIfNil([strongBridge parentBridge])}];
|
||||||
@"module" : module,
|
|
||||||
@"bridge" : RCTNullIfNil([strongBridge parentBridge])
|
|
||||||
}];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if ([[module class] respondsToSelector:@selector(requiresMainQueueSetup)] &&
|
if ([[module class] respondsToSelector:@selector(requiresMainQueueSetup)] &&
|
||||||
|
|
Загрузка…
Ссылка в новой задаче