Remove module cache from ReactPackageTurboModuleManagerDelegate

Summary:
This cache is unnecessary, because:
1. TurboModuleManager caches all created TurboModules
2. TurboModuleManager calls into the TurboModuleManagerDelegate at most once per NativeModule `moduleName`.

This diff also makes ReactPackageTurboModuleManager thread-safe, which should help get rid of the crashes in T46487253.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D21027998

fbshipit-source-id: c9b5ccc3da7b81787b749e70aa5e55883317eed7
This commit is contained in:
Ramanpreet Nara 2020-04-14 18:24:23 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 8901d9518a
Коммит 36688d35e1
1 изменённых файлов: 3 добавлений и 19 удалений

Просмотреть файл

@ -18,13 +18,10 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModuleManagerDelegate {
private final List<TurboReactPackage> mPackages = new ArrayList<>();
private final Map<String, TurboModule> mModules = new HashMap<>();
private final ReactApplicationContext mReactApplicationContext;
protected ReactPackageTurboModuleManagerDelegate(
@ -69,11 +66,8 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
return (CxxModuleWrapper) module;
}
@Nullable
private TurboModule resolveModule(String moduleName) {
if (mModules.containsKey(moduleName)) {
return mModules.get(moduleName);
}
NativeModule resolvedModule = null;
for (final TurboReactPackage pkg : mPackages) {
@ -92,20 +86,10 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule
}
if (resolvedModule instanceof TurboModule) {
mModules.put(moduleName, (TurboModule) resolvedModule);
} else {
/**
* 1. The list of TurboReactPackages doesn't change. 2. TurboReactPackage.getModule is
* deterministic. Therefore, any two invocations of TurboReactPackage.getModule will return
* the same result given that they're provided the same arguments.
*
* <p>Hence, if module lookup fails once, we know it'll fail every time. Therefore, we can
* write null to the mModules Map and avoid doing this extra work.
*/
mModules.put(moduleName, null);
return (TurboModule) resolvedModule;
}
return mModules.get(moduleName);
return null;
}
@Override