From 87b73a0bad25ac13c83ef8dc096058b9ddeae3ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Mon, 18 Mar 2024 04:51:39 -0700 Subject: [PATCH] Enable event loop by default when bridgeless is enabled (#43396) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43396 Changelog: [General][Changed] Enabled new event loop behavior when bridgeless (new architecture) is enabled. Reviewed By: rshest Differential Revision: D54682678 fbshipit-source-id: ff8c45bc1caae0e9182aa94d915d7b6f9427caf9 --- .../Libraries/AppDelegate/RCTAppDelegate.mm | 29 +++++++++++++++++++ .../AppDelegate/React-RCTAppDelegate.podspec | 1 + .../DefaultNewArchitectureEntryPoint.kt | 13 +++++++++ 3 files changed, 43 insertions(+) diff --git a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm index b58482512a8..4e3fa2f8bdb 100644 --- a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm +++ b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm @@ -12,6 +12,8 @@ #import #import #import +#import +#import #import #import "RCTAppDelegate+Protected.h" #import "RCTAppSetupUtils.h" @@ -38,6 +40,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [self _setUpFeatureFlags]; + RCTSetNewArchEnabled([self newArchEnabled]); [RCTColorSpaceUtils applyDefaultColorSpace:self.defaultColorSpace]; RCTAppSetupPrepareApp(application, self.turboModuleEnabled); @@ -259,4 +263,29 @@ return [[RCTRootViewFactory alloc] initWithConfiguration:configuration andTurboModuleManagerDelegate:self]; } +#pragma mark - Feature Flags + +class RCTAppDelegateBridgelessFeatureFlags : public facebook::react::ReactNativeFeatureFlagsDefaults { + public: + bool useModernRuntimeScheduler() override + { + return true; + } + bool enableMicrotasks() override + { + return true; + } + bool batchRenderingUpdatesInEventLoop() override + { + return true; + } +}; + +- (void)_setUpFeatureFlags +{ + if ([self bridgelessEnabled]) { + facebook::react::ReactNativeFeatureFlags::override(std::make_unique()); + } +} + @end diff --git a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec index 24b7368cb71..cbc952669ae 100644 --- a/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec +++ b/packages/react-native/Libraries/AppDelegate/React-RCTAppDelegate.podspec @@ -91,6 +91,7 @@ Pod::Spec.new do |s| add_dependency(s, "React-utils") add_dependency(s, "React-debug") add_dependency(s, "React-rendererdebug") + add_dependency(s, "React-featureflags") if use_hermes s.dependency "React-hermes" diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt index 59ffe9bccb7..051effc8525 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt @@ -11,6 +11,8 @@ package com.facebook.react.defaults import com.facebook.react.common.annotations.VisibleForTesting import com.facebook.react.config.ReactFeatureFlags +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsDefaults /** * A utility class that serves as an entry point for users setup the New Architecture. @@ -45,6 +47,17 @@ public object DefaultNewArchitectureEntryPoint { ReactFeatureFlags.unstable_useTurboModuleInterop = bridgelessEnabled ReactFeatureFlags.enableFabricPendingEventQueue = fabricEnabled + if (bridgelessEnabled) { + ReactNativeFeatureFlags.override( + object : ReactNativeFeatureFlagsDefaults() { + override fun useModernRuntimeScheduler(): Boolean = true + + override fun enableMicrotasks(): Boolean = true + + override fun batchRenderingUpdatesInEventLoop(): Boolean = true + }) + } + privateFabricEnabled = fabricEnabled privateTurboModulesEnabled = turboModulesEnabled privateConcurrentReactEnabled = fabricEnabled