From 76f41a057842fb101d3cc29d0c82c5cc144b5788 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Fri, 15 Nov 2019 16:57:17 -0800 Subject: [PATCH] Gate fix for T54997838 with a feature flag Summary: Gating fix for T54997838 behind a feature flag for experimentation. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D18534767 fbshipit-source-id: 5c0191c454fba6dd4a36d6e179959651ec197cac --- .../com/facebook/react/config/ReactFeatureFlags.java | 8 ++++++++ .../com/facebook/react/fabric/FabricUIManager.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index 031030f2faa..03665bd10cb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -70,4 +70,12 @@ public class ReactFeatureFlags { * and the CatalystInstance will always be destroyed in some future release. */ public static boolean nullifyCatalystInstanceOnDestroy = false; + + /** + * Temporary flag that should be removed soon. See FabricUIManager: if this flag is disabled, + * mountItems scheduled on the UI thread will *always* be executed synchronously. If this flag is + * enabled, users of FabricUIManager may disable immediate execution of scheduled mount items. + * TODO T54997838: remove as followup + */ + public static boolean allowDisablingImmediateExecutionOfScheduleMountItems = false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 09f1bc08511..1acbd252d97 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -533,8 +533,14 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { mMountItems.add(mountItem); } - if (mImmediatelyExecutedMountItemsOnUI && UiThreadUtil.isOnUiThread()) { - dispatchMountItems(); + if (UiThreadUtil.isOnUiThread()) { + // We only read these flags on the UI thread. + boolean immediateExecutionEnabled = + !ReactFeatureFlags.allowDisablingImmediateExecutionOfScheduleMountItems + || mImmediatelyExecutedMountItemsOnUI; + if (immediateExecutionEnabled) { + dispatchMountItems(); + } } // Post markers outside of lock and after sync mounting finishes its execution