From b3c9fa2f976f4d98985f281d2945b4e1e1a35318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Thu, 10 Oct 2024 05:50:01 -0700 Subject: [PATCH] Unify feature flags for event loop Summary: Changelog: [internal] This unifies all the feature flags that control the new event loop on RN. Before, we'd have granular flags for different aspects of it. With this diff, we enable the event loop by default with bridgeless, and we introduce a new flag to explicitly disable it in that case if necessary. Differential Revision: D64175216 --- .../Libraries/AppDelegate/RCTAppDelegate.mm | 12 -- .../Libraries/Core/setUpTimers.js | 14 +-- .../featureflags/ReactNativeFeatureFlags.kt | 22 +--- .../ReactNativeFeatureFlagsCxxAccessor.kt | 40 ++---- .../ReactNativeFeatureFlagsCxxInterop.kt | 10 +- .../ReactNativeFeatureFlagsDefaults.kt | 10 +- .../ReactNativeFeatureFlagsLocalAccessor.kt | 46 ++----- .../ReactNativeFeatureFlagsProvider.kt | 10 +- ...tiveNewArchitectureFeatureFlagsDefaults.kt | 9 -- .../JReactNativeFeatureFlagsCxxInterop.cpp | 52 ++------ .../JReactNativeFeatureFlagsCxxInterop.h | 12 +- .../featureflags/ReactNativeFeatureFlags.cpp | 18 +-- .../featureflags/ReactNativeFeatureFlags.h | 20 +-- .../ReactNativeFeatureFlagsAccessor.cpp | 114 ++++++------------ .../ReactNativeFeatureFlagsAccessor.h | 12 +- .../ReactNativeFeatureFlagsDefaults.h | 14 +-- .../ReactNativeFeatureFlagsProvider.h | 6 +- .../NativeReactNativeFeatureFlags.cpp | 20 +-- .../NativeReactNativeFeatureFlags.h | 10 +- .../NativeMutationObserver.cpp | 3 +- .../runtimescheduler/RuntimeScheduler.cpp | 3 +- .../RuntimeScheduler_Modern.cpp | 30 ++--- .../tests/RuntimeSchedulerTest.cpp | 47 +++----- .../react/runtime/ReactInstance.cpp | 2 +- .../react/runtime/TimerManager.cpp | 2 +- .../react/runtime/hermes/HermesInstance.cpp | 4 +- .../scripts/featureflags/README.md | 20 +-- .../ReactNativeFeatureFlags.config.js | 30 ++--- .../featureflags/ReactNativeFeatureFlags.js | 22 +--- .../specs/NativeReactNativeFeatureFlags.js | 6 +- 30 files changed, 175 insertions(+), 445 deletions(-) diff --git a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm index 28e339d0e00c51..42c8aba0df24ac 100644 --- a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm +++ b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm @@ -303,18 +303,6 @@ - (RCTRootViewFactory *)createRCTRootViewFactory class RCTAppDelegateBridgelessFeatureFlags : public facebook::react::ReactNativeFeatureFlagsDefaults { public: - bool useModernRuntimeScheduler() override - { - return true; - } - bool enableMicrotasks() override - { - return true; - } - bool batchRenderingUpdatesInEventLoop() override - { - return true; - } }; - (void)_setUpFeatureFlags diff --git a/packages/react-native/Libraries/Core/setUpTimers.js b/packages/react-native/Libraries/Core/setUpTimers.js index 43481c931cdd4b..af9c147884f37c 100644 --- a/packages/react-native/Libraries/Core/setUpTimers.js +++ b/packages/react-native/Libraries/Core/setUpTimers.js @@ -48,12 +48,7 @@ if (global.RN$Bridgeless !== true) { defineLazyTimer('cancelAnimationFrame'); defineLazyTimer('requestIdleCallback'); defineLazyTimer('cancelIdleCallback'); -} else if ( - // TODO remove this condition when bridgeless == modern scheduler everywhere. - NativeReactNativeFeatureFlags != null && - // eslint-disable-next-line react-hooks/rules-of-hooks -- false positive due to `use` prefix - ReactNativeFeatureFlags.useModernRuntimeScheduler() -) { +} else if (!ReactNativeFeatureFlags.disableEventLoopOnBridgeless()) { polyfillGlobal( 'requestIdleCallback', () => @@ -69,12 +64,9 @@ if (global.RN$Bridgeless !== true) { ); } -// We need to check if the native module is available before accessing the -// feature flag, because otherwise the API would throw an error in the legacy -// architecture in OSS, where the native module isn't available. if ( - NativeReactNativeFeatureFlags != null && - ReactNativeFeatureFlags.enableMicrotasks() + global.RN$Bridgeless === true && + !ReactNativeFeatureFlags.disableEventLoopOnBridgeless() ) { // This is the flag that tells React to use `queueMicrotask` to batch state // updates, instead of using the scheduler to schedule a regular task. 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 e0d4456b4b522d..404e976107c34c 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<<405d53cd6aba78616b8690c26a0accad>> + * @generated SignedSource<<23f6d00b1daead1fd92ebbe42c287df4>> */ /** @@ -41,16 +41,16 @@ public object ReactNativeFeatureFlags { public fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean = accessor.allowRecursiveCommitsWithSynchronousMountOnAndroid() /** - * When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop. + * Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android */ @JvmStatic - public fun batchRenderingUpdatesInEventLoop(): Boolean = accessor.batchRenderingUpdatesInEventLoop() + public fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean = accessor.completeReactInstanceCreationOnBgThreadOnAndroid() /** - * Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android + * The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances. */ @JvmStatic - public fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean = accessor.completeReactInstanceCreationOnBgThreadOnAndroid() + public fun disableEventLoopOnBridgeless(): Boolean = accessor.disableEventLoopOnBridgeless() /** * Kill-switch to turn off support for aling-items:baseline on Fabric iOS. @@ -142,12 +142,6 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun enableLongTaskAPI(): Boolean = accessor.enableLongTaskAPI() - /** - * Enables the use of microtasks in Hermes (scheduling) and RuntimeScheduler (execution). - */ - @JvmStatic - public fun enableMicrotasks(): Boolean = accessor.enableMicrotasks() - /** * Moves execution of pre-mount items to outside the choregrapher in the main thread, so we can estimate idle time more precisely (Android only). */ @@ -280,12 +274,6 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun useImmediateExecutorInAndroidBridgeless(): Boolean = accessor.useImmediateExecutorInAndroidBridgeless() - /** - * When enabled, it uses the modern fork of RuntimeScheduler that allows scheduling tasks with priorities from any thread. - */ - @JvmStatic - public fun useModernRuntimeScheduler(): Boolean = accessor.useModernRuntimeScheduler() - /** * When enabled, the native view configs are used in bridgeless mode. */ 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 dc7173e7c68153..526c60fc0425e9 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<<84ee754f916b48a7c55ea94e166510c7>> + * @generated SignedSource<<87348d3efd49495148d7765cb6f963a3>> */ /** @@ -22,8 +22,8 @@ package com.facebook.react.internal.featureflags public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccessor { private var commonTestFlagCache: Boolean? = null private var allowRecursiveCommitsWithSynchronousMountOnAndroidCache: Boolean? = null - private var batchRenderingUpdatesInEventLoopCache: Boolean? = null private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null + private var disableEventLoopOnBridgelessCache: Boolean? = null private var enableAlignItemsBaselineOnFabricIOSCache: Boolean? = null private var enableAndroidLineHeightCenteringCache: Boolean? = null private var enableBridgelessArchitectureCache: Boolean? = null @@ -39,7 +39,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso private var enableLayoutAnimationsOnAndroidCache: Boolean? = null private var enableLayoutAnimationsOnIOSCache: Boolean? = null private var enableLongTaskAPICache: Boolean? = null - private var enableMicrotasksCache: Boolean? = null private var enablePreciseSchedulingForPremountItemsOnAndroidCache: Boolean? = null private var enablePropsUpdateReconciliationAndroidCache: Boolean? = null private var enableReportEventPaintTimeCache: Boolean? = null @@ -62,7 +61,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null private var useFabricInteropCache: Boolean? = null private var useImmediateExecutorInAndroidBridgelessCache: Boolean? = null - private var useModernRuntimeSchedulerCache: Boolean? = null private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null private var useOptimisedViewPreallocationOnAndroidCache: Boolean? = null private var useOptimizedEventBatchingOnAndroidCache: Boolean? = null @@ -88,20 +86,20 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso return cached } - override fun batchRenderingUpdatesInEventLoop(): Boolean { - var cached = batchRenderingUpdatesInEventLoopCache + override fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean { + var cached = completeReactInstanceCreationOnBgThreadOnAndroidCache if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.batchRenderingUpdatesInEventLoop() - batchRenderingUpdatesInEventLoopCache = cached + cached = ReactNativeFeatureFlagsCxxInterop.completeReactInstanceCreationOnBgThreadOnAndroid() + completeReactInstanceCreationOnBgThreadOnAndroidCache = cached } return cached } - override fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean { - var cached = completeReactInstanceCreationOnBgThreadOnAndroidCache + override fun disableEventLoopOnBridgeless(): Boolean { + var cached = disableEventLoopOnBridgelessCache if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.completeReactInstanceCreationOnBgThreadOnAndroid() - completeReactInstanceCreationOnBgThreadOnAndroidCache = cached + cached = ReactNativeFeatureFlagsCxxInterop.disableEventLoopOnBridgeless() + disableEventLoopOnBridgelessCache = cached } return cached } @@ -241,15 +239,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso return cached } - override fun enableMicrotasks(): Boolean { - var cached = enableMicrotasksCache - if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.enableMicrotasks() - enableMicrotasksCache = cached - } - return cached - } - override fun enablePreciseSchedulingForPremountItemsOnAndroid(): Boolean { var cached = enablePreciseSchedulingForPremountItemsOnAndroidCache if (cached == null) { @@ -448,15 +437,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso return cached } - override fun useModernRuntimeScheduler(): Boolean { - var cached = useModernRuntimeSchedulerCache - if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.useModernRuntimeScheduler() - useModernRuntimeSchedulerCache = cached - } - return cached - } - override fun useNativeViewConfigsInBridgelessMode(): Boolean { var cached = useNativeViewConfigsInBridgelessModeCache if (cached == null) { 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 a1f0cc56e3fb03..95a52c3136a0f8 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<> + * @generated SignedSource<<1fa5b976ad3c7d5630fe526969d234e0>> */ /** @@ -32,10 +32,10 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean - @DoNotStrip @JvmStatic public external fun batchRenderingUpdatesInEventLoop(): Boolean - @DoNotStrip @JvmStatic public external fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean + @DoNotStrip @JvmStatic public external fun disableEventLoopOnBridgeless(): Boolean + @DoNotStrip @JvmStatic public external fun enableAlignItemsBaselineOnFabricIOS(): Boolean @DoNotStrip @JvmStatic public external fun enableAndroidLineHeightCentering(): Boolean @@ -66,8 +66,6 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun enableLongTaskAPI(): Boolean - @DoNotStrip @JvmStatic public external fun enableMicrotasks(): Boolean - @DoNotStrip @JvmStatic public external fun enablePreciseSchedulingForPremountItemsOnAndroid(): Boolean @DoNotStrip @JvmStatic public external fun enablePropsUpdateReconciliationAndroid(): Boolean @@ -112,8 +110,6 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun useImmediateExecutorInAndroidBridgeless(): Boolean - @DoNotStrip @JvmStatic public external fun useModernRuntimeScheduler(): Boolean - @DoNotStrip @JvmStatic public external fun useNativeViewConfigsInBridgelessMode(): Boolean @DoNotStrip @JvmStatic public external fun useOptimisedViewPreallocationOnAndroid(): Boolean 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 9bbfa11cfd4d21..61a5e26dae7355 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<> + * @generated SignedSource<> */ /** @@ -27,10 +27,10 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean = false - override fun batchRenderingUpdatesInEventLoop(): Boolean = false - override fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean = false + override fun disableEventLoopOnBridgeless(): Boolean = false + override fun enableAlignItemsBaselineOnFabricIOS(): Boolean = true override fun enableAndroidLineHeightCentering(): Boolean = false @@ -61,8 +61,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun enableLongTaskAPI(): Boolean = false - override fun enableMicrotasks(): Boolean = false - override fun enablePreciseSchedulingForPremountItemsOnAndroid(): Boolean = false override fun enablePropsUpdateReconciliationAndroid(): Boolean = false @@ -107,8 +105,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useImmediateExecutorInAndroidBridgeless(): Boolean = false - override fun useModernRuntimeScheduler(): Boolean = false - override fun useNativeViewConfigsInBridgelessMode(): Boolean = false override fun useOptimisedViewPreallocationOnAndroid(): 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 ad78217a0b1d7d..ac64196966551c 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<<4dc2364f5bcd765d7b61dbcab0d9533d>> + * @generated SignedSource<<203c7cbe3b4ca330af6367f08fcb8486>> */ /** @@ -26,8 +26,8 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces private var commonTestFlagCache: Boolean? = null private var allowRecursiveCommitsWithSynchronousMountOnAndroidCache: Boolean? = null - private var batchRenderingUpdatesInEventLoopCache: Boolean? = null private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null + private var disableEventLoopOnBridgelessCache: Boolean? = null private var enableAlignItemsBaselineOnFabricIOSCache: Boolean? = null private var enableAndroidLineHeightCenteringCache: Boolean? = null private var enableBridgelessArchitectureCache: Boolean? = null @@ -43,7 +43,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces private var enableLayoutAnimationsOnAndroidCache: Boolean? = null private var enableLayoutAnimationsOnIOSCache: Boolean? = null private var enableLongTaskAPICache: Boolean? = null - private var enableMicrotasksCache: Boolean? = null private var enablePreciseSchedulingForPremountItemsOnAndroidCache: Boolean? = null private var enablePropsUpdateReconciliationAndroidCache: Boolean? = null private var enableReportEventPaintTimeCache: Boolean? = null @@ -66,7 +65,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null private var useFabricInteropCache: Boolean? = null private var useImmediateExecutorInAndroidBridgelessCache: Boolean? = null - private var useModernRuntimeSchedulerCache: Boolean? = null private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null private var useOptimisedViewPreallocationOnAndroidCache: Boolean? = null private var useOptimizedEventBatchingOnAndroidCache: Boolean? = null @@ -94,16 +92,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces return cached } - override fun batchRenderingUpdatesInEventLoop(): Boolean { - var cached = batchRenderingUpdatesInEventLoopCache - if (cached == null) { - cached = currentProvider.batchRenderingUpdatesInEventLoop() - accessedFeatureFlags.add("batchRenderingUpdatesInEventLoop") - batchRenderingUpdatesInEventLoopCache = cached - } - return cached - } - override fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean { var cached = completeReactInstanceCreationOnBgThreadOnAndroidCache if (cached == null) { @@ -114,6 +102,16 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun disableEventLoopOnBridgeless(): Boolean { + var cached = disableEventLoopOnBridgelessCache + if (cached == null) { + cached = currentProvider.disableEventLoopOnBridgeless() + accessedFeatureFlags.add("disableEventLoopOnBridgeless") + disableEventLoopOnBridgelessCache = cached + } + return cached + } + override fun enableAlignItemsBaselineOnFabricIOS(): Boolean { var cached = enableAlignItemsBaselineOnFabricIOSCache if (cached == null) { @@ -264,16 +262,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces return cached } - override fun enableMicrotasks(): Boolean { - var cached = enableMicrotasksCache - if (cached == null) { - cached = currentProvider.enableMicrotasks() - accessedFeatureFlags.add("enableMicrotasks") - enableMicrotasksCache = cached - } - return cached - } - override fun enablePreciseSchedulingForPremountItemsOnAndroid(): Boolean { var cached = enablePreciseSchedulingForPremountItemsOnAndroidCache if (cached == null) { @@ -494,16 +482,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces return cached } - override fun useModernRuntimeScheduler(): Boolean { - var cached = useModernRuntimeSchedulerCache - if (cached == null) { - cached = currentProvider.useModernRuntimeScheduler() - accessedFeatureFlags.add("useModernRuntimeScheduler") - useModernRuntimeSchedulerCache = cached - } - return cached - } - override fun useNativeViewConfigsInBridgelessMode(): Boolean { var cached = useNativeViewConfigsInBridgelessModeCache if (cached == null) { 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 c7e379e2761908..ec6e6584434cf9 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<<193bb7803261004003d9009b44810c2c>> + * @generated SignedSource<<3e2f26110d27e8654640f7bf4f66b5eb>> */ /** @@ -27,10 +27,10 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean - @DoNotStrip public fun batchRenderingUpdatesInEventLoop(): Boolean - @DoNotStrip public fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean + @DoNotStrip public fun disableEventLoopOnBridgeless(): Boolean + @DoNotStrip public fun enableAlignItemsBaselineOnFabricIOS(): Boolean @DoNotStrip public fun enableAndroidLineHeightCentering(): Boolean @@ -61,8 +61,6 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun enableLongTaskAPI(): Boolean - @DoNotStrip public fun enableMicrotasks(): Boolean - @DoNotStrip public fun enablePreciseSchedulingForPremountItemsOnAndroid(): Boolean @DoNotStrip public fun enablePropsUpdateReconciliationAndroid(): Boolean @@ -107,8 +105,6 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun useImmediateExecutorInAndroidBridgeless(): Boolean - @DoNotStrip public fun useModernRuntimeScheduler(): Boolean - @DoNotStrip public fun useNativeViewConfigsInBridgelessMode(): Boolean @DoNotStrip public fun useOptimisedViewPreallocationOnAndroid(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt index 985dd7e0777a4f..5d93c85dfc7618 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt @@ -23,20 +23,11 @@ package com.facebook.react.internal.featureflags public open class ReactNativeNewArchitectureFeatureFlagsDefaults( private val newArchitectureEnabled: Boolean = true ) : ReactNativeFeatureFlagsDefaults() { - - override fun batchRenderingUpdatesInEventLoop(): Boolean = - newArchitectureEnabled || super.batchRenderingUpdatesInEventLoop() - override fun useTurboModuleInterop(): Boolean = newArchitectureEnabled || super.useTurboModuleInterop() - override fun useModernRuntimeScheduler(): Boolean = - newArchitectureEnabled || super.useModernRuntimeScheduler() - override fun enableBridgelessArchitecture(): Boolean = newArchitectureEnabled - override fun enableMicrotasks(): Boolean = newArchitectureEnabled || super.enableMicrotasks() - override fun enableFabricRenderer(): Boolean = newArchitectureEnabled override fun useNativeViewConfigsInBridgelessMode(): 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 7d4a2d6de2056c..959eaf70d22bf1 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<<0bb021affcef5162b578ad3f1e45508f>> + * @generated SignedSource<> */ /** @@ -51,15 +51,15 @@ class ReactNativeFeatureFlagsProviderHolder return method(javaProvider_); } - bool batchRenderingUpdatesInEventLoop() override { + bool completeReactInstanceCreationOnBgThreadOnAndroid() override { static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("batchRenderingUpdatesInEventLoop"); + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("completeReactInstanceCreationOnBgThreadOnAndroid"); return method(javaProvider_); } - bool completeReactInstanceCreationOnBgThreadOnAndroid() override { + bool disableEventLoopOnBridgeless() override { static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("completeReactInstanceCreationOnBgThreadOnAndroid"); + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("disableEventLoopOnBridgeless"); return method(javaProvider_); } @@ -153,12 +153,6 @@ class ReactNativeFeatureFlagsProviderHolder return method(javaProvider_); } - bool enableMicrotasks() override { - static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableMicrotasks"); - return method(javaProvider_); - } - bool enablePreciseSchedulingForPremountItemsOnAndroid() override { static const auto method = getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enablePreciseSchedulingForPremountItemsOnAndroid"); @@ -291,12 +285,6 @@ class ReactNativeFeatureFlagsProviderHolder return method(javaProvider_); } - bool useModernRuntimeScheduler() override { - static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useModernRuntimeScheduler"); - return method(javaProvider_); - } - bool useNativeViewConfigsInBridgelessMode() override { static const auto method = getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useNativeViewConfigsInBridgelessMode"); @@ -347,14 +335,14 @@ bool JReactNativeFeatureFlagsCxxInterop::allowRecursiveCommitsWithSynchronousMou return ReactNativeFeatureFlags::allowRecursiveCommitsWithSynchronousMountOnAndroid(); } -bool JReactNativeFeatureFlagsCxxInterop::batchRenderingUpdatesInEventLoop( +bool JReactNativeFeatureFlagsCxxInterop::completeReactInstanceCreationOnBgThreadOnAndroid( facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop(); + return ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid(); } -bool JReactNativeFeatureFlagsCxxInterop::completeReactInstanceCreationOnBgThreadOnAndroid( +bool JReactNativeFeatureFlagsCxxInterop::disableEventLoopOnBridgeless( facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid(); + return ReactNativeFeatureFlags::disableEventLoopOnBridgeless(); } bool JReactNativeFeatureFlagsCxxInterop::enableAlignItemsBaselineOnFabricIOS( @@ -432,11 +420,6 @@ bool JReactNativeFeatureFlagsCxxInterop::enableLongTaskAPI( return ReactNativeFeatureFlags::enableLongTaskAPI(); } -bool JReactNativeFeatureFlagsCxxInterop::enableMicrotasks( - facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::enableMicrotasks(); -} - bool JReactNativeFeatureFlagsCxxInterop::enablePreciseSchedulingForPremountItemsOnAndroid( facebook::jni::alias_ref /*unused*/) { return ReactNativeFeatureFlags::enablePreciseSchedulingForPremountItemsOnAndroid(); @@ -547,11 +530,6 @@ bool JReactNativeFeatureFlagsCxxInterop::useImmediateExecutorInAndroidBridgeless return ReactNativeFeatureFlags::useImmediateExecutorInAndroidBridgeless(); } -bool JReactNativeFeatureFlagsCxxInterop::useModernRuntimeScheduler( - facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::useModernRuntimeScheduler(); -} - bool JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode( facebook::jni::alias_ref /*unused*/) { return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode(); @@ -605,12 +583,12 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "allowRecursiveCommitsWithSynchronousMountOnAndroid", JReactNativeFeatureFlagsCxxInterop::allowRecursiveCommitsWithSynchronousMountOnAndroid), - makeNativeMethod( - "batchRenderingUpdatesInEventLoop", - JReactNativeFeatureFlagsCxxInterop::batchRenderingUpdatesInEventLoop), makeNativeMethod( "completeReactInstanceCreationOnBgThreadOnAndroid", JReactNativeFeatureFlagsCxxInterop::completeReactInstanceCreationOnBgThreadOnAndroid), + makeNativeMethod( + "disableEventLoopOnBridgeless", + JReactNativeFeatureFlagsCxxInterop::disableEventLoopOnBridgeless), makeNativeMethod( "enableAlignItemsBaselineOnFabricIOS", JReactNativeFeatureFlagsCxxInterop::enableAlignItemsBaselineOnFabricIOS), @@ -656,9 +634,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "enableLongTaskAPI", JReactNativeFeatureFlagsCxxInterop::enableLongTaskAPI), - makeNativeMethod( - "enableMicrotasks", - JReactNativeFeatureFlagsCxxInterop::enableMicrotasks), makeNativeMethod( "enablePreciseSchedulingForPremountItemsOnAndroid", JReactNativeFeatureFlagsCxxInterop::enablePreciseSchedulingForPremountItemsOnAndroid), @@ -725,9 +700,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "useImmediateExecutorInAndroidBridgeless", JReactNativeFeatureFlagsCxxInterop::useImmediateExecutorInAndroidBridgeless), - makeNativeMethod( - "useModernRuntimeScheduler", - JReactNativeFeatureFlagsCxxInterop::useModernRuntimeScheduler), makeNativeMethod( "useNativeViewConfigsInBridgelessMode", JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode), 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 74bffbfe9023eb..ea3896d8f7ce07 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<<1b9a6b7637ff11a3e55367503c2bf1f0>> */ /** @@ -36,10 +36,10 @@ class JReactNativeFeatureFlagsCxxInterop static bool allowRecursiveCommitsWithSynchronousMountOnAndroid( facebook::jni::alias_ref); - static bool batchRenderingUpdatesInEventLoop( + static bool completeReactInstanceCreationOnBgThreadOnAndroid( facebook::jni::alias_ref); - static bool completeReactInstanceCreationOnBgThreadOnAndroid( + static bool disableEventLoopOnBridgeless( facebook::jni::alias_ref); static bool enableAlignItemsBaselineOnFabricIOS( @@ -87,9 +87,6 @@ class JReactNativeFeatureFlagsCxxInterop static bool enableLongTaskAPI( facebook::jni::alias_ref); - static bool enableMicrotasks( - facebook::jni::alias_ref); - static bool enablePreciseSchedulingForPremountItemsOnAndroid( facebook::jni::alias_ref); @@ -156,9 +153,6 @@ class JReactNativeFeatureFlagsCxxInterop static bool useImmediateExecutorInAndroidBridgeless( facebook::jni::alias_ref); - static bool useModernRuntimeScheduler( - facebook::jni::alias_ref); - static bool useNativeViewConfigsInBridgelessMode( facebook::jni::alias_ref); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 3fb02c5f0f43e2..076e86c2dc8f28 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<<013c1fa01cf029635c04b50f83cc80ef>> + * @generated SignedSource<<956bdfad11595d393e5cc962d16d32dd>> */ /** @@ -29,14 +29,14 @@ bool ReactNativeFeatureFlags::allowRecursiveCommitsWithSynchronousMountOnAndroid return getAccessor().allowRecursiveCommitsWithSynchronousMountOnAndroid(); } -bool ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop() { - return getAccessor().batchRenderingUpdatesInEventLoop(); -} - bool ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid() { return getAccessor().completeReactInstanceCreationOnBgThreadOnAndroid(); } +bool ReactNativeFeatureFlags::disableEventLoopOnBridgeless() { + return getAccessor().disableEventLoopOnBridgeless(); +} + bool ReactNativeFeatureFlags::enableAlignItemsBaselineOnFabricIOS() { return getAccessor().enableAlignItemsBaselineOnFabricIOS(); } @@ -97,10 +97,6 @@ bool ReactNativeFeatureFlags::enableLongTaskAPI() { return getAccessor().enableLongTaskAPI(); } -bool ReactNativeFeatureFlags::enableMicrotasks() { - return getAccessor().enableMicrotasks(); -} - bool ReactNativeFeatureFlags::enablePreciseSchedulingForPremountItemsOnAndroid() { return getAccessor().enablePreciseSchedulingForPremountItemsOnAndroid(); } @@ -189,10 +185,6 @@ bool ReactNativeFeatureFlags::useImmediateExecutorInAndroidBridgeless() { return getAccessor().useImmediateExecutorInAndroidBridgeless(); } -bool ReactNativeFeatureFlags::useModernRuntimeScheduler() { - return getAccessor().useModernRuntimeScheduler(); -} - bool ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode() { return getAccessor().useNativeViewConfigsInBridgelessMode(); } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index dead79d77ae1f5..e81185ceadbde8 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<<3bbe3eb333030be7f32c0965c9db4a5c>> + * @generated SignedSource<<0eb975b517227835af30eb41fb8eb43e>> */ /** @@ -48,14 +48,14 @@ class ReactNativeFeatureFlags { RN_EXPORT static bool allowRecursiveCommitsWithSynchronousMountOnAndroid(); /** - * When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop. + * Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android */ - RN_EXPORT static bool batchRenderingUpdatesInEventLoop(); + RN_EXPORT static bool completeReactInstanceCreationOnBgThreadOnAndroid(); /** - * Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android + * The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances. */ - RN_EXPORT static bool completeReactInstanceCreationOnBgThreadOnAndroid(); + RN_EXPORT static bool disableEventLoopOnBridgeless(); /** * Kill-switch to turn off support for aling-items:baseline on Fabric iOS. @@ -132,11 +132,6 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static bool enableLongTaskAPI(); - /** - * Enables the use of microtasks in Hermes (scheduling) and RuntimeScheduler (execution). - */ - RN_EXPORT static bool enableMicrotasks(); - /** * Moves execution of pre-mount items to outside the choregrapher in the main thread, so we can estimate idle time more precisely (Android only). */ @@ -247,11 +242,6 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static bool useImmediateExecutorInAndroidBridgeless(); - /** - * When enabled, it uses the modern fork of RuntimeScheduler that allows scheduling tasks with priorities from any thread. - */ - RN_EXPORT static bool useModernRuntimeScheduler(); - /** * When enabled, the native view configs are used in bridgeless mode. */ diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index 2c0c6d649c4b69..5bb14d41ccf831 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<<087de432d750fea45c0c564e626ce1d9>> + * @generated SignedSource<<0887873df1f02d44e3e5a1967096d622>> */ /** @@ -65,8 +65,8 @@ bool ReactNativeFeatureFlagsAccessor::allowRecursiveCommitsWithSynchronousMountO return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::batchRenderingUpdatesInEventLoop() { - auto flagValue = batchRenderingUpdatesInEventLoop_.load(); +bool ReactNativeFeatureFlagsAccessor::completeReactInstanceCreationOnBgThreadOnAndroid() { + auto flagValue = completeReactInstanceCreationOnBgThreadOnAndroid_.load(); if (!flagValue.has_value()) { // This block is not exclusive but it is not necessary. @@ -74,17 +74,17 @@ bool ReactNativeFeatureFlagsAccessor::batchRenderingUpdatesInEventLoop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(2, "batchRenderingUpdatesInEventLoop"); + markFlagAsAccessed(2, "completeReactInstanceCreationOnBgThreadOnAndroid"); - flagValue = currentProvider_->batchRenderingUpdatesInEventLoop(); - batchRenderingUpdatesInEventLoop_ = flagValue; + flagValue = currentProvider_->completeReactInstanceCreationOnBgThreadOnAndroid(); + completeReactInstanceCreationOnBgThreadOnAndroid_ = flagValue; } return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::completeReactInstanceCreationOnBgThreadOnAndroid() { - auto flagValue = completeReactInstanceCreationOnBgThreadOnAndroid_.load(); +bool ReactNativeFeatureFlagsAccessor::disableEventLoopOnBridgeless() { + auto flagValue = disableEventLoopOnBridgeless_.load(); if (!flagValue.has_value()) { // This block is not exclusive but it is not necessary. @@ -92,10 +92,10 @@ bool ReactNativeFeatureFlagsAccessor::completeReactInstanceCreationOnBgThreadOnA // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(3, "completeReactInstanceCreationOnBgThreadOnAndroid"); + markFlagAsAccessed(3, "disableEventLoopOnBridgeless"); - flagValue = currentProvider_->completeReactInstanceCreationOnBgThreadOnAndroid(); - completeReactInstanceCreationOnBgThreadOnAndroid_ = flagValue; + flagValue = currentProvider_->disableEventLoopOnBridgeless(); + disableEventLoopOnBridgeless_ = flagValue; } return flagValue.value(); @@ -371,24 +371,6 @@ bool ReactNativeFeatureFlagsAccessor::enableLongTaskAPI() { return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::enableMicrotasks() { - auto flagValue = enableMicrotasks_.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(19, "enableMicrotasks"); - - flagValue = currentProvider_->enableMicrotasks(); - enableMicrotasks_ = flagValue; - } - - return flagValue.value(); -} - bool ReactNativeFeatureFlagsAccessor::enablePreciseSchedulingForPremountItemsOnAndroid() { auto flagValue = enablePreciseSchedulingForPremountItemsOnAndroid_.load(); @@ -398,7 +380,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePreciseSchedulingForPremountItemsOnA // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(20, "enablePreciseSchedulingForPremountItemsOnAndroid"); + markFlagAsAccessed(19, "enablePreciseSchedulingForPremountItemsOnAndroid"); flagValue = currentProvider_->enablePreciseSchedulingForPremountItemsOnAndroid(); enablePreciseSchedulingForPremountItemsOnAndroid_ = flagValue; @@ -416,7 +398,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePropsUpdateReconciliationAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(21, "enablePropsUpdateReconciliationAndroid"); + markFlagAsAccessed(20, "enablePropsUpdateReconciliationAndroid"); flagValue = currentProvider_->enablePropsUpdateReconciliationAndroid(); enablePropsUpdateReconciliationAndroid_ = flagValue; @@ -434,7 +416,7 @@ bool ReactNativeFeatureFlagsAccessor::enableReportEventPaintTime() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(22, "enableReportEventPaintTime"); + markFlagAsAccessed(21, "enableReportEventPaintTime"); flagValue = currentProvider_->enableReportEventPaintTime(); enableReportEventPaintTime_ = flagValue; @@ -452,7 +434,7 @@ bool ReactNativeFeatureFlagsAccessor::enableSynchronousStateUpdates() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(23, "enableSynchronousStateUpdates"); + markFlagAsAccessed(22, "enableSynchronousStateUpdates"); flagValue = currentProvider_->enableSynchronousStateUpdates(); enableSynchronousStateUpdates_ = flagValue; @@ -470,7 +452,7 @@ bool ReactNativeFeatureFlagsAccessor::enableTextPreallocationOptimisation() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(24, "enableTextPreallocationOptimisation"); + markFlagAsAccessed(23, "enableTextPreallocationOptimisation"); flagValue = currentProvider_->enableTextPreallocationOptimisation(); enableTextPreallocationOptimisation_ = flagValue; @@ -488,7 +470,7 @@ bool ReactNativeFeatureFlagsAccessor::enableUIConsistency() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(25, "enableUIConsistency"); + markFlagAsAccessed(24, "enableUIConsistency"); flagValue = currentProvider_->enableUIConsistency(); enableUIConsistency_ = flagValue; @@ -506,7 +488,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecycling() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(26, "enableViewRecycling"); + markFlagAsAccessed(25, "enableViewRecycling"); flagValue = currentProvider_->enableViewRecycling(); enableViewRecycling_ = flagValue; @@ -524,7 +506,7 @@ bool ReactNativeFeatureFlagsAccessor::excludeYogaFromRawProps() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(27, "excludeYogaFromRawProps"); + markFlagAsAccessed(26, "excludeYogaFromRawProps"); flagValue = currentProvider_->excludeYogaFromRawProps(); excludeYogaFromRawProps_ = flagValue; @@ -542,7 +524,7 @@ bool ReactNativeFeatureFlagsAccessor::fetchImagesInViewPreallocation() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(28, "fetchImagesInViewPreallocation"); + markFlagAsAccessed(27, "fetchImagesInViewPreallocation"); flagValue = currentProvider_->fetchImagesInViewPreallocation(); fetchImagesInViewPreallocation_ = flagValue; @@ -560,7 +542,7 @@ bool ReactNativeFeatureFlagsAccessor::fixMappingOfEventPrioritiesBetweenFabricAn // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(29, "fixMappingOfEventPrioritiesBetweenFabricAndReact"); + markFlagAsAccessed(28, "fixMappingOfEventPrioritiesBetweenFabricAndReact"); flagValue = currentProvider_->fixMappingOfEventPrioritiesBetweenFabricAndReact(); fixMappingOfEventPrioritiesBetweenFabricAndReact_ = flagValue; @@ -578,7 +560,7 @@ bool ReactNativeFeatureFlagsAccessor::fixMountingCoordinatorReportedPendingTrans // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(30, "fixMountingCoordinatorReportedPendingTransactionsOnAndroid"); + markFlagAsAccessed(29, "fixMountingCoordinatorReportedPendingTransactionsOnAndroid"); flagValue = currentProvider_->fixMountingCoordinatorReportedPendingTransactionsOnAndroid(); fixMountingCoordinatorReportedPendingTransactionsOnAndroid_ = flagValue; @@ -596,7 +578,7 @@ bool ReactNativeFeatureFlagsAccessor::forceBatchingMountItemsOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(31, "forceBatchingMountItemsOnAndroid"); + markFlagAsAccessed(30, "forceBatchingMountItemsOnAndroid"); flagValue = currentProvider_->forceBatchingMountItemsOnAndroid(); forceBatchingMountItemsOnAndroid_ = flagValue; @@ -614,7 +596,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledDebug() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(32, "fuseboxEnabledDebug"); + markFlagAsAccessed(31, "fuseboxEnabledDebug"); flagValue = currentProvider_->fuseboxEnabledDebug(); fuseboxEnabledDebug_ = flagValue; @@ -632,7 +614,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledRelease() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(33, "fuseboxEnabledRelease"); + markFlagAsAccessed(32, "fuseboxEnabledRelease"); flagValue = currentProvider_->fuseboxEnabledRelease(); fuseboxEnabledRelease_ = flagValue; @@ -650,7 +632,7 @@ bool ReactNativeFeatureFlagsAccessor::initEagerTurboModulesOnNativeModulesQueueA // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(34, "initEagerTurboModulesOnNativeModulesQueueAndroid"); + markFlagAsAccessed(33, "initEagerTurboModulesOnNativeModulesQueueAndroid"); flagValue = currentProvider_->initEagerTurboModulesOnNativeModulesQueueAndroid(); initEagerTurboModulesOnNativeModulesQueueAndroid_ = flagValue; @@ -668,7 +650,7 @@ bool ReactNativeFeatureFlagsAccessor::lazyAnimationCallbacks() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(35, "lazyAnimationCallbacks"); + markFlagAsAccessed(34, "lazyAnimationCallbacks"); flagValue = currentProvider_->lazyAnimationCallbacks(); lazyAnimationCallbacks_ = flagValue; @@ -686,7 +668,7 @@ bool ReactNativeFeatureFlagsAccessor::loadVectorDrawablesOnImages() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(36, "loadVectorDrawablesOnImages"); + markFlagAsAccessed(35, "loadVectorDrawablesOnImages"); flagValue = currentProvider_->loadVectorDrawablesOnImages(); loadVectorDrawablesOnImages_ = flagValue; @@ -704,7 +686,7 @@ bool ReactNativeFeatureFlagsAccessor::removeNestedCallsToDispatchMountItemsOnAnd // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(37, "removeNestedCallsToDispatchMountItemsOnAndroid"); + markFlagAsAccessed(36, "removeNestedCallsToDispatchMountItemsOnAndroid"); flagValue = currentProvider_->removeNestedCallsToDispatchMountItemsOnAndroid(); removeNestedCallsToDispatchMountItemsOnAndroid_ = flagValue; @@ -722,7 +704,7 @@ bool ReactNativeFeatureFlagsAccessor::setAndroidLayoutDirection() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(38, "setAndroidLayoutDirection"); + markFlagAsAccessed(37, "setAndroidLayoutDirection"); flagValue = currentProvider_->setAndroidLayoutDirection(); setAndroidLayoutDirection_ = flagValue; @@ -740,7 +722,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(39, "traceTurboModulePromiseRejectionsOnAndroid"); + markFlagAsAccessed(38, "traceTurboModulePromiseRejectionsOnAndroid"); flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid(); traceTurboModulePromiseRejectionsOnAndroid_ = flagValue; @@ -758,7 +740,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(40, "useFabricInterop"); + markFlagAsAccessed(39, "useFabricInterop"); flagValue = currentProvider_->useFabricInterop(); useFabricInterop_ = flagValue; @@ -776,7 +758,7 @@ bool ReactNativeFeatureFlagsAccessor::useImmediateExecutorInAndroidBridgeless() // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(41, "useImmediateExecutorInAndroidBridgeless"); + markFlagAsAccessed(40, "useImmediateExecutorInAndroidBridgeless"); flagValue = currentProvider_->useImmediateExecutorInAndroidBridgeless(); useImmediateExecutorInAndroidBridgeless_ = flagValue; @@ -785,24 +767,6 @@ bool ReactNativeFeatureFlagsAccessor::useImmediateExecutorInAndroidBridgeless() return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::useModernRuntimeScheduler() { - auto flagValue = useModernRuntimeScheduler_.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(42, "useModernRuntimeScheduler"); - - flagValue = currentProvider_->useModernRuntimeScheduler(); - useModernRuntimeScheduler_ = flagValue; - } - - return flagValue.value(); -} - bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { auto flagValue = useNativeViewConfigsInBridgelessMode_.load(); @@ -812,7 +776,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(43, "useNativeViewConfigsInBridgelessMode"); + markFlagAsAccessed(41, "useNativeViewConfigsInBridgelessMode"); flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode(); useNativeViewConfigsInBridgelessMode_ = flagValue; @@ -830,7 +794,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimisedViewPreallocationOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(44, "useOptimisedViewPreallocationOnAndroid"); + markFlagAsAccessed(42, "useOptimisedViewPreallocationOnAndroid"); flagValue = currentProvider_->useOptimisedViewPreallocationOnAndroid(); useOptimisedViewPreallocationOnAndroid_ = flagValue; @@ -848,7 +812,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(45, "useOptimizedEventBatchingOnAndroid"); + markFlagAsAccessed(43, "useOptimizedEventBatchingOnAndroid"); flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid(); useOptimizedEventBatchingOnAndroid_ = flagValue; @@ -866,7 +830,7 @@ bool ReactNativeFeatureFlagsAccessor::useRuntimeShadowNodeReferenceUpdate() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(46, "useRuntimeShadowNodeReferenceUpdate"); + markFlagAsAccessed(44, "useRuntimeShadowNodeReferenceUpdate"); flagValue = currentProvider_->useRuntimeShadowNodeReferenceUpdate(); useRuntimeShadowNodeReferenceUpdate_ = flagValue; @@ -884,7 +848,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(47, "useTurboModuleInterop"); + markFlagAsAccessed(45, "useTurboModuleInterop"); flagValue = currentProvider_->useTurboModuleInterop(); useTurboModuleInterop_ = flagValue; @@ -902,7 +866,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(48, "useTurboModules"); + markFlagAsAccessed(46, "useTurboModules"); flagValue = currentProvider_->useTurboModules(); useTurboModules_ = flagValue; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 1b1c0b6c72b499..987e66440c8f9e 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<<447de2c56cd16e313210f14d0ee3e9e9>> + * @generated SignedSource<<06d779d6de89ab49186d9a9e1144bbe1>> */ /** @@ -33,8 +33,8 @@ class ReactNativeFeatureFlagsAccessor { bool commonTestFlag(); bool allowRecursiveCommitsWithSynchronousMountOnAndroid(); - bool batchRenderingUpdatesInEventLoop(); bool completeReactInstanceCreationOnBgThreadOnAndroid(); + bool disableEventLoopOnBridgeless(); bool enableAlignItemsBaselineOnFabricIOS(); bool enableAndroidLineHeightCentering(); bool enableBridgelessArchitecture(); @@ -50,7 +50,6 @@ class ReactNativeFeatureFlagsAccessor { bool enableLayoutAnimationsOnAndroid(); bool enableLayoutAnimationsOnIOS(); bool enableLongTaskAPI(); - bool enableMicrotasks(); bool enablePreciseSchedulingForPremountItemsOnAndroid(); bool enablePropsUpdateReconciliationAndroid(); bool enableReportEventPaintTime(); @@ -73,7 +72,6 @@ class ReactNativeFeatureFlagsAccessor { bool traceTurboModulePromiseRejectionsOnAndroid(); bool useFabricInterop(); bool useImmediateExecutorInAndroidBridgeless(); - bool useModernRuntimeScheduler(); bool useNativeViewConfigsInBridgelessMode(); bool useOptimisedViewPreallocationOnAndroid(); bool useOptimizedEventBatchingOnAndroid(); @@ -90,12 +88,12 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 49> accessedFeatureFlags_; + std::array, 47> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> allowRecursiveCommitsWithSynchronousMountOnAndroid_; - std::atomic> batchRenderingUpdatesInEventLoop_; std::atomic> completeReactInstanceCreationOnBgThreadOnAndroid_; + std::atomic> disableEventLoopOnBridgeless_; std::atomic> enableAlignItemsBaselineOnFabricIOS_; std::atomic> enableAndroidLineHeightCentering_; std::atomic> enableBridgelessArchitecture_; @@ -111,7 +109,6 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> enableLayoutAnimationsOnAndroid_; std::atomic> enableLayoutAnimationsOnIOS_; std::atomic> enableLongTaskAPI_; - std::atomic> enableMicrotasks_; std::atomic> enablePreciseSchedulingForPremountItemsOnAndroid_; std::atomic> enablePropsUpdateReconciliationAndroid_; std::atomic> enableReportEventPaintTime_; @@ -134,7 +131,6 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> traceTurboModulePromiseRejectionsOnAndroid_; std::atomic> useFabricInterop_; std::atomic> useImmediateExecutorInAndroidBridgeless_; - std::atomic> useModernRuntimeScheduler_; std::atomic> useNativeViewConfigsInBridgelessMode_; std::atomic> useOptimisedViewPreallocationOnAndroid_; std::atomic> useOptimizedEventBatchingOnAndroid_; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index d43eeff75b814b..f1126e1498f1ac 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<<401b9e086cb5bdef9ba36c53ffd283e3>> */ /** @@ -35,11 +35,11 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return false; } - bool batchRenderingUpdatesInEventLoop() override { + bool completeReactInstanceCreationOnBgThreadOnAndroid() override { return false; } - bool completeReactInstanceCreationOnBgThreadOnAndroid() override { + bool disableEventLoopOnBridgeless() override { return false; } @@ -103,10 +103,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return false; } - bool enableMicrotasks() override { - return false; - } - bool enablePreciseSchedulingForPremountItemsOnAndroid() override { return false; } @@ -195,10 +191,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return false; } - bool useModernRuntimeScheduler() override { - return false; - } - bool useNativeViewConfigsInBridgelessMode() override { return false; } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index ada671ac44dd87..ff2a45fc5c52fc 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<<7cc1ba6a89d06d8cabf1271a725e7379>> + * @generated SignedSource<<729cdc4928dfe94e04eec893e2dec989>> */ /** @@ -27,8 +27,8 @@ class ReactNativeFeatureFlagsProvider { virtual bool commonTestFlag() = 0; virtual bool allowRecursiveCommitsWithSynchronousMountOnAndroid() = 0; - virtual bool batchRenderingUpdatesInEventLoop() = 0; virtual bool completeReactInstanceCreationOnBgThreadOnAndroid() = 0; + virtual bool disableEventLoopOnBridgeless() = 0; virtual bool enableAlignItemsBaselineOnFabricIOS() = 0; virtual bool enableAndroidLineHeightCentering() = 0; virtual bool enableBridgelessArchitecture() = 0; @@ -44,7 +44,6 @@ class ReactNativeFeatureFlagsProvider { virtual bool enableLayoutAnimationsOnAndroid() = 0; virtual bool enableLayoutAnimationsOnIOS() = 0; virtual bool enableLongTaskAPI() = 0; - virtual bool enableMicrotasks() = 0; virtual bool enablePreciseSchedulingForPremountItemsOnAndroid() = 0; virtual bool enablePropsUpdateReconciliationAndroid() = 0; virtual bool enableReportEventPaintTime() = 0; @@ -67,7 +66,6 @@ class ReactNativeFeatureFlagsProvider { virtual bool traceTurboModulePromiseRejectionsOnAndroid() = 0; virtual bool useFabricInterop() = 0; virtual bool useImmediateExecutorInAndroidBridgeless() = 0; - virtual bool useModernRuntimeScheduler() = 0; virtual bool useNativeViewConfigsInBridgelessMode() = 0; virtual bool useOptimisedViewPreallocationOnAndroid() = 0; virtual bool useOptimizedEventBatchingOnAndroid() = 0; diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index f336f66efdd66c..e3873a0084c68e 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<> + * @generated SignedSource<<91b26bd5cacb773d4bea4bbfa3919f37>> */ /** @@ -47,14 +47,14 @@ bool NativeReactNativeFeatureFlags::allowRecursiveCommitsWithSynchronousMountOnA return ReactNativeFeatureFlags::allowRecursiveCommitsWithSynchronousMountOnAndroid(); } -bool NativeReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop( +bool NativeReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid( jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop(); + return ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid(); } -bool NativeReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid( +bool NativeReactNativeFeatureFlags::disableEventLoopOnBridgeless( jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid(); + return ReactNativeFeatureFlags::disableEventLoopOnBridgeless(); } bool NativeReactNativeFeatureFlags::enableAlignItemsBaselineOnFabricIOS( @@ -132,11 +132,6 @@ bool NativeReactNativeFeatureFlags::enableLongTaskAPI( return ReactNativeFeatureFlags::enableLongTaskAPI(); } -bool NativeReactNativeFeatureFlags::enableMicrotasks( - jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::enableMicrotasks(); -} - bool NativeReactNativeFeatureFlags::enablePreciseSchedulingForPremountItemsOnAndroid( jsi::Runtime& /*runtime*/) { return ReactNativeFeatureFlags::enablePreciseSchedulingForPremountItemsOnAndroid(); @@ -247,11 +242,6 @@ bool NativeReactNativeFeatureFlags::useImmediateExecutorInAndroidBridgeless( return ReactNativeFeatureFlags::useImmediateExecutorInAndroidBridgeless(); } -bool NativeReactNativeFeatureFlags::useModernRuntimeScheduler( - jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::useModernRuntimeScheduler(); -} - bool NativeReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode( jsi::Runtime& /*runtime*/) { return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode(); diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index f9b05d2421085a..36969ffccd362e 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<<83fc6efe6c6c5c52ffe081b9696919e1>> + * @generated SignedSource<<57dd370978815368d98526138a54116b>> */ /** @@ -39,10 +39,10 @@ class NativeReactNativeFeatureFlags bool allowRecursiveCommitsWithSynchronousMountOnAndroid(jsi::Runtime& runtime); - bool batchRenderingUpdatesInEventLoop(jsi::Runtime& runtime); - bool completeReactInstanceCreationOnBgThreadOnAndroid(jsi::Runtime& runtime); + bool disableEventLoopOnBridgeless(jsi::Runtime& runtime); + bool enableAlignItemsBaselineOnFabricIOS(jsi::Runtime& runtime); bool enableAndroidLineHeightCentering(jsi::Runtime& runtime); @@ -73,8 +73,6 @@ class NativeReactNativeFeatureFlags bool enableLongTaskAPI(jsi::Runtime& runtime); - bool enableMicrotasks(jsi::Runtime& runtime); - bool enablePreciseSchedulingForPremountItemsOnAndroid(jsi::Runtime& runtime); bool enablePropsUpdateReconciliationAndroid(jsi::Runtime& runtime); @@ -119,8 +117,6 @@ class NativeReactNativeFeatureFlags bool useImmediateExecutorInAndroidBridgeless(jsi::Runtime& runtime); - bool useModernRuntimeScheduler(jsi::Runtime& runtime); - bool useNativeViewConfigsInBridgelessMode(jsi::Runtime& runtime); bool useOptimisedViewPreallocationOnAndroid(jsi::Runtime& runtime); diff --git a/packages/react-native/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp b/packages/react-native/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp index cba57fd72c5539..d6754ffc7f9f95 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp @@ -142,7 +142,8 @@ void NativeMutationObserver::notifyMutationObserversIfNecessary() { if (dispatchNotification) { SystraceSection s("NativeMutationObserver::notifyObservers"); - if (ReactNativeFeatureFlags::enableMicrotasks()) { + if (ReactNativeFeatureFlags::enableBridgelessArchitecture() && + !ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) { runtime_->queueMicrotask(notifyMutationObservers_.value()); } else { jsInvoker_->invokeAsync([&](jsi::Runtime& runtime) { diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp index aca04466179e4b..e889cee86df5e5 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp @@ -22,7 +22,8 @@ std::unique_ptr getRuntimeSchedulerImplementation( RuntimeExecutor runtimeExecutor, std::function now, RuntimeSchedulerTaskErrorHandler onTaskError) { - if (ReactNativeFeatureFlags::useModernRuntimeScheduler()) { + if (ReactNativeFeatureFlags::enableBridgelessArchitecture() && + !ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) { return std::make_unique( std::move(runtimeExecutor), std::move(now), std::move(onTaskError)); } else { diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp index 97933129b0ea6c..0a05dd76b33b4a 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp @@ -195,13 +195,7 @@ void RuntimeScheduler_Modern::executeNowOnTheSameThread( } void RuntimeScheduler_Modern::callExpiredTasks(jsi::Runtime& runtime) { - // If we have first-class support for microtasks, this a no-op. - if (ReactNativeFeatureFlags::enableMicrotasks()) { - return; - } - - SystraceSection s("RuntimeScheduler::callExpiredTasks"); - runEventLoop(runtime, true); + // No-op in the event loop implementation. } void RuntimeScheduler_Modern::scheduleRenderingUpdate( @@ -209,14 +203,8 @@ void RuntimeScheduler_Modern::scheduleRenderingUpdate( RuntimeSchedulerRenderingUpdate&& renderingUpdate) { SystraceSection s("RuntimeScheduler::scheduleRenderingUpdate"); - if (ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop()) { - surfaceIdsWithPendingRenderingUpdates_.insert(surfaceId); - pendingRenderingUpdates_.push(renderingUpdate); - } else { - if (renderingUpdate != nullptr) { - renderingUpdate(); - } - } + surfaceIdsWithPendingRenderingUpdates_.insert(surfaceId); + pendingRenderingUpdates_.push(renderingUpdate); } void RuntimeScheduler_Modern::setShadowTreeRevisionConsistencyManager( @@ -337,10 +325,8 @@ void RuntimeScheduler_Modern::runEventLoopTick( auto didUserCallbackTimeout = task.expirationTime <= taskStartTime; executeTask(runtime, task, didUserCallbackTimeout); - if (ReactNativeFeatureFlags::enableMicrotasks()) { - // "Perform a microtask checkpoint" step. - performMicrotaskCheckpoint(runtime); - } + // "Perform a microtask checkpoint" step. + performMicrotaskCheckpoint(runtime); if (ReactNativeFeatureFlags::enableLongTaskAPI()) { auto taskEndTime = now_(); @@ -348,10 +334,8 @@ void RuntimeScheduler_Modern::runEventLoopTick( reportLongTasks(task, taskStartTime, taskEndTime); } - if (ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop()) { - // "Update the rendering" step. - updateRendering(); - } + // "Update the rendering" step. + updateRendering(); currentTask_ = nullptr; } diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp index 2dc9a8b1276914..bc8be4d44e30ee 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp @@ -28,19 +28,11 @@ static bool forcedBatchRenderingUpdatesInEventLoop = false; class RuntimeSchedulerTestFeatureFlags : public ReactNativeFeatureFlagsDefaults { public: - RuntimeSchedulerTestFeatureFlags(bool useModernRuntimeScheduler) - : useModernRuntimeScheduler_(useModernRuntimeScheduler) {} + explicit RuntimeSchedulerTestFeatureFlags(bool enableEventLoop) + : enableEventLoop_(enableEventLoop) {} - bool useModernRuntimeScheduler() override { - return useModernRuntimeScheduler_; - } - - bool enableMicrotasks() override { - return useModernRuntimeScheduler_; - } - - bool batchRenderingUpdatesInEventLoop() override { - return forcedBatchRenderingUpdatesInEventLoop; + bool enableBridgelessArchitecture() override { + return enableEventLoop_; } bool enableLongTaskAPI() override { @@ -48,7 +40,7 @@ class RuntimeSchedulerTestFeatureFlags } private: - bool useModernRuntimeScheduler_; + bool enableEventLoop_; }; class RuntimeSchedulerTest : public testing::TestWithParam { @@ -162,21 +154,10 @@ TEST_P(RuntimeSchedulerTest, scheduleSingleTask) { EXPECT_EQ(stubQueue_->size(), 0); } -TEST_P(RuntimeSchedulerTest, scheduleNonBatchedRenderingUpdate) { - forcedBatchRenderingUpdatesInEventLoop = false; - - bool didRunRenderingUpdate = false; - - runtimeScheduler_->scheduleRenderingUpdate( - 0, [&]() { didRunRenderingUpdate = true; }); - - EXPECT_TRUE(didRunRenderingUpdate); -} - TEST_P( RuntimeSchedulerTest, scheduleSingleTaskWithMicrotasksAndBatchedRenderingUpdate) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -616,7 +597,7 @@ TEST_P(RuntimeSchedulerTest, immediateTaskDoesntYieldToPlatformEvent) { } TEST_P(RuntimeSchedulerTest, scheduleTaskWithYielding) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -640,7 +621,7 @@ TEST_P(RuntimeSchedulerTest, scheduleTaskWithYielding) { } TEST_P(RuntimeSchedulerTest, normalTaskYieldsToSynchronousAccess) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -709,7 +690,7 @@ TEST_P(RuntimeSchedulerTest, normalTaskYieldsToSynchronousAccess) { } TEST_P(RuntimeSchedulerTest, normalTaskYieldsToSynchronousAccessAndResumes) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -766,7 +747,7 @@ TEST_P(RuntimeSchedulerTest, normalTaskYieldsToSynchronousAccessAndResumes) { } TEST_P(RuntimeSchedulerTest, immediateTaskYieldsToSynchronousAccess) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -1090,7 +1071,7 @@ TEST_P(RuntimeSchedulerTest, legacyTwoThreadsRequestAccessToTheRuntime) { } TEST_P(RuntimeSchedulerTest, modernTwoThreadsRequestAccessToTheRuntime) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -1173,7 +1154,7 @@ TEST_P(RuntimeSchedulerTest, modernTwoThreadsRequestAccessToTheRuntime) { } TEST_P(RuntimeSchedulerTest, errorInTaskShouldNotStopMicrotasks) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -1219,7 +1200,7 @@ TEST_P(RuntimeSchedulerTest, errorInTaskShouldNotStopMicrotasks) { } TEST_P(RuntimeSchedulerTest, reportsLongTasks) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } @@ -1271,7 +1252,7 @@ TEST_P(RuntimeSchedulerTest, reportsLongTasks) { } TEST_P(RuntimeSchedulerTest, reportsLongTasksWithYielding) { - // Only for modern runtime scheduler + // Only for event loop if (!GetParam()) { return; } diff --git a/packages/react-native/ReactCommon/react/runtime/ReactInstance.cpp b/packages/react-native/ReactCommon/react/runtime/ReactInstance.cpp index 78eccf35f9073f..e1e140c3e0550c 100644 --- a/packages/react-native/ReactCommon/react/runtime/ReactInstance.cpp +++ b/packages/react-native/ReactCommon/react/runtime/ReactInstance.cpp @@ -78,7 +78,7 @@ ReactInstance::ReactInstance( // If we have first-class support for microtasks, // they would've been called as part of the previous callback. - if (!ReactNativeFeatureFlags::enableMicrotasks()) { + if (ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) { if (auto timerManager = weakTimerManager.lock()) { timerManager->callReactNativeMicrotasks(jsiRuntime); } diff --git a/packages/react-native/ReactCommon/react/runtime/TimerManager.cpp b/packages/react-native/ReactCommon/react/runtime/TimerManager.cpp index bc205ce31810dc..e450159a7f69c8 100644 --- a/packages/react-native/ReactCommon/react/runtime/TimerManager.cpp +++ b/packages/react-native/ReactCommon/react/runtime/TimerManager.cpp @@ -226,7 +226,7 @@ void TimerManager::attachGlobals(jsi::Runtime& runtime) { // Ensure that we don't define `setImmediate` and `clearImmediate` if // microtasks are enabled (as we polyfill them using `queueMicrotask` then). - if (!ReactNativeFeatureFlags::enableMicrotasks()) { + if (ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) { runtime.global().setProperty( runtime, "setImmediate", diff --git a/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp b/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp index 8e2e193a53cbfb..9d59d46043875c 100644 --- a/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp +++ b/packages/react-native/ReactCommon/react/runtime/hermes/HermesInstance.cpp @@ -147,7 +147,9 @@ std::unique_ptr HermesInstance::createJSRuntime( ::hermes::vm::RuntimeConfig::Builder() .withGCConfig(gcConfig.build()) .withEnableSampleProfiling(true) - .withMicrotaskQueue(ReactNativeFeatureFlags::enableMicrotasks()) + .withMicrotaskQueue( + ReactNativeFeatureFlags::enableBridgelessArchitecture() && + !ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) .withVMExperimentFlags(vmExperimentFlags); if (crashManager) { diff --git a/packages/react-native/scripts/featureflags/README.md b/packages/react-native/scripts/featureflags/README.md index b39adfbda6ab4a..7f774a944c436d 100644 --- a/packages/react-native/scripts/featureflags/README.md +++ b/packages/react-native/scripts/featureflags/README.md @@ -18,14 +18,14 @@ Example contents: ```javascript module.exports = { common: { - enableMicrotasks: { - description: 'Enable the use of microtasks in the JS runtime.', + enableNativeBehavior: { + description: 'Enable some behavior both in native and in JS.', defaultValue: false } }, jsOnly: { - enableAccessToHostTreeInFabric: { - description: 'Enables access to the host tree in Fabric using DOM-compatible APIs.', + enableJSBehavior: { + description: 'Enables some behavior in the JS layer.', defaultValue: false } } @@ -57,7 +57,7 @@ from JavaScript. ```c++ #include -if (ReactNativeFeatureFlags::enableMicrotasks()) { +if (ReactNativeFeatureFlags::enableNativeBehavior()) { // do something } ``` @@ -68,7 +68,7 @@ if (ReactNativeFeatureFlags::enableMicrotasks()) { import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags fun someMethod() { - if (ReactNativeFeatureFlags.enableMicrotasks()) { + if (ReactNativeFeatureFlags.enableNativeBehavior()) { // do something } } @@ -79,11 +79,11 @@ fun someMethod() { ```javascript import * as ReactNativeFeatureFlags from 'react-native/src/private/featureflags/ReactNativeFeatureFlags'; -if (ReactNativeFeatureFlags.enableMicrotasks()) { +if (ReactNativeFeatureFlags.enableNativeBehavior()) { // Native flag } -if (ReactNativeFeatureFlags.enableAccessToHostTreeInFabric()) { +if (ReactNativeFeatureFlags.enableJSBehavior()) { // JS-only flag } ``` @@ -109,7 +109,7 @@ class CustomReactNativeFeatureFlags : public ReactNativeFeatureFlagsDefaults { public: CustomReactNativeFeatureFlags(); - bool enableMicrotasks() override { + bool enableNativeBehavior() override { return true; } } @@ -136,7 +136,7 @@ fun overrideFeatureFlags() { import * as ReactNativeFeatureFlags from 'react-native/src/private/featureflags/ReactNativeFeatureFlags'; ReactNativeFeatureFlags.override({ - enableAccessToHostTreeInFabric: () => true, + enableJSBehavior: () => true, }); ``` diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 4cf49ed3271728..4f2e8d97c57ef8 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -54,21 +54,21 @@ const definitions: FeatureFlagDefinitions = { purpose: 'experimentation', }, }, - batchRenderingUpdatesInEventLoop: { + completeReactInstanceCreationOnBgThreadOnAndroid: { defaultValue: false, metadata: { + dateAdded: '2024-07-22', description: - 'When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop.', - purpose: 'release', + 'Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android', + purpose: 'experimentation', }, }, - completeReactInstanceCreationOnBgThreadOnAndroid: { + disableEventLoopOnBridgeless: { defaultValue: false, metadata: { - dateAdded: '2024-07-22', description: - 'Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android', - purpose: 'experimentation', + 'The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances.', + purpose: 'release', }, }, enableAlignItemsBaselineOnFabricIOS: { @@ -195,14 +195,6 @@ const definitions: FeatureFlagDefinitions = { purpose: 'release', }, }, - enableMicrotasks: { - defaultValue: false, - metadata: { - description: - 'Enables the use of microtasks in Hermes (scheduling) and RuntimeScheduler (execution).', - purpose: 'release', - }, - }, enablePreciseSchedulingForPremountItemsOnAndroid: { defaultValue: false, metadata: { @@ -395,14 +387,6 @@ const definitions: FeatureFlagDefinitions = { purpose: 'experimentation', }, }, - useModernRuntimeScheduler: { - defaultValue: false, - metadata: { - description: - 'When enabled, it uses the modern fork of RuntimeScheduler that allows scheduling tasks with priorities from any thread.', - purpose: 'release', - }, - }, useNativeViewConfigsInBridgelessMode: { defaultValue: false, metadata: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index cb226d3e55d468..10c1c20550d314 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<<75865f1371182e1ed3bce0f8f367faeb>> + * @generated SignedSource<> * @flow strict */ @@ -52,8 +52,8 @@ export type ReactNativeFeatureFlags = { ...ReactNativeFeatureFlagsJsOnly, commonTestFlag: Getter, allowRecursiveCommitsWithSynchronousMountOnAndroid: Getter, - batchRenderingUpdatesInEventLoop: Getter, completeReactInstanceCreationOnBgThreadOnAndroid: Getter, + disableEventLoopOnBridgeless: Getter, enableAlignItemsBaselineOnFabricIOS: Getter, enableAndroidLineHeightCentering: Getter, enableBridgelessArchitecture: Getter, @@ -69,7 +69,6 @@ export type ReactNativeFeatureFlags = { enableLayoutAnimationsOnAndroid: Getter, enableLayoutAnimationsOnIOS: Getter, enableLongTaskAPI: Getter, - enableMicrotasks: Getter, enablePreciseSchedulingForPremountItemsOnAndroid: Getter, enablePropsUpdateReconciliationAndroid: Getter, enableReportEventPaintTime: Getter, @@ -92,7 +91,6 @@ export type ReactNativeFeatureFlags = { traceTurboModulePromiseRejectionsOnAndroid: Getter, useFabricInterop: Getter, useImmediateExecutorInAndroidBridgeless: Getter, - useModernRuntimeScheduler: Getter, useNativeViewConfigsInBridgelessMode: Getter, useOptimisedViewPreallocationOnAndroid: Getter, useOptimizedEventBatchingOnAndroid: Getter, @@ -194,14 +192,14 @@ export const commonTestFlag: Getter = createNativeFlagGetter('commonTes * Adds support for recursively processing commits that mount synchronously (Android only). */ export const allowRecursiveCommitsWithSynchronousMountOnAndroid: Getter = createNativeFlagGetter('allowRecursiveCommitsWithSynchronousMountOnAndroid', false); -/** - * When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop. - */ -export const batchRenderingUpdatesInEventLoop: Getter = createNativeFlagGetter('batchRenderingUpdatesInEventLoop', false); /** * Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android */ export const completeReactInstanceCreationOnBgThreadOnAndroid: Getter = createNativeFlagGetter('completeReactInstanceCreationOnBgThreadOnAndroid', false); +/** + * The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances. + */ +export const disableEventLoopOnBridgeless: Getter = createNativeFlagGetter('disableEventLoopOnBridgeless', false); /** * Kill-switch to turn off support for aling-items:baseline on Fabric iOS. */ @@ -262,10 +260,6 @@ export const enableLayoutAnimationsOnIOS: Getter = createNativeFlagGett * Enables the reporting of long tasks through `PerformanceObserver`. Only works if the event loop is enabled. */ export const enableLongTaskAPI: Getter = createNativeFlagGetter('enableLongTaskAPI', false); -/** - * Enables the use of microtasks in Hermes (scheduling) and RuntimeScheduler (execution). - */ -export const enableMicrotasks: Getter = createNativeFlagGetter('enableMicrotasks', false); /** * Moves execution of pre-mount items to outside the choregrapher in the main thread, so we can estimate idle time more precisely (Android only). */ @@ -354,10 +348,6 @@ export const useFabricInterop: Getter = createNativeFlagGetter('useFabr * Invoke callbacks immediately on the ReactInstance rather than going through a background thread for synchronization */ export const useImmediateExecutorInAndroidBridgeless: Getter = createNativeFlagGetter('useImmediateExecutorInAndroidBridgeless', false); -/** - * When enabled, it uses the modern fork of RuntimeScheduler that allows scheduling tasks with priorities from any thread. - */ -export const useModernRuntimeScheduler: Getter = createNativeFlagGetter('useModernRuntimeScheduler', false); /** * When enabled, the native view configs are used in bridgeless mode. */ diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index 6e05e33d418938..470c0b9d3fb771 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/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<> * @flow strict */ @@ -25,8 +25,8 @@ import * as TurboModuleRegistry from '../../../../Libraries/TurboModule/TurboMod export interface Spec extends TurboModule { +commonTestFlag?: () => boolean; +allowRecursiveCommitsWithSynchronousMountOnAndroid?: () => boolean; - +batchRenderingUpdatesInEventLoop?: () => boolean; +completeReactInstanceCreationOnBgThreadOnAndroid?: () => boolean; + +disableEventLoopOnBridgeless?: () => boolean; +enableAlignItemsBaselineOnFabricIOS?: () => boolean; +enableAndroidLineHeightCentering?: () => boolean; +enableBridgelessArchitecture?: () => boolean; @@ -42,7 +42,6 @@ export interface Spec extends TurboModule { +enableLayoutAnimationsOnAndroid?: () => boolean; +enableLayoutAnimationsOnIOS?: () => boolean; +enableLongTaskAPI?: () => boolean; - +enableMicrotasks?: () => boolean; +enablePreciseSchedulingForPremountItemsOnAndroid?: () => boolean; +enablePropsUpdateReconciliationAndroid?: () => boolean; +enableReportEventPaintTime?: () => boolean; @@ -65,7 +64,6 @@ export interface Spec extends TurboModule { +traceTurboModulePromiseRejectionsOnAndroid?: () => boolean; +useFabricInterop?: () => boolean; +useImmediateExecutorInAndroidBridgeless?: () => boolean; - +useModernRuntimeScheduler?: () => boolean; +useNativeViewConfigsInBridgelessMode?: () => boolean; +useOptimisedViewPreallocationOnAndroid?: () => boolean; +useOptimizedEventBatchingOnAndroid?: () => boolean;