From e3367354cc93f17b830ed8dc601dff5e87748dd1 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Tue, 11 May 2021 12:56:19 -0700 Subject: [PATCH] Use ReactFeatureFlags to enable mapBuffer in C++ Summary: This diff refactors the way we are populating the 'MapBufferSerializationEnabled' context cointainer key to use ReactFeatureFlags instead of MobileConfig. This is necessary to make sure we always use a consistent value between C++ and Java. e.g. to prevent SEV like S230730 set different values in java and c++ code changelog: [internal] internal Reviewed By: JoshuaGross Differential Revision: D28360679 fbshipit-source-id: baef9d53f84de25c5671483dcd995674bfa61984 --- .../java/com/facebook/react/fabric/jni/Binding.cpp | 13 ++++++++++--- .../java/com/facebook/react/fabric/jni/Binding.h | 3 +++ 2 files changed, 13 insertions(+), 3 deletions(-) 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 631d20ee8cd..d1781bda770 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 @@ -462,6 +462,9 @@ 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); @@ -530,10 +533,14 @@ 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", - reactNativeConfig_->getBool( - "react_fabric:enable_mapbuffer_serialization_android")); + "MapBufferSerializationEnabled", mapBufferSerializationEnabled); disablePreallocateViews_ = reactNativeConfig_->getBool( "react_fabric:disabled_view_preallocation_android"); diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h index b16bd9dc636..df0aeeb45aa 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h @@ -76,6 +76,9 @@ class Binding : public jni::HybridClass, constexpr static auto UIManagerJavaDescriptor = "com/facebook/react/fabric/FabricUIManager"; + constexpr static auto ReactFeatureFlagsJavaDescriptor = + "com/facebook/react/config/ReactFeatureFlags"; + static void registerNatives(); private: