mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Back out "Finish the JS side of the TurboModule interop layer"
Summary: Original commit changeset: 14748b5efd73 Original Phabricator Diff: D45243456 ## Changelog: [iOS][Fixed] - Revert [TM][iOS] Finish the JS side of the TurboModule interop layer Reviewed By: NickGerleman Differential Revision: D45773199 fbshipit-source-id: c6eca141f80ba58e1212b94d3938456d5d2d20fb
This commit is contained in:
committed by
Facebook GitHub Bot
parent
3f968c801e
commit
003c175bdd
+1
-1
@@ -533,7 +533,7 @@ void ObjCInteropTurboModule::setInvocationArg(
|
||||
!jsiArg.asObject(runtime).isArray(runtime);
|
||||
if (!isPlainObject) {
|
||||
throw jsi::JSError(
|
||||
runtime, errorPrefix + "JavaScript argument must be a plain object. Got " + getType(runtime, jsiArg));
|
||||
runtime, errorPrefix + "JavaScript argument must be an object. Got " + getType(runtime, jsiArg));
|
||||
}
|
||||
|
||||
id arg = TurboModuleConvertUtils::convertJSIValueToObjCObject(runtime, jsiArg, jsInvoker_);
|
||||
|
||||
+3
-110
@@ -172,7 +172,6 @@ static Class getFallbackClassFromName(const char *name)
|
||||
*/
|
||||
std::unordered_map<std::string, ModuleHolder> _moduleHolders;
|
||||
std::unordered_map<std::string, std::shared_ptr<TurboModule>> _turboModuleCache;
|
||||
std::unordered_map<std::string, std::shared_ptr<TurboModule>> _legacyModuleCache;
|
||||
|
||||
// Enforce synchronous access into _delegate
|
||||
std::mutex _turboModuleManagerDelegateMutex;
|
||||
@@ -282,8 +281,7 @@ static Class getFallbackClassFromName(const char *name)
|
||||
/**
|
||||
* Step 2: Look for platform-specific modules.
|
||||
*/
|
||||
id<RCTBridgeModule> module =
|
||||
!RCTTurboModuleInteropEnabled() || [self _isTurboModule:moduleName] ? [self _provideObjCModule:moduleName] : nil;
|
||||
id<RCTBridgeModule> module = [self _provideObjCModule:moduleName];
|
||||
|
||||
TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName);
|
||||
|
||||
@@ -351,75 +349,6 @@ static Class getFallbackClassFromName(const char *name)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- (std::shared_ptr<TurboModule>)provideLegacyModule:(const char *)moduleName
|
||||
{
|
||||
auto legacyModuleLookup = _legacyModuleCache.find(moduleName);
|
||||
if (legacyModuleLookup != _legacyModuleCache.end()) {
|
||||
TurboModulePerfLogger::moduleJSRequireBeginningCacheHit(moduleName);
|
||||
TurboModulePerfLogger::moduleJSRequireBeginningEnd(moduleName);
|
||||
return legacyModuleLookup->second;
|
||||
}
|
||||
|
||||
TurboModulePerfLogger::moduleJSRequireBeginningEnd(moduleName);
|
||||
|
||||
// Create platform-specific native module object
|
||||
id<RCTBridgeModule> module = [self _isLegacyModule:moduleName] ? [self _provideObjCModule:moduleName] : nil;
|
||||
|
||||
TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName);
|
||||
|
||||
// If we request that a TurboModule be created, its respective ObjC class must exist
|
||||
// If the class doesn't exist, then provideRCTBridgeModule returns nil
|
||||
if (!module) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Class moduleClass = [module class];
|
||||
|
||||
dispatch_queue_t methodQueue = (dispatch_queue_t)objc_getAssociatedObject(module, &kAssociatedMethodQueueKey);
|
||||
if (methodQueue == nil) {
|
||||
RCTLogError(@"Legacy NativeModule \"%@\" was not associated with a method queue.", moduleClass);
|
||||
}
|
||||
|
||||
// Create a native call invoker from module's method queue
|
||||
std::shared_ptr<CallInvoker> nativeInvoker = std::make_shared<MethodQueueNativeCallInvoker>(methodQueue);
|
||||
|
||||
// If module is a legacy cxx module, return TurboCxxModule
|
||||
if ([moduleClass isSubclassOfClass:RCTCxxModule.class]) {
|
||||
// Use TurboCxxModule compat class to wrap the CxxModule instance.
|
||||
// This is only for migration convenience, despite less performant.
|
||||
auto turboModule = std::make_shared<TurboCxxModule>([((RCTCxxModule *)module) createModule], _jsInvoker);
|
||||
_legacyModuleCache.insert({moduleName, turboModule});
|
||||
return turboModule;
|
||||
}
|
||||
|
||||
// Create interop module
|
||||
ObjCTurboModule::InitParams params = {
|
||||
.moduleName = moduleName,
|
||||
.instance = module,
|
||||
.jsInvoker = _jsInvoker,
|
||||
.nativeInvoker = nativeInvoker,
|
||||
.isSyncModule = methodQueue == RCTJSThread,
|
||||
};
|
||||
|
||||
auto turboModule = std::make_shared<ObjCInteropTurboModule>(params);
|
||||
_legacyModuleCache.insert({moduleName, turboModule});
|
||||
return turboModule;
|
||||
}
|
||||
|
||||
- (BOOL)_isTurboModule:(const char *)moduleName
|
||||
{
|
||||
Class moduleClass = [self _getModuleClassFromName:moduleName];
|
||||
return moduleClass != nil &&
|
||||
(RCT_IS_TURBO_MODULE_CLASS(moduleClass) && ![moduleClass isSubclassOfClass:RCTCxxModule.class]);
|
||||
}
|
||||
|
||||
- (BOOL)_isLegacyModule:(const char *)moduleName
|
||||
{
|
||||
Class moduleClass = [self _getModuleClassFromName:moduleName];
|
||||
return moduleClass != nil &&
|
||||
(!RCT_IS_TURBO_MODULE_CLASS(moduleClass) || [moduleClass isSubclassOfClass:RCTCxxModule.class]);
|
||||
}
|
||||
|
||||
- (ModuleHolder *)_getOrCreateModuleHolder:(const char *)moduleName
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(_moduleHoldersMutex);
|
||||
@@ -865,43 +794,8 @@ static Class getFallbackClassFromName(const char *name)
|
||||
return turboModule;
|
||||
};
|
||||
|
||||
if (!RCTTurboModuleInteropEnabled()) {
|
||||
runtimeExecutor([turboModuleProvider = std::move(turboModuleProvider)](jsi::Runtime &runtime) {
|
||||
TurboModuleBinding::install(runtime, sTurboModuleBindingMode, std::move(turboModuleProvider));
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
auto legacyModuleProvider = [self](const std::string &name) -> std::shared_ptr<react::TurboModule> {
|
||||
auto moduleName = name.c_str();
|
||||
|
||||
TurboModulePerfLogger::moduleJSRequireBeginningStart(moduleName);
|
||||
auto moduleWasNotInitialized = ![self moduleIsInitialized:moduleName];
|
||||
|
||||
/**
|
||||
* By default, all TurboModules are long-lived.
|
||||
* Additionally, if a TurboModule with the name `name` isn't found, then we
|
||||
* trigger an assertion failure.
|
||||
*/
|
||||
auto turboModule = [self provideLegacyModule:moduleName];
|
||||
|
||||
if (moduleWasNotInitialized && [self moduleIsInitialized:moduleName]) {
|
||||
[self notifyAboutTurboModuleSetup:moduleName];
|
||||
}
|
||||
|
||||
if (turboModule) {
|
||||
TurboModulePerfLogger::moduleJSRequireEndingEnd(moduleName);
|
||||
} else {
|
||||
TurboModulePerfLogger::moduleJSRequireEndingFail(moduleName);
|
||||
}
|
||||
|
||||
return turboModule;
|
||||
};
|
||||
|
||||
runtimeExecutor([turboModuleProvider = std::move(turboModuleProvider),
|
||||
legacyModuleProvider = std::move(legacyModuleProvider)](jsi::Runtime &runtime) {
|
||||
TurboModuleBinding::install(
|
||||
runtime, sTurboModuleBindingMode, std::move(turboModuleProvider), std::move(legacyModuleProvider));
|
||||
runtimeExecutor([turboModuleProvider = std::move(turboModuleProvider)](jsi::Runtime &runtime) {
|
||||
TurboModuleBinding::install(runtime, sTurboModuleBindingMode, std::move(turboModuleProvider));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1023,7 +917,6 @@ static Class getFallbackClassFromName(const char *name)
|
||||
|
||||
_moduleHolders.clear();
|
||||
_turboModuleCache.clear();
|
||||
_legacyModuleCache.clear();
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user