Skip to content

Commit a27e2ac

Browse files
javachefacebook-github-bot
authored andcommitted
Rollout bridgelessArchitectureMemoryPressureHackyBoltsFix (#43478)
Summary: Pull Request resolved: #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
1 parent 10d4813 commit a27e2ac

File tree

4 files changed

+14
-17
lines changed

4 files changed

+14
-17
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ public abstract interface class com/facebook/react/ReactHost {
197197
public abstract fun getDevSupportManager ()Lcom/facebook/react/devsupport/interfaces/DevSupportManager;
198198
public abstract fun getJsEngineResolutionAlgorithm ()Lcom/facebook/react/JSEngineResolutionAlgorithm;
199199
public abstract fun getLifecycleState ()Lcom/facebook/react/common/LifecycleState;
200+
public abstract fun getMemoryPressureRouter ()Lcom/facebook/react/MemoryPressureRouter;
200201
public abstract fun getReactQueueConfiguration ()Lcom/facebook/react/bridge/queue/ReactQueueConfiguration;
201202
public abstract fun onActivityResult (Landroid/app/Activity;IILandroid/content/Intent;)V
202203
public abstract fun onBackPressed ()Z
@@ -1922,7 +1923,6 @@ public class com/facebook/react/config/ReactFeatureFlags {
19221923
public static field excludeYogaFromRawProps Z
19231924
public static field rejectTurboModulePromiseOnNativeError Z
19241925
public static field traceTurboModulePromiseRejections Z
1925-
public static field unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix Z
19261926
public static field unstable_enableTurboModuleSyncVoidMethods Z
19271927
public static field unstable_useFabricInterop Z
19281928
public static field unstable_useTurboModuleInterop Z

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public interface ReactHost {
4848
/** [JSEngineResolutionAlgorithm] used by this host. */
4949
public var jsEngineResolutionAlgorithm: JSEngineResolutionAlgorithm?
5050

51+
/** Routes memory pressure events to interested components */
52+
public val memoryPressureRouter: MemoryPressureRouter
53+
5154
/** To be called when back button is pressed */
5255
public fun onBackPressed(): Boolean
5356

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ public class ReactFeatureFlags {
6666
*/
6767
public static boolean enableBridgelessArchitecture = false;
6868

69-
/** Server-side gating for a hacky fix to an ANR in the bridgeless core, related to Bolts task. */
70-
public static boolean unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix = false;
71-
7269
/**
7370
* Does the bridgeless architecture log soft exceptions. Could be useful for tracking down issues.
7471
*/

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public class ReactHostImpl implements ReactHost {
135135
new ReactLifecycleStateManager(mBridgelessReactStateTracker);
136136
private final int mId = mCounter.getAndIncrement();
137137
private @Nullable JSEngineResolutionAlgorithm mJSEngineResolutionAlgorithm = null;
138-
private MemoryPressureListener mMemoryPressureListener;
138+
private @Nullable MemoryPressureListener mMemoryPressureListener;
139139
private @Nullable DefaultHardwareBackBtnHandler mDefaultHardwareBackBtnHandler;
140140

141141
private final Set<Function0<Unit>> mBeforeDestroyListeners =
@@ -178,11 +178,6 @@ public ReactHostImpl(
178178
mReactJsExceptionHandler = reactJsExceptionHandler;
179179
mQueueThreadExceptionHandler = ReactHostImpl.this::handleHostException;
180180
mMemoryPressureRouter = new MemoryPressureRouter(context);
181-
mMemoryPressureListener =
182-
level ->
183-
callWithExistingReactInstance(
184-
"handleMemoryPressure(" + level + ")",
185-
reactInstance -> reactInstance.handleMemoryPressure(level));
186181
mAllowPackagerServerAccess = allowPackagerServerAccess;
187182
if (DEV) {
188183
mDevSupportManager =
@@ -386,6 +381,7 @@ public ReactSurface createSurface(
386381
return surface;
387382
}
388383

384+
@Override
389385
public MemoryPressureRouter getMemoryPressureRouter() {
390386
return mMemoryPressureRouter;
391387
}
@@ -1030,11 +1026,10 @@ private Task<ReactInstance> getOrCreateReactInstanceTask() {
10301026
mUseDevSupport,
10311027
getOrCreateReactHostInspectorTarget());
10321028

1033-
if (ReactFeatureFlags
1034-
.unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix) {
1035-
mMemoryPressureListener = createMemoryPressureListener(instance);
1036-
}
1037-
mMemoryPressureRouter.addMemoryPressureListener(mMemoryPressureListener);
1029+
MemoryPressureListener memoryPressureListener =
1030+
createMemoryPressureListener(instance);
1031+
mMemoryPressureListener = memoryPressureListener;
1032+
mMemoryPressureRouter.addMemoryPressureListener(memoryPressureListener);
10381033

10391034
log(method, "Loading JS Bundle");
10401035
instance.loadJSBundle(bundleLoader);
@@ -1366,8 +1361,10 @@ private Task<ReactInstance> getOrCreateReloadTask(String reason) {
13661361
task -> {
13671362
reactInstanceTaskUnwrapper.unwrap(task, "4: Destroying ReactContext");
13681363

1369-
log(method, "Removing memory pressure listener");
1370-
mMemoryPressureRouter.removeMemoryPressureListener(mMemoryPressureListener);
1364+
if (mMemoryPressureListener != null) {
1365+
log(method, "Removing memory pressure listener");
1366+
mMemoryPressureRouter.removeMemoryPressureListener(mMemoryPressureListener);
1367+
}
13711368

13721369
final ReactContext reactContext = mBridgelessReactContextRef.getNullable();
13731370
if (reactContext != null) {

0 commit comments

Comments
 (0)