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:
Родитель
8901d9518a
Коммит
36688d35e1
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче