From 280f37336dbf7c17ed191561b5f58cdca086c5d1 Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Tue, 13 Feb 2024 02:10:19 -0800 Subject: [PATCH] Update InspectorFlags to source from ReactNativeFeatureFlags (#42665) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42665 - Replace the internals of `InspectorFlags` to use the new `ReactNativeFeatureFlags` setup. - Remove call sites to `InspectorFlags::initFromConfig`. After this diff, all `InspectorFlags` are configured from `ReactNativeFeatureFlags.json`. Changelog: [Internal] Reviewed By: rubennorte Differential Revision: D53049790 fbshipit-source-id: 90c2b128a9c316546c3f8f8f88e2c08a9f55ae72 --- .../featureflags/ReactNativeFeatureFlags.kt | 14 +++- .../ReactNativeFeatureFlagsCxxAccessor.kt | 22 ++++++- .../ReactNativeFeatureFlagsCxxInterop.kt | 6 +- .../ReactNativeFeatureFlagsDefaults.kt | 6 +- .../ReactNativeFeatureFlagsLocalAccessor.kt | 24 ++++++- .../ReactNativeFeatureFlagsProvider.kt | 6 +- .../JReactNativeFeatureFlagsCxxInterop.cpp | 30 ++++++++- .../JReactNativeFeatureFlagsCxxInterop.h | 8 ++- .../jsinspector-modern/CMakeLists.txt | 1 + .../jsinspector-modern/InspectorFlags.cpp | 66 +++++++++---------- .../jsinspector-modern/InspectorFlags.h | 20 ++---- .../React-jsinspector.podspec | 2 +- .../react/config/ReactNativeConfig.cpp | 6 -- .../featureflags/ReactNativeFeatureFlags.cpp | 10 ++- .../featureflags/ReactNativeFeatureFlags.h | 12 +++- .../ReactNativeFeatureFlagsAccessor.cpp | 38 ++++++++++- .../ReactNativeFeatureFlagsAccessor.h | 8 ++- .../ReactNativeFeatureFlagsDefaults.h | 10 ++- .../ReactNativeFeatureFlagsProvider.h | 4 +- .../NativeReactNativeFeatureFlags.cpp | 12 +++- .../NativeReactNativeFeatureFlags.h | 6 +- .../ReactNativeFeatureFlags.config.js | 10 +++ .../NativeReactNativeFeatureFlags.js | 4 +- .../featureflags/ReactNativeFeatureFlags.js | 12 +++- packages/rn-tester/Podfile.lock | 3 +- 25 files changed, 265 insertions(+), 75 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index d47e219cc72..487f43d409c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -76,6 +76,18 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun enableFixForClippedSubviewsCrash(): Boolean = accessor.enableFixForClippedSubviewsCrash() + /** + * Flag determining if the C++ implementation of InspectorPackagerConnection should be used instead of the per-platform one. This flag is global and should not be changed across React Host lifetimes. + */ + @JvmStatic + public fun inspectorEnableCxxInspectorPackagerConnection(): Boolean = accessor.inspectorEnableCxxInspectorPackagerConnection() + + /** + * Flag determining if the modern CDP backend should be enabled. This flag is global and should not be changed across React Host lifetimes. + */ + @JvmStatic + public fun inspectorEnableModernCDPRegistry(): Boolean = accessor.inspectorEnableModernCDPRegistry() + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 0b8fb53e296..3e38e9f251c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8d6196766629d3361922502553fd1d2b>> + * @generated SignedSource<<11824621ee7ca5dbdf2f09bdf1a1f983>> */ /** @@ -28,6 +28,8 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso private var enableSpannableBuildingUnificationCache: Boolean? = null private var enableCustomDrawOrderFabricCache: Boolean? = null private var enableFixForClippedSubviewsCrashCache: Boolean? = null + private var inspectorEnableCxxInspectorPackagerConnectionCache: Boolean? = null + private var inspectorEnableModernCDPRegistryCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -101,6 +103,24 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso return cached } + override fun inspectorEnableCxxInspectorPackagerConnection(): Boolean { + var cached = inspectorEnableCxxInspectorPackagerConnectionCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.inspectorEnableCxxInspectorPackagerConnection() + inspectorEnableCxxInspectorPackagerConnectionCache = cached + } + return cached + } + + override fun inspectorEnableModernCDPRegistry(): Boolean { + var cached = inspectorEnableModernCDPRegistryCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.inspectorEnableModernCDPRegistry() + inspectorEnableModernCDPRegistryCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider): Unit = ReactNativeFeatureFlagsCxxInterop.override(provider as Any) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index d92b6897b5b..d3518e6cba0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<42f8526cf5c3ca10ac068c3bc30433ca>> + * @generated SignedSource<> */ /** @@ -44,6 +44,10 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun enableFixForClippedSubviewsCrash(): Boolean + @DoNotStrip @JvmStatic public external fun inspectorEnableCxxInspectorPackagerConnection(): Boolean + + @DoNotStrip @JvmStatic public external fun inspectorEnableModernCDPRegistry(): Boolean + @DoNotStrip @JvmStatic public external fun override(provider: Any) @DoNotStrip @JvmStatic public external fun dangerouslyReset() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 233fb23d169..e75ba65f44d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<28e35777aa2f03b7bd07472ce80aade2>> + * @generated SignedSource<> */ /** @@ -38,4 +38,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun enableCustomDrawOrderFabric(): Boolean = false override fun enableFixForClippedSubviewsCrash(): Boolean = false + + override fun inspectorEnableCxxInspectorPackagerConnection(): Boolean = false + + override fun inspectorEnableModernCDPRegistry(): Boolean = false } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index 880712c4f55..2fcc689a55e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<63356ad414e641eae11ca07b1a876fd3>> */ /** @@ -32,6 +32,8 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces private var enableSpannableBuildingUnificationCache: Boolean? = null private var enableCustomDrawOrderFabricCache: Boolean? = null private var enableFixForClippedSubviewsCrashCache: Boolean? = null + private var inspectorEnableCxxInspectorPackagerConnectionCache: Boolean? = null + private var inspectorEnableModernCDPRegistryCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -113,6 +115,26 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun inspectorEnableCxxInspectorPackagerConnection(): Boolean { + var cached = inspectorEnableCxxInspectorPackagerConnectionCache + if (cached == null) { + cached = currentProvider.inspectorEnableCxxInspectorPackagerConnection() + accessedFeatureFlags.add("inspectorEnableCxxInspectorPackagerConnection") + inspectorEnableCxxInspectorPackagerConnectionCache = cached + } + return cached + } + + override fun inspectorEnableModernCDPRegistry(): Boolean { + var cached = inspectorEnableModernCDPRegistryCache + if (cached == null) { + cached = currentProvider.inspectorEnableModernCDPRegistry() + accessedFeatureFlags.add("inspectorEnableModernCDPRegistry") + inspectorEnableModernCDPRegistryCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider) { if (accessedFeatureFlags.isNotEmpty()) { val accessedFeatureFlagsStr = accessedFeatureFlags.joinToString(separator = ", ") { it } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index ba1b0b9a62c..2d4561cc3e6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -38,4 +38,8 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun enableCustomDrawOrderFabric(): Boolean @DoNotStrip public fun enableFixForClippedSubviewsCrash(): Boolean + + @DoNotStrip public fun inspectorEnableCxxInspectorPackagerConnection(): Boolean + + @DoNotStrip public fun inspectorEnableModernCDPRegistry(): Boolean } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 9fb718fe8ad..15061428a2a 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -87,6 +87,18 @@ class ReactNativeFeatureFlagsProviderHolder return method(javaProvider_); } + bool inspectorEnableCxxInspectorPackagerConnection() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("inspectorEnableCxxInspectorPackagerConnection"); + return method(javaProvider_); + } + + bool inspectorEnableModernCDPRegistry() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("inspectorEnableModernCDPRegistry"); + return method(javaProvider_); + } + private: jni::global_ref javaProvider_; }; @@ -131,6 +143,16 @@ bool JReactNativeFeatureFlagsCxxInterop::enableFixForClippedSubviewsCrash( return ReactNativeFeatureFlags::enableFixForClippedSubviewsCrash(); } +bool JReactNativeFeatureFlagsCxxInterop::inspectorEnableCxxInspectorPackagerConnection( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::inspectorEnableCxxInspectorPackagerConnection(); +} + +bool JReactNativeFeatureFlagsCxxInterop::inspectorEnableModernCDPRegistry( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry(); +} + void JReactNativeFeatureFlagsCxxInterop::override( facebook::jni::alias_ref /*unused*/, jni::alias_ref provider) { @@ -172,6 +194,12 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "enableFixForClippedSubviewsCrash", JReactNativeFeatureFlagsCxxInterop::enableFixForClippedSubviewsCrash), + makeNativeMethod( + "inspectorEnableCxxInspectorPackagerConnection", + JReactNativeFeatureFlagsCxxInterop::inspectorEnableCxxInspectorPackagerConnection), + makeNativeMethod( + "inspectorEnableModernCDPRegistry", + JReactNativeFeatureFlagsCxxInterop::inspectorEnableModernCDPRegistry), }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index c665a5552a1..ff7881e09e4 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -54,6 +54,12 @@ class JReactNativeFeatureFlagsCxxInterop static bool enableFixForClippedSubviewsCrash( facebook::jni::alias_ref); + static bool inspectorEnableCxxInspectorPackagerConnection( + facebook::jni::alias_ref); + + static bool inspectorEnableModernCDPRegistry( + facebook::jni::alias_ref); + static void override( facebook::jni::alias_ref, jni::alias_ref provider); diff --git a/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt b/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt index e7c355763e3..ee8290b0743 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt +++ b/packages/react-native/ReactCommon/jsinspector-modern/CMakeLists.txt @@ -21,4 +21,5 @@ target_include_directories(jsinspector PUBLIC ${REACT_COMMON_DIR}) target_link_libraries(jsinspector folly_runtime glog + react_featureflags ) diff --git a/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.cpp b/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.cpp index d47ca79f0f0..b0e3b4fb17b 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.cpp @@ -5,11 +5,11 @@ * LICENSE file in the root directory of this source tree. */ -#include -#include - #include "InspectorFlags.h" +#include +#include + namespace facebook::react::jsinspector_modern { InspectorFlags& InspectorFlags::getInstance() { @@ -17,44 +17,42 @@ InspectorFlags& InspectorFlags::getInstance() { return instance; } -void InspectorFlags::initFromConfig( - const ReactNativeConfig& reactNativeConfig) { - bool enableModernCDPRegistry = - reactNativeConfig.getBool("react_native_devx:enable_modern_cdp_registry"); - if (enableModernCDPRegistry_.has_value()) { - assert( - *enableModernCDPRegistry_ == enableModernCDPRegistry && - "Flag value was changed after init"); - } - enableModernCDPRegistry_ = enableModernCDPRegistry; - bool enableCxxInspectorPackagerConnection = reactNativeConfig.getBool( - "react_native_devx:enable_cxx_inspector_packager_connection"); - if (enableCxxInspectorPackagerConnection_.has_value()) { - assert( - *enableCxxInspectorPackagerConnection_ == - enableCxxInspectorPackagerConnection && - "Flag value was changed after init"); - } - enableCxxInspectorPackagerConnection_ = enableCxxInspectorPackagerConnection; -} +InspectorFlags::InspectorFlags() + : enableModernCDPRegistry_( + ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry()), + enableCxxInspectorPackagerConnection_( + ReactNativeFeatureFlags:: + inspectorEnableCxxInspectorPackagerConnection()) {} bool InspectorFlags::getEnableModernCDPRegistry() const { - if (!enableModernCDPRegistry_.has_value()) { - LOG(WARNING) - << "InspectorFlags::getEnableModernCDPRegistry was called before init"; - } - return enableModernCDPRegistry_.value_or(false); + assertFlagsMatchUpstream(); + return enableModernCDPRegistry_; } bool InspectorFlags::getEnableCxxInspectorPackagerConnection() const { - if (!enableCxxInspectorPackagerConnection_.has_value()) { - LOG(WARNING) - << "InspectorFlags::getEnableCxxInspectorPackagerConnection was called before init"; - } - return enableCxxInspectorPackagerConnection_.value_or(false) || + assertFlagsMatchUpstream(); + return enableCxxInspectorPackagerConnection_ || // If we are using the modern CDP registry, then we must also use the C++ // InspectorPackagerConnection implementation. - getEnableModernCDPRegistry(); + enableModernCDPRegistry_; +} + +void InspectorFlags::assertFlagsMatchUpstream() const { + if (inconsistentFlagsStateLogged_) { + return; + } + + if (enableModernCDPRegistry_ != + ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry() || + enableCxxInspectorPackagerConnection_ != + ReactNativeFeatureFlags:: + inspectorEnableCxxInspectorPackagerConnection()) { + LOG(ERROR) + << "[InspectorFlags] Error: One or more ReactNativeFeatureFlags values " + << "have changed during the global app lifetime. This may lead to " + << "inconsistent inspector behaviour. Please quit and restart the app."; + inconsistentFlagsStateLogged_ = true; + } } } // namespace facebook::react::jsinspector_modern diff --git a/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.h b/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.h index bf5195e3261..605fad31723 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/InspectorFlags.h @@ -9,25 +9,16 @@ #include -#include - namespace facebook::react::jsinspector_modern { /** * A container for all inspector related feature flags (Meyers singleton - * pattern). Flags must be set before they are accessed and are static for the - * lifetime of the app. + * pattern). Enforces that flag values are static for the lifetime of the app. */ class InspectorFlags { public: static InspectorFlags& getInstance(); - /** - * Initialize flags from a `ReactNativeConfig` instance. Validates that flag - * values are not changed across multiple calls. - */ - void initFromConfig(const ReactNativeConfig& reactNativeConfig); - /** * Flag determining if the modern CDP backend should be enabled. */ @@ -40,13 +31,16 @@ class InspectorFlags { bool getEnableCxxInspectorPackagerConnection() const; private: - InspectorFlags() = default; + InspectorFlags(); InspectorFlags(const InspectorFlags&) = delete; InspectorFlags& operator=(const InspectorFlags&) = delete; ~InspectorFlags() = default; - std::optional enableModernCDPRegistry_; - std::optional enableCxxInspectorPackagerConnection_; + const bool enableModernCDPRegistry_; + const bool enableCxxInspectorPackagerConnection_; + + mutable bool inconsistentFlagsStateLogged_; + void assertFlagsMatchUpstream() const; }; } // namespace facebook::react::jsinspector_modern diff --git a/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec b/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec index 3d444daa222..53089c6ca95 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec +++ b/packages/react-native/ReactCommon/jsinspector-modern/React-jsinspector.podspec @@ -49,6 +49,6 @@ Pod::Spec.new do |s| s.dependency "glog" s.dependency "RCT-Folly", folly_version - s.dependency "React-nativeconfig" + s.dependency "React-featureflags" s.dependency "DoubleConversion" end diff --git a/packages/react-native/ReactCommon/react/config/ReactNativeConfig.cpp b/packages/react-native/ReactCommon/react/config/ReactNativeConfig.cpp index 2fbf85bbbab..9b52a2bb8e3 100644 --- a/packages/react-native/ReactCommon/react/config/ReactNativeConfig.cpp +++ b/packages/react-native/ReactCommon/react/config/ReactNativeConfig.cpp @@ -16,12 +16,6 @@ bool EmptyReactNativeConfig::getBool(const std::string& param) const { if (param == "react_fabric:enabled_automatic_interop_android") { return true; } - if (param == "react_native_devx:enable_modern_cdp_registry") { - return false; - } - if (param == "react_native_devx:enable_cxx_inspector_packager_connection") { - return false; - } return false; } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index fdeb4a2d833..caec5678dd7 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<28d4d1d52be9cb5dccd5a3802df64fc3>> + * @generated SignedSource<<82f226df2b3824d03b755a042b20bec5>> */ /** @@ -53,6 +53,14 @@ bool ReactNativeFeatureFlags::enableFixForClippedSubviewsCrash() { return getAccessor().enableFixForClippedSubviewsCrash(); } +bool ReactNativeFeatureFlags::inspectorEnableCxxInspectorPackagerConnection() { + return getAccessor().inspectorEnableCxxInspectorPackagerConnection(); +} + +bool ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry() { + return getAccessor().inspectorEnableModernCDPRegistry(); +} + void ReactNativeFeatureFlags::override( std::unique_ptr provider) { getAccessor().override(std::move(provider)); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index 61c4dae8c31..8f82ea19201 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<979ad8a28efe3ca5d775596dc8b298d8>> + * @generated SignedSource<<3bfae310dfd28040f4b80d1a1df8b7b3>> */ /** @@ -73,6 +73,16 @@ class ReactNativeFeatureFlags { */ static bool enableFixForClippedSubviewsCrash(); + /** + * Flag determining if the C++ implementation of InspectorPackagerConnection should be used instead of the per-platform one. This flag is global and should not be changed across React Host lifetimes. + */ + static bool inspectorEnableCxxInspectorPackagerConnection(); + + /** + * Flag determining if the modern CDP backend should be enabled. This flag is global and should not be changed across React Host lifetimes. + */ + static bool inspectorEnableModernCDPRegistry(); + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index 41149fb9efe..d46d461bfd4 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<2154292f89306f25289583537833a065>> */ /** @@ -173,6 +173,42 @@ bool ReactNativeFeatureFlagsAccessor::enableFixForClippedSubviewsCrash() { return flagValue.value(); } +bool ReactNativeFeatureFlagsAccessor::inspectorEnableCxxInspectorPackagerConnection() { + auto flagValue = inspectorEnableCxxInspectorPackagerConnection_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(8, "inspectorEnableCxxInspectorPackagerConnection"); + + flagValue = currentProvider_->inspectorEnableCxxInspectorPackagerConnection(); + inspectorEnableCxxInspectorPackagerConnection_ = flagValue; + } + + return flagValue.value(); +} + +bool ReactNativeFeatureFlagsAccessor::inspectorEnableModernCDPRegistry() { + auto flagValue = inspectorEnableModernCDPRegistry_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(9, "inspectorEnableModernCDPRegistry"); + + flagValue = currentProvider_->inspectorEnableModernCDPRegistry(); + inspectorEnableModernCDPRegistry_ = flagValue; + } + + return flagValue.value(); +} + void ReactNativeFeatureFlagsAccessor::override( std::unique_ptr provider) { if (wasOverridden_) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 707faea10e5..b177bfe53b6 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<95487968b66d40e1ec53936b06084931>> */ /** @@ -39,6 +39,8 @@ class ReactNativeFeatureFlagsAccessor { bool enableSpannableBuildingUnification(); bool enableCustomDrawOrderFabric(); bool enableFixForClippedSubviewsCrash(); + bool inspectorEnableCxxInspectorPackagerConnection(); + bool inspectorEnableModernCDPRegistry(); void override(std::unique_ptr provider); @@ -49,7 +51,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 8> accessedFeatureFlags_; + std::array, 10> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> enableBackgroundExecutor_; @@ -59,6 +61,8 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> enableSpannableBuildingUnification_; std::atomic> enableCustomDrawOrderFabric_; std::atomic> enableFixForClippedSubviewsCrash_; + std::atomic> inspectorEnableCxxInspectorPackagerConnection_; + std::atomic> inspectorEnableModernCDPRegistry_; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index b441c0dc8a8..ce2aadae3b6 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<4832483bb3648380f2bb9312311f579c>> */ /** @@ -58,6 +58,14 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { bool enableFixForClippedSubviewsCrash() override { return false; } + + bool inspectorEnableCxxInspectorPackagerConnection() override { + return false; + } + + bool inspectorEnableModernCDPRegistry() override { + return false; + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index e91d6dda624..f6f55b5fc15 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -33,6 +33,8 @@ class ReactNativeFeatureFlagsProvider { virtual bool enableSpannableBuildingUnification() = 0; virtual bool enableCustomDrawOrderFabric() = 0; virtual bool enableFixForClippedSubviewsCrash() = 0; + virtual bool inspectorEnableCxxInspectorPackagerConnection() = 0; + virtual bool inspectorEnableModernCDPRegistry() = 0; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index c351363bdca..67f799f556c 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<97f5135efc2e76f0a055a3d55000925c>> + * @generated SignedSource<<2466af777a1d69da2c3810e5a2d53a70>> */ /** @@ -75,4 +75,14 @@ bool NativeReactNativeFeatureFlags::enableFixForClippedSubviewsCrash( return ReactNativeFeatureFlags::enableFixForClippedSubviewsCrash(); } +bool NativeReactNativeFeatureFlags::inspectorEnableCxxInspectorPackagerConnection( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::inspectorEnableCxxInspectorPackagerConnection(); +} + +bool NativeReactNativeFeatureFlags::inspectorEnableModernCDPRegistry( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::inspectorEnableModernCDPRegistry(); +} + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index a92a0ad2771..203dfce52c0 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<47a7bf435a971206c55592e877619435>> + * @generated SignedSource<<30481dc57cc7f389d1ed87d097caedda>> */ /** @@ -45,6 +45,10 @@ class NativeReactNativeFeatureFlags bool enableCustomDrawOrderFabric(jsi::Runtime& runtime); bool enableFixForClippedSubviewsCrash(jsi::Runtime& runtime); + + bool inspectorEnableCxxInspectorPackagerConnection(jsi::Runtime& runtime); + + bool inspectorEnableModernCDPRegistry(jsi::Runtime& runtime); }; } // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index f1540bc4753..ef91f0f6e35 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -53,6 +53,16 @@ const definitions: FeatureFlagDefinitions = { 'Attempt at fixing a crash related to subview clipping on Android. This is a kill switch for the fix', defaultValue: false, }, + inspectorEnableCxxInspectorPackagerConnection: { + description: + 'Flag determining if the C++ implementation of InspectorPackagerConnection should be used instead of the per-platform one. This flag is global and should not be changed across React Host lifetimes.', + defaultValue: false, + }, + inspectorEnableModernCDPRegistry: { + description: + 'Flag determining if the modern CDP backend should be enabled. This flag is global and should not be changed across React Host lifetimes.', + defaultValue: false, + }, }, jsOnly: { diff --git a/packages/react-native/src/private/featureflags/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/NativeReactNativeFeatureFlags.js index 80e645b42cc..93243673eba 100644 --- a/packages/react-native/src/private/featureflags/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<8509d5ee87efb5aa8da7efcd2085d0a2>> * @flow strict-local */ @@ -31,6 +31,8 @@ export interface Spec extends TurboModule { +enableSpannableBuildingUnification?: () => boolean; +enableCustomDrawOrderFabric?: () => boolean; +enableFixForClippedSubviewsCrash?: () => boolean; + +inspectorEnableCxxInspectorPackagerConnection?: () => boolean; + +inspectorEnableModernCDPRegistry?: () => boolean; } const NativeReactNativeFeatureFlags: ?Spec = TurboModuleRegistry.get( diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index 38904ddaec8..214dc80c030 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<3a6103a7180e8db957a6c37b91d4b150>> + * @generated SignedSource<<7c83d5613c3be517efe48378e6356e79>> * @flow strict-local */ @@ -48,6 +48,8 @@ export type ReactNativeFeatureFlags = { enableSpannableBuildingUnification: Getter, enableCustomDrawOrderFabric: Getter, enableFixForClippedSubviewsCrash: Getter, + inspectorEnableCxxInspectorPackagerConnection: Getter, + inspectorEnableModernCDPRegistry: Getter, } /** @@ -122,6 +124,14 @@ export const enableCustomDrawOrderFabric: Getter = createNativeFlagGett * Attempt at fixing a crash related to subview clipping on Android. This is a kill switch for the fix */ export const enableFixForClippedSubviewsCrash: Getter = createNativeFlagGetter('enableFixForClippedSubviewsCrash', false); +/** + * Flag determining if the C++ implementation of InspectorPackagerConnection should be used instead of the per-platform one. This flag is global and should not be changed across React Host lifetimes. + */ +export const inspectorEnableCxxInspectorPackagerConnection: Getter = createNativeFlagGetter('inspectorEnableCxxInspectorPackagerConnection', false); +/** + * Flag determining if the modern CDP backend should be enabled. This flag is global and should not be changed across React Host lifetimes. + */ +export const inspectorEnableModernCDPRegistry: Getter = createNativeFlagGetter('inspectorEnableModernCDPRegistry', false); /** * Overrides the feature flags with the provided methods. diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 55a146f89ec..66e57f4f87b 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -989,7 +989,7 @@ PODS: - DoubleConversion - glog - RCT-Folly (= 2024.01.01.00) - - React-nativeconfig + - React-featureflags - React-jsitracing (1000.0.0): - React-jsi - React-logger (1000.0.0): @@ -1030,7 +1030,6 @@ PODS: - React-Fabric - React-graphics - React-hermes - - React-jsinspector - React-nativeconfig - React-NativeModulesApple - React-RCTFabric