Roll out package info validation

Summary:
## Context
Every time we require a NativeModule in Java, we [first try to create it with the TurboModuleManager](https://fburl.com/diffusion/3nkjwea2). In the TurboModule infra, when a NativeModule is requested, [we first create it](https://fburl.com/diffusion/d2c6iout), then [if it's not a TurboModule, we discard the newly created object](https://fburl.com/diffusion/44gjlo6y). This is extremely wasteful, especially when a NativeModule is requested frequently and periodically, like UIManagerModule.

Therefore, in D24811838 (https://github.com/facebook/react-native/commit/803a26cb003e6b790e3a1ab31beb0c95795fff0c) fkgozali launched a fix to the infra that would avoid creating the non-TurboModule object in the first place. Today, we're launching this optimization.

Reviewed By: fkgozali

Differential Revision: D25621570

fbshipit-source-id: dedba4d5ac6fcf2ec3c31e7163a6a226065c708b
This commit is contained in:
Ramanpreet Nara
2020-12-17 17:27:09 -08:00
committed by Facebook GitHub Bot
parent 5a37773e53
commit 40115d87d4
3 changed files with 10 additions and 26 deletions
@@ -29,11 +29,6 @@ public class ReactFeatureFlags {
/** Enable TurboModule JS Codegen. */
public static volatile boolean useTurboModuleJSCodegen = false;
/**
* Enable the fix to validate the TurboReactPackage's module info before resolving a TurboModule.
*/
public static volatile boolean enableTurboModulePackageInfoValidation = false;
/*
* This feature flag enables logs for Fabric
*/
@@ -15,7 +15,6 @@ import com.facebook.react.TurboReactPackage;
import com.facebook.react.bridge.CxxModuleWrapper;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import java.util.ArrayList;
@@ -37,9 +36,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
if (reactPackage instanceof TurboReactPackage) {
TurboReactPackage pkg = (TurboReactPackage) reactPackage;
mPackages.add(pkg);
if (ReactFeatureFlags.enableTurboModulePackageInfoValidation) {
mPackageModuleInfos.put(pkg, pkg.getReactModuleInfoProvider().getReactModuleInfos());
}
mPackageModuleInfos.put(pkg, pkg.getReactModuleInfoProvider().getReactModuleInfos());
}
}
}
@@ -81,23 +78,16 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
for (final TurboReactPackage pkg : mPackages) {
try {
if (ReactFeatureFlags.enableTurboModulePackageInfoValidation) {
final ReactModuleInfo moduleInfo = mPackageModuleInfos.get(pkg).get(moduleName);
if (moduleInfo == null
|| !moduleInfo.isTurboModule()
|| resolvedModule != null && !moduleInfo.canOverrideExistingModule()) {
continue;
}
final ReactModuleInfo moduleInfo = mPackageModuleInfos.get(pkg).get(moduleName);
if (moduleInfo == null
|| !moduleInfo.isTurboModule()
|| resolvedModule != null && !moduleInfo.canOverrideExistingModule()) {
continue;
}
final NativeModule module = pkg.getModule(moduleName, mReactApplicationContext);
if (module != null) {
resolvedModule = module;
}
} else {
final NativeModule module = pkg.getModule(moduleName, mReactApplicationContext);
if (resolvedModule == null || module != null && module.canOverrideExistingModule()) {
resolvedModule = module;
}
final NativeModule module = pkg.getModule(moduleName, mReactApplicationContext);
if (module != null) {
resolvedModule = module;
}
} catch (IllegalArgumentException ex) {
/**