From 3d1e1279767044d9b52a57f6b1a0e05bd70e99c2 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 16 Jul 2020 14:44:53 -0700 Subject: [PATCH] Refactor destruction of ReactInstanceManager during Memory Pressure in FB4A Summary: This diff refactors the destruction of the ReactInstanceManager when the app is experiencing low memory. As part of this refactor, I setup an experiment to understand at what level of memory pressure is convenient to destroy the RN bridge. The experiment is divided in six levels described in the following table: https://pxl.cl/1dzx8 https://www.internalfb.com/intern/qe2/fb4a_react_native_memory/android_fb4a_instance_unload_pressure_v2/setup changelog: [internal] Internal Reviewed By: JoshuaGross Differential Revision: D22577553 fbshipit-source-id: 37f8f561099a1ba6239795f5907090ced3b5dd18 --- .../src/main/java/com/facebook/react/ReactInstanceManager.java | 1 + .../java/com/facebook/react/bridge/CatalystInstanceImpl.java | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 3f759bd7f44..7807b98c909 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -706,6 +706,7 @@ public class ReactInstanceManager { synchronized (mHasStartedDestroying) { mHasStartedDestroying.notifyAll(); } + FLog.d(ReactConstants.TAG, "ReactInstanceManager has been destroyed"); } private synchronized void moveToResumedLifecycleState(boolean force) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index dae969346aa..a61d7f4b108 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -339,9 +339,6 @@ public class CatalystInstanceImpl implements CatalystInstance { public void destroy() { FLog.d(ReactConstants.TAG, "CatalystInstanceImpl.destroy() start"); UiThreadUtil.assertOnUiThread(); - - UiThreadUtil.assertOnUiThread(); - if (mDestroyed) { return; }