diff --git a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm index 3557485f5fdb60..df069c0865553b 100644 --- a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm +++ b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm @@ -264,10 +264,6 @@ - (RCTScheduler *)_createScheduler CoreFeatures::enablePropIteratorSetter = true; } - if (reactNativeConfig && reactNativeConfig->getBool("react_fabric:use_native_state")) { - CoreFeatures::useNativeState = true; - } - if (reactNativeConfig && reactNativeConfig->getBool("react_fabric:cancel_image_downloads_on_recycle")) { CoreFeatures::cancelImageDownloadsOnRecycle = true; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index e7de36ee272534..ee685a42215448 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -129,12 +129,6 @@ public class ReactFeatureFlags { */ public static boolean reduceDeleteCreateMutation = false; - /** - * Use JSI NativeState API to store references to native objects rather than the more expensive - * HostObject pattern - */ - public static boolean useNativeState = false; - /** Report mount operations from the host platform to notify mount hooks. */ public static boolean enableMountHooks = false; diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.cpp index 27e48acbf3b8e7..0f89b1ee8fe29b 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.cpp @@ -414,7 +414,6 @@ void Binding::installFabricUIManager( CoreFeatures::enablePropIteratorSetter = getFeatureFlagValue("enableCppPropsIteratorSetter"); - CoreFeatures::useNativeState = getFeatureFlagValue("useNativeState"); CoreFeatures::doNotSwapLeftAndRightOnAndroidInLTR = getFeatureFlagValue("doNotSwapLeftAndRightOnAndroidInLTR"); CoreFeatures::enableCleanParagraphYogaNode = diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h index 70422a0866577a..1531a99aa472fc 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h @@ -13,23 +13,12 @@ namespace facebook::react { -struct TaskWrapper : public jsi::HostObject { - TaskWrapper(const std::shared_ptr& task) : task(task) {} - - std::shared_ptr task; -}; - inline static jsi::Value valueFromTask( jsi::Runtime& runtime, std::shared_ptr task) { - if (CoreFeatures::useNativeState) { - jsi::Object obj(runtime); - obj.setNativeState(runtime, std::move(task)); - return obj; - } else { - return jsi::Object::createFromHostObject( - runtime, std::make_shared(task)); - } + jsi::Object obj(runtime); + obj.setNativeState(runtime, std::move(task)); + return obj; } inline static std::shared_ptr taskFromValue( @@ -38,12 +27,7 @@ inline static std::shared_ptr taskFromValue( if (value.isNull()) { return nullptr; } - - if (CoreFeatures::useNativeState) { - return value.getObject(runtime).getNativeState(runtime); - } else { - return value.getObject(runtime).getHostObject(runtime)->task; - } + return value.getObject(runtime).getNativeState(runtime); } } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index 4a434560a4fe7d..135dc5516a9af1 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -37,7 +37,6 @@ namespace facebook::react { // "key function" for the ShadowNodeWrapper class -- this allow for RTTI to work // properly across dynamic library boundaries (i.e. dynamic_cast that is used by // isHostObject method) -ShadowNodeWrapper::~ShadowNodeWrapper() = default; ShadowNodeListWrapper::~ShadowNodeListWrapper() = default; static std::unique_ptr constructLeakCheckerIfNeeded( diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h b/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h index ce36f64bd5a465..b8e0f9fc2f1f07 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h @@ -17,7 +17,6 @@ #include #include #include -#include namespace facebook::react { @@ -31,19 +30,7 @@ struct EventHandlerWrapper : public EventHandler { jsi::Function callback; }; -struct ShadowNodeWrapper : public jsi::HostObject { - ShadowNodeWrapper(ShadowNode::Shared shadowNode) - : shadowNode(std::move(shadowNode)) {} - - // The below method needs to be implemented out-of-line in order for the class - // to have at least one "key function" (see - // https://itanium-cxx-abi.github.io/cxx-abi/abi.html#vague-vtable) - ~ShadowNodeWrapper() override; - - ShadowNode::Shared shadowNode; -}; - -struct ShadowNodeListWrapper : public jsi::HostObject, public jsi::NativeState { +struct ShadowNodeListWrapper : public jsi::NativeState { ShadowNodeListWrapper(ShadowNode::UnsharedListOfShared shadowNodeList) : shadowNodeList(std::move(shadowNodeList)) {} @@ -62,28 +49,17 @@ inline static ShadowNode::Shared shadowNodeFromValue( return nullptr; } - if (CoreFeatures::useNativeState) { - return value.getObject(runtime).getNativeState(runtime); - } else { - return value.getObject(runtime) - .getHostObject(runtime) - ->shadowNode; - } + return value.getObject(runtime).getNativeState(runtime); } inline static jsi::Value valueFromShadowNode( jsi::Runtime& runtime, ShadowNode::Shared shadowNode) { - if (CoreFeatures::useNativeState) { - jsi::Object obj(runtime); - // Need to const_cast since JSI only allows non-const pointees - obj.setNativeState( - runtime, std::const_pointer_cast(std::move(shadowNode))); - return obj; - } else { - return jsi::Object::createFromHostObject( - runtime, std::make_shared(std::move(shadowNode))); - } + jsi::Object obj(runtime); + // Need to const_cast since JSI only allows non-const pointees + obj.setNativeState( + runtime, std::const_pointer_cast(std::move(shadowNode))); + return obj; } // TODO: once we no longer need to mutate the return value (appendChildToSet) @@ -112,13 +88,8 @@ inline static ShadowNode::UnsharedListOfShared shadowNodeListFromValue( ; } } else { - if (CoreFeatures::useNativeState) { - return object.getNativeState(runtime) - ->shadowNodeList; - } else { - return object.getHostObject(runtime) - ->shadowNodeList; - } + return object.getNativeState(runtime) + ->shadowNodeList; } } @@ -127,15 +98,11 @@ inline static jsi::Value valueFromShadowNodeList( ShadowNode::UnsharedListOfShared shadowNodeList) { auto wrapper = std::make_shared(std::move(shadowNodeList)); - if (CoreFeatures::useNativeState) { - // Use the wrapper for NativeState too, otherwise we can't implement - // the marker interface. Could be simplified to a simple struct wrapper. - jsi::Object obj(runtime); - obj.setNativeState(runtime, std::move(wrapper)); - return obj; - } else { - return jsi::Object::createFromHostObject(runtime, std::move(wrapper)); - } + // Use the wrapper for NativeState too, otherwise we can't implement + // the marker interface. Could be simplified to a simple struct wrapper. + jsi::Object obj(runtime); + obj.setNativeState(runtime, std::move(wrapper)); + return obj; } inline static ShadowNode::UnsharedListOfShared shadowNodeListFromWeakList( diff --git a/packages/react-native/ReactCommon/react/utils/CoreFeatures.cpp b/packages/react-native/ReactCommon/react/utils/CoreFeatures.cpp index 80bd5287c5b602..cdc24ae9c3b75e 100644 --- a/packages/react-native/ReactCommon/react/utils/CoreFeatures.cpp +++ b/packages/react-native/ReactCommon/react/utils/CoreFeatures.cpp @@ -11,7 +11,6 @@ namespace facebook::react { bool CoreFeatures::enablePropIteratorSetter = false; bool CoreFeatures::blockPaintForUseLayoutEffect = false; -bool CoreFeatures::useNativeState = false; bool CoreFeatures::cacheLastTextMeasurement = false; bool CoreFeatures::cancelImageDownloadsOnRecycle = false; bool CoreFeatures::enableGranularScrollViewStateUpdatesIOS = false; diff --git a/packages/react-native/ReactCommon/react/utils/CoreFeatures.h b/packages/react-native/ReactCommon/react/utils/CoreFeatures.h index 082631b485bc15..62a9a139ab3450 100644 --- a/packages/react-native/ReactCommon/react/utils/CoreFeatures.h +++ b/packages/react-native/ReactCommon/react/utils/CoreFeatures.h @@ -24,10 +24,6 @@ class CoreFeatures { // when a transaction is mounted. static bool blockPaintForUseLayoutEffect; - // Whether to use Hermes' NativeState instead of HostObject - // in simple data passing scenarios with JS - static bool useNativeState; - // Yoga might measure multiple times the same Text with the same constraints // This flag enables a caching mechanism to avoid subsequents measurements // of the same Text with the same constrainst.