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/RCTFileRequestHandler.h>
|
||||
#import <React/RCTRootView.h>
|
||||
#import <ReactCommon/BridgeJSCallInvoker.h>
|
||||
|
||||
#import <cxxreact/JSExecutor.h>
|
||||
|
||||
|
@ -114,7 +115,9 @@
|
|||
|
||||
- (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;
|
||||
return std::make_unique<facebook::react::JSCExecutorFactory>([weakSelf, bridge](facebook::jsi::Runtime &runtime) {
|
||||
if (!bridge) {
|
||||
|
|
|
@ -38,7 +38,9 @@
|
|||
|
||||
@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;
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#import <React/RCTLog.h>
|
||||
#import <React/RCTModuleData.h>
|
||||
#import <React/RCTPerformanceLogger.h>
|
||||
#import <ReactCommon/BridgeJSCallInvoker.h>
|
||||
#import <ReactCommon/TurboCxxModule.h>
|
||||
#import <ReactCommon/TurboModuleBinding.h>
|
||||
|
||||
|
@ -63,10 +62,12 @@ static Class getFallbackClassFromName(const char *name)
|
|||
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]) {
|
||||
_jsInvoker = std::make_shared<react::BridgeJSCallInvoker>(bridge.reactInstance);
|
||||
_jsInvoker = jsInvoker;
|
||||
_delegate = delegate;
|
||||
_bridge = bridge;
|
||||
_invalidating = false;
|
||||
|
@ -353,10 +354,7 @@ static Class getFallbackClassFromName(const char *name)
|
|||
[[NSNotificationCenter defaultCenter]
|
||||
postNotificationName:RCTDidInitializeModuleNotification
|
||||
object:strongBridge
|
||||
userInfo:@{
|
||||
@"module" : module,
|
||||
@"bridge" : RCTNullIfNil([strongBridge parentBridge])
|
||||
}];
|
||||
userInfo:@{@"module" : module, @"bridge" : RCTNullIfNil([strongBridge parentBridge])}];
|
||||
};
|
||||
|
||||
if ([[module class] respondsToSelector:@selector(requiresMainQueueSetup)] &&
|
||||
|
@ -445,11 +443,11 @@ static Class getFallbackClassFromName(const char *name)
|
|||
if (methodQueue) {
|
||||
dispatch_group_enter(moduleInvalidationGroup);
|
||||
[bridge
|
||||
dispatchBlock:^{
|
||||
[((id<RCTInvalidating>)module) invalidate];
|
||||
dispatch_group_leave(moduleInvalidationGroup);
|
||||
}
|
||||
queue:methodQueue];
|
||||
dispatchBlock:^{
|
||||
[((id<RCTInvalidating>)module) invalidate];
|
||||
dispatch_group_leave(moduleInvalidationGroup);
|
||||
}
|
||||
queue:methodQueue];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -481,10 +479,10 @@ static Class getFallbackClassFromName(const char *name)
|
|||
|
||||
// Backward-compatibility: RCTInvalidating handling, but not adhering to desired methodQueue.
|
||||
for (const auto &p : rctCacheCopy) {
|
||||
id<RCTTurboModule> module = p.second;
|
||||
if ([module respondsToSelector:@selector(invalidate)]) {
|
||||
[((id<RCTInvalidating>)module) invalidate];
|
||||
}
|
||||
id<RCTTurboModule> module = p.second;
|
||||
if ([module respondsToSelector:@selector(invalidate)]) {
|
||||
[((id<RCTInvalidating>)module) invalidate];
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче