From 003c175bddc85bf1da732d1d8ce6617ed853e8b8 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Thu, 11 May 2023 05:39:12 -0700 Subject: [PATCH] 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 --- .../ios/ReactCommon/RCTInteropTurboModule.mm | 2 +- .../ios/ReactCommon/RCTTurboModuleManager.mm | 113 +----------------- 2 files changed, 4 insertions(+), 111 deletions(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm index 9bd3395d37d..1425907c5da 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm @@ -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_); diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm index 87c3e9019ba..18d8459cdcd 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm @@ -172,7 +172,6 @@ static Class getFallbackClassFromName(const char *name) */ std::unordered_map _moduleHolders; std::unordered_map> _turboModuleCache; - std::unordered_map> _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 module = - !RCTTurboModuleInteropEnabled() || [self _isTurboModule:moduleName] ? [self _provideObjCModule:moduleName] : nil; + id module = [self _provideObjCModule:moduleName]; TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName); @@ -351,75 +349,6 @@ static Class getFallbackClassFromName(const char *name) return nullptr; } -- (std::shared_ptr)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 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 nativeInvoker = std::make_shared(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([((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(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 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 { - 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