From aafdf9fee1c32721a803bdfa1ce84f5aabc8fb8a Mon Sep 17 00:00:00 2001 From: David Vacca Date: Tue, 11 May 2021 14:09:36 -0700 Subject: [PATCH] Refactor access of ReactFeatureFlags from C++ Summary: This diff is a follow up of D28360679 (https://github.com/facebook/react-native/commit/e3367354cc93f17b830ed8dc601dff5e87748dd1), here we refactor the access of ReactFeatureFlags from C++ to use methods instead of fields changelog: [internal] internal Reviewed By: JoshuaGross Differential Revision: D28362066 fbshipit-source-id: caed5e7fddeb6c0d9846fb037152befa8f1ed5c2 --- .../react/config/ReactFeatureFlags.java | 14 +++++++++--- .../com/facebook/react/fabric/jni/Binding.cpp | 22 ++++++++++--------- .../views/text/ReactTextViewManager.java | 2 +- 3 files changed, 24 insertions(+), 14 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 43c16011521..2b257e7e7f1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -60,9 +60,6 @@ public class ReactFeatureFlags { /** Enables JS Responder in Fabric */ public static boolean enableJSResponder = false; - /** Enables MapBuffer Serialization */ - public static boolean mapBufferSerializationEnabled = false; - /** An interface used to compute flags on demand. */ public interface FlagProvider { boolean get(); @@ -75,6 +72,17 @@ public class ReactFeatureFlags { enableRuntimeExecutorFlushingProvider = provider; } + private static boolean mapBufferSerializationEnabled = false; + + /** Enables or disables MapBuffer Serialization */ + public static void setMapBufferSerializationEnabled(boolean enabled) { + mapBufferSerializationEnabled = enabled; + } + + public static boolean isMapBufferSerializationEnabled() { + return mapBufferSerializationEnabled; + } + public static boolean enableRuntimeExecutorFlushing() { if (enableRuntimeExecutorFlushingProvider != null) { return enableRuntimeExecutorFlushingProvider.get(); 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 d1781bda770..078ab334ff0 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 @@ -453,6 +453,17 @@ void Binding::setConstraints( } } +bool isMapBufferSerializationEnabled() { + static const auto reactFeatureFlagsJavaDescriptor = + jni::findClassStatic(Binding::ReactFeatureFlagsJavaDescriptor); + static const auto isMapBufferSerializationEnabledMethod = + reactFeatureFlagsJavaDescriptor->getStaticMethod( + "isMapBufferSerializationEnabled"); + bool value = + isMapBufferSerializationEnabledMethod(reactFeatureFlagsJavaDescriptor); + return value; +} + void Binding::installFabricUIManager( jni::alias_ref runtimeExecutorHolder, jni::alias_ref javaUIManager, @@ -462,9 +473,6 @@ void Binding::installFabricUIManager( jni::alias_ref reactNativeConfig) { SystraceSection s("FabricUIManagerBinding::installFabricUIManager"); - static const auto reactFeatureFlagsJavaDescriptor = - jni::findClassStatic(Binding::ReactFeatureFlagsJavaDescriptor); - std::shared_ptr config = std::make_shared(reactNativeConfig); @@ -533,14 +541,8 @@ void Binding::installFabricUIManager( // Keep reference to config object and cache some feature flags here reactNativeConfig_ = config; - static const auto mapBufferSerializationEnabledField = - reactFeatureFlagsJavaDescriptor->getStaticField( - "mapBufferSerializationEnabled"); - bool mapBufferSerializationEnabled = - reactFeatureFlagsJavaDescriptor->getStaticFieldValue( - mapBufferSerializationEnabledField); contextContainer->insert( - "MapBufferSerializationEnabled", mapBufferSerializationEnabled); + "MapBufferSerializationEnabled", isMapBufferSerializationEnabled()); disablePreallocateViews_ = reactNativeConfig_->getBool( "react_fabric:disabled_view_preallocation_android"); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java index ba871e1679f..f4f618c5ef9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java @@ -95,7 +95,7 @@ public class ReactTextViewManager return null; } - if (ReactFeatureFlags.mapBufferSerializationEnabled) { + if (ReactFeatureFlags.isMapBufferSerializationEnabled()) { ReadableMapBuffer stateMapBuffer = stateWrapper.getStatDataMapBuffer(); if (stateMapBuffer != null) { return getReactTextUpdate(view, props, stateMapBuffer);