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:
Riccardo Cipolleschi
2023-05-11 05:39:12 -07:00
committed by Facebook GitHub Bot
parent 3f968c801e
commit 003c175bdd
2 changed files with 4 additions and 111 deletions
@@ -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_);
@@ -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