Rollout bridgelessArchitectureMemoryPressureHackyBoltsFix (#43478)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43478

This is rolled out internally already. Also exposing `memoryPressureRouter` to match the ReactInstanceManager interface.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D54802021

fbshipit-source-id: b74dcde71296d3925acfc2171d2a77d90960e15e
This commit is contained in:
Pieter De Baets
2024-03-14 10:31:37 -07:00
committed by Facebook GitHub Bot
parent 10d48134c9
commit a27e2acef4
4 changed files with 14 additions and 17 deletions
@@ -197,6 +197,7 @@ public abstract interface class com/facebook/react/ReactHost {
public abstract fun getDevSupportManager ()Lcom/facebook/react/devsupport/interfaces/DevSupportManager;
public abstract fun getJsEngineResolutionAlgorithm ()Lcom/facebook/react/JSEngineResolutionAlgorithm;
public abstract fun getLifecycleState ()Lcom/facebook/react/common/LifecycleState;
public abstract fun getMemoryPressureRouter ()Lcom/facebook/react/MemoryPressureRouter;
public abstract fun getReactQueueConfiguration ()Lcom/facebook/react/bridge/queue/ReactQueueConfiguration;
public abstract fun onActivityResult (Landroid/app/Activity;IILandroid/content/Intent;)V
public abstract fun onBackPressed ()Z
@@ -1922,7 +1923,6 @@ public class com/facebook/react/config/ReactFeatureFlags {
public static field excludeYogaFromRawProps Z
public static field rejectTurboModulePromiseOnNativeError Z
public static field traceTurboModulePromiseRejections Z
public static field unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix Z
public static field unstable_enableTurboModuleSyncVoidMethods Z
public static field unstable_useFabricInterop Z
public static field unstable_useTurboModuleInterop Z
@@ -48,6 +48,9 @@ public interface ReactHost {
/** [JSEngineResolutionAlgorithm] used by this host. */
public var jsEngineResolutionAlgorithm: JSEngineResolutionAlgorithm?
/** Routes memory pressure events to interested components */
public val memoryPressureRouter: MemoryPressureRouter
/** To be called when back button is pressed */
public fun onBackPressed(): Boolean
@@ -66,9 +66,6 @@ public class ReactFeatureFlags {
*/
public static boolean enableBridgelessArchitecture = false;
/** Server-side gating for a hacky fix to an ANR in the bridgeless core, related to Bolts task. */
public static boolean unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix = false;
/**
* Does the bridgeless architecture log soft exceptions. Could be useful for tracking down issues.
*/
@@ -135,7 +135,7 @@ public class ReactHostImpl implements ReactHost {
new ReactLifecycleStateManager(mBridgelessReactStateTracker);
private final int mId = mCounter.getAndIncrement();
private @Nullable JSEngineResolutionAlgorithm mJSEngineResolutionAlgorithm = null;
private MemoryPressureListener mMemoryPressureListener;
private @Nullable MemoryPressureListener mMemoryPressureListener;
private @Nullable DefaultHardwareBackBtnHandler mDefaultHardwareBackBtnHandler;
private final Set<Function0<Unit>> mBeforeDestroyListeners =
@@ -178,11 +178,6 @@ public class ReactHostImpl implements ReactHost {
mReactJsExceptionHandler = reactJsExceptionHandler;
mQueueThreadExceptionHandler = ReactHostImpl.this::handleHostException;
mMemoryPressureRouter = new MemoryPressureRouter(context);
mMemoryPressureListener =
level ->
callWithExistingReactInstance(
"handleMemoryPressure(" + level + ")",
reactInstance -> reactInstance.handleMemoryPressure(level));
mAllowPackagerServerAccess = allowPackagerServerAccess;
if (DEV) {
mDevSupportManager =
@@ -386,6 +381,7 @@ public class ReactHostImpl implements ReactHost {
return surface;
}
@Override
public MemoryPressureRouter getMemoryPressureRouter() {
return mMemoryPressureRouter;
}
@@ -1030,11 +1026,10 @@ public class ReactHostImpl implements ReactHost {
mUseDevSupport,
getOrCreateReactHostInspectorTarget());
if (ReactFeatureFlags
.unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix) {
mMemoryPressureListener = createMemoryPressureListener(instance);
}
mMemoryPressureRouter.addMemoryPressureListener(mMemoryPressureListener);
MemoryPressureListener memoryPressureListener =
createMemoryPressureListener(instance);
mMemoryPressureListener = memoryPressureListener;
mMemoryPressureRouter.addMemoryPressureListener(memoryPressureListener);
log(method, "Loading JS Bundle");
instance.loadJSBundle(bundleLoader);
@@ -1366,8 +1361,10 @@ public class ReactHostImpl implements ReactHost {
task -> {
reactInstanceTaskUnwrapper.unwrap(task, "4: Destroying ReactContext");
log(method, "Removing memory pressure listener");
mMemoryPressureRouter.removeMemoryPressureListener(mMemoryPressureListener);
if (mMemoryPressureListener != null) {
log(method, "Removing memory pressure listener");
mMemoryPressureRouter.removeMemoryPressureListener(mMemoryPressureListener);
}
final ReactContext reactContext = mBridgelessReactContextRef.getNullable();
if (reactContext != null) {