From 72c1a770fe882862f22c6def4a8931fba5b35b8a Mon Sep 17 00:00:00 2001 From: Xin Chen Date: Tue, 3 May 2022 14:47:47 -0700 Subject: [PATCH] Disable preallocation for panel apps Summary: Disable preallocation for panel apps to mitigate some crashes. Reviewed By: javache Differential Revision: D35866301 fbshipit-source-id: e6277e6be7a86682867c6a7ecfe60f7cf1ab549d --- .../facebook/react/config/ReactFeatureFlags.java | 4 ++++ .../java/com/facebook/react/fabric/jni/Binding.cpp | 13 +++++++------ .../react/fabric/jni/FabricMountingManager.cpp | 12 ++++++------ 3 files changed, 17 insertions(+), 12 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 a99fe335b1d..ceaa0f3a5c2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -94,8 +94,12 @@ public class ReactFeatureFlags { public static boolean insertZReorderBarriersOnViewGroupChildren = true; + /** Feature Flag for mitigatin concurrent root crashes */ public static boolean enableDelayedViewStateDeletion = false; + public static boolean disablePreallocationOnClone = false; + + public static boolean shouldRememberAllocatedViews = false; /** * Feature Flag to control the size of the cache used by TextLayoutManager in Fabric. Used from * JNI. diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp index 0b1a41e16a7..71bbef3fb6e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp @@ -76,11 +76,11 @@ Binding::getInspectorDataForInstance( return ReadableNativeMap::newObjectCxxArgs(result); } -bool isLargeTextMeasureCacheEnabled() { +bool getFeatureFlagValue(const char *name) { static const auto reactFeatureFlagsJavaDescriptor = jni::findClassStatic(Binding::ReactFeatureFlagsJavaDescriptor); - const auto field = reactFeatureFlagsJavaDescriptor->getStaticField( - "enableLargeTextMeasureCache"); + const auto field = + reactFeatureFlagsJavaDescriptor->getStaticField(name); return reactFeatureFlagsJavaDescriptor->getStaticFieldValue(field); } @@ -375,8 +375,8 @@ void Binding::installFabricUIManager( disableRevisionCheckForPreallocation_ = config->getBool("react_fabric:disable_revision_check_for_preallocation"); - disablePreallocationOnClone_ = config->getBool( - "react_native_new_architecture:disable_preallocation_on_clone_android"); + disablePreallocationOnClone_ = + getFeatureFlagValue("disablePreallocationOnClone"); if (enableFabricLogs_) { LOG(WARNING) << "Binding::installFabricUIManager() was called (address: " @@ -445,7 +445,8 @@ void Binding::installFabricUIManager( "react_native_new_architecture:dispatch_preallocation_in_bg"); contextContainer->insert( - "EnableLargeTextMeasureCache", isLargeTextMeasureCacheEnabled()); + "EnableLargeTextMeasureCache", + getFeatureFlagValue("enableLargeTextMeasureCache")); auto toolbox = SchedulerToolbox{}; toolbox.contextContainer = contextContainer; diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/FabricMountingManager.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/FabricMountingManager.cpp index c20eac7e544..d1991f70ba3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/FabricMountingManager.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/FabricMountingManager.cpp @@ -28,11 +28,11 @@ using namespace facebook::jni; namespace facebook { namespace react { -static bool doesUseOverflowInset() { +static bool getFeatureFlagValue(const char *name) { static const auto reactFeatureFlagsJavaDescriptor = jni::findClassStatic( FabricMountingManager::ReactFeatureFlagsJavaDescriptor); - const auto field = reactFeatureFlagsJavaDescriptor->getStaticField( - "useOverflowInset"); + const auto field = + reactFeatureFlagsJavaDescriptor->getStaticField(name); return reactFeatureFlagsJavaDescriptor->getStaticFieldValue(field); } @@ -46,9 +46,9 @@ FabricMountingManager::FabricMountingManager( config->getBool("react_fabric:disabled_view_preallocation_android")), disableRevisionCheckForPreallocation_(config->getBool( "react_fabric:disable_revision_check_for_preallocation")), - useOverflowInset_(doesUseOverflowInset()), - shouldRememberAllocatedViews_(config->getBool( - "react_native_new_architecture:remember_views_on_mount_android")), + useOverflowInset_(getFeatureFlagValue("useOverflowInset")), + shouldRememberAllocatedViews_( + getFeatureFlagValue("shouldRememberAllocatedViews")), useMapBufferForViewProps_(config->getBool( "react_native_new_architecture:use_mapbuffer_for_viewprops")) {}