mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Clean up feature flag to disable event loop on bridgeless (#48851)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48851 Changelog: [internal] Remove the feature flag to disable the event loop on bridgeless, as we no longer have a use case for it. From now on, we can be 100% certain that Bridgeless == Event Loop! Reviewed By: sammy-SC Differential Revision: D68270102 fbshipit-source-id: c661bf11f51d4044f9f485b971c43f03197e2983
This commit is contained in:
committed by
Facebook GitHub Bot
parent
bdb5804f32
commit
0883207e44
+47
-68
@@ -10,9 +10,6 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
const ReactNativeFeatureFlags = require('../../src/private/featureflags/ReactNativeFeatureFlags');
|
||||
const NativeReactNativeFeatureFlags =
|
||||
require('../../src/private/featureflags/specs/NativeReactNativeFeatureFlags').default;
|
||||
const {polyfillGlobal} = require('../Utilities/PolyfillFunctions');
|
||||
|
||||
if (__DEV__) {
|
||||
@@ -21,19 +18,46 @@ if (__DEV__) {
|
||||
}
|
||||
}
|
||||
|
||||
const isEventLoopEnabled = (() => {
|
||||
if (NativeReactNativeFeatureFlags == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (
|
||||
ReactNativeFeatureFlags.enableBridgelessArchitecture() &&
|
||||
!ReactNativeFeatureFlags.disableEventLoopOnBridgeless()
|
||||
);
|
||||
})();
|
||||
|
||||
// In bridgeless mode, timers are host functions installed from cpp.
|
||||
if (global.RN$Bridgeless !== true) {
|
||||
if (global.RN$Bridgeless === true) {
|
||||
polyfillGlobal(
|
||||
'requestIdleCallback',
|
||||
() =>
|
||||
require('../../src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks')
|
||||
.default.requestIdleCallback,
|
||||
);
|
||||
|
||||
polyfillGlobal(
|
||||
'cancelIdleCallback',
|
||||
() =>
|
||||
require('../../src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks')
|
||||
.default.cancelIdleCallback,
|
||||
);
|
||||
|
||||
// This is the flag that tells React to use `queueMicrotask` to batch state
|
||||
// updates, instead of using the scheduler to schedule a regular task.
|
||||
// We use a global variable because we don't currently have any other
|
||||
// mechanism to pass feature flags from RN to React in OSS.
|
||||
global.RN$enableMicrotasksInReact = true;
|
||||
|
||||
polyfillGlobal(
|
||||
'queueMicrotask',
|
||||
() =>
|
||||
require('../../src/private/webapis/microtasks/specs/NativeMicrotasks')
|
||||
.default.queueMicrotask,
|
||||
);
|
||||
|
||||
// We shim the immediate APIs via `queueMicrotask` to maintain the backward
|
||||
// compatibility.
|
||||
polyfillGlobal(
|
||||
'setImmediate',
|
||||
() => require('./Timers/immediateShim').setImmediate,
|
||||
);
|
||||
polyfillGlobal(
|
||||
'clearImmediate',
|
||||
() => require('./Timers/immediateShim').clearImmediate,
|
||||
);
|
||||
} else {
|
||||
/**
|
||||
* Set up timers.
|
||||
* You can use this module directly, or just require InitializeCore.
|
||||
@@ -59,50 +83,7 @@ if (global.RN$Bridgeless !== true) {
|
||||
defineLazyTimer('cancelAnimationFrame');
|
||||
defineLazyTimer('requestIdleCallback');
|
||||
defineLazyTimer('cancelIdleCallback');
|
||||
} else if (isEventLoopEnabled) {
|
||||
polyfillGlobal(
|
||||
'requestIdleCallback',
|
||||
() =>
|
||||
require('../../src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks')
|
||||
.default.requestIdleCallback,
|
||||
);
|
||||
|
||||
polyfillGlobal(
|
||||
'cancelIdleCallback',
|
||||
() =>
|
||||
require('../../src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks')
|
||||
.default.cancelIdleCallback,
|
||||
);
|
||||
}
|
||||
|
||||
// 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 (isEventLoopEnabled) {
|
||||
// This is the flag that tells React to use `queueMicrotask` to batch state
|
||||
// updates, instead of using the scheduler to schedule a regular task.
|
||||
// We use a global variable because we don't currently have any other
|
||||
// mechanism to pass feature flags from RN to React in OSS.
|
||||
global.RN$enableMicrotasksInReact = true;
|
||||
|
||||
polyfillGlobal(
|
||||
'queueMicrotask',
|
||||
() =>
|
||||
require('../../src/private/webapis/microtasks/specs/NativeMicrotasks')
|
||||
.default.queueMicrotask,
|
||||
);
|
||||
|
||||
// We shim the immediate APIs via `queueMicrotask` to maintain the backward
|
||||
// compatibility.
|
||||
polyfillGlobal(
|
||||
'setImmediate',
|
||||
() => require('./Timers/immediateShim').setImmediate,
|
||||
);
|
||||
polyfillGlobal(
|
||||
'clearImmediate',
|
||||
() => require('./Timers/immediateShim').clearImmediate,
|
||||
);
|
||||
} else {
|
||||
// Polyfill it with promise (regardless it's polyfilled or native) otherwise.
|
||||
polyfillGlobal(
|
||||
'queueMicrotask',
|
||||
@@ -112,14 +93,12 @@ if (isEventLoopEnabled) {
|
||||
// When promise was polyfilled hence is queued to the RN microtask queue,
|
||||
// we polyfill the immediate APIs as aliases to the ReactNativeMicrotask APIs.
|
||||
// Note that in bridgeless mode, immediate APIs are installed from cpp.
|
||||
if (global.RN$Bridgeless !== true) {
|
||||
polyfillGlobal(
|
||||
'setImmediate',
|
||||
() => require('./Timers/JSTimers').queueReactNativeMicrotask,
|
||||
);
|
||||
polyfillGlobal(
|
||||
'clearImmediate',
|
||||
() => require('./Timers/JSTimers').clearReactNativeMicrotask,
|
||||
);
|
||||
}
|
||||
polyfillGlobal(
|
||||
'setImmediate',
|
||||
() => require('./Timers/JSTimers').queueReactNativeMicrotask,
|
||||
);
|
||||
polyfillGlobal(
|
||||
'clearImmediate',
|
||||
() => require('./Timers/JSTimers').clearReactNativeMicrotask,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -9875,7 +9875,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
|
||||
commonTestFlag: Getter<boolean>,
|
||||
commonTestFlagWithoutNativeImplementation: Getter<boolean>,
|
||||
completeReactInstanceCreationOnBgThreadOnAndroid: Getter<boolean>,
|
||||
disableEventLoopOnBridgeless: Getter<boolean>,
|
||||
disableMountItemReorderingAndroid: Getter<boolean>,
|
||||
enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean>,
|
||||
enableBridgelessArchitecture: Getter<boolean>,
|
||||
@@ -9940,7 +9939,6 @@ declare export const useRefsForTextInputState: Getter<boolean>;
|
||||
declare export const commonTestFlag: Getter<boolean>;
|
||||
declare export const commonTestFlagWithoutNativeImplementation: Getter<boolean>;
|
||||
declare export const completeReactInstanceCreationOnBgThreadOnAndroid: Getter<boolean>;
|
||||
declare export const disableEventLoopOnBridgeless: Getter<boolean>;
|
||||
declare export const disableMountItemReorderingAndroid: Getter<boolean>;
|
||||
declare export const enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean>;
|
||||
declare export const enableBridgelessArchitecture: Getter<boolean>;
|
||||
@@ -10017,7 +10015,6 @@ exports[`public API should not change unintentionally src/private/featureflags/s
|
||||
+commonTestFlag?: () => boolean;
|
||||
+commonTestFlagWithoutNativeImplementation?: () => boolean;
|
||||
+completeReactInstanceCreationOnBgThreadOnAndroid?: () => boolean;
|
||||
+disableEventLoopOnBridgeless?: () => boolean;
|
||||
+disableMountItemReorderingAndroid?: () => boolean;
|
||||
+enableAccumulatedUpdatesInRawPropsAndroid?: () => boolean;
|
||||
+enableBridgelessArchitecture?: () => boolean;
|
||||
|
||||
+1
-7
@@ -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<<9b4dfbbcc5296014d76446c3a562b260>>
|
||||
* @generated SignedSource<<82b69f7d6a2b7155fadbc47832bcf032>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -40,12 +40,6 @@ public object ReactNativeFeatureFlags {
|
||||
@JvmStatic
|
||||
public fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean = accessor.completeReactInstanceCreationOnBgThreadOnAndroid()
|
||||
|
||||
/**
|
||||
* The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances.
|
||||
*/
|
||||
@JvmStatic
|
||||
public fun disableEventLoopOnBridgeless(): Boolean = accessor.disableEventLoopOnBridgeless()
|
||||
|
||||
/**
|
||||
* Prevent FabricMountingManager from reordering mountitems, which may lead to invalid state on the UI thread
|
||||
*/
|
||||
|
||||
+1
-11
@@ -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<<307d64b948ab7cbba4216720c517c6ec>>
|
||||
* @generated SignedSource<<04dcb5f63c422b34db381054a44e3727>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -22,7 +22,6 @@ package com.facebook.react.internal.featureflags
|
||||
public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccessor {
|
||||
private var commonTestFlagCache: Boolean? = null
|
||||
private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null
|
||||
private var disableEventLoopOnBridgelessCache: Boolean? = null
|
||||
private var disableMountItemReorderingAndroidCache: Boolean? = null
|
||||
private var enableAccumulatedUpdatesInRawPropsAndroidCache: Boolean? = null
|
||||
private var enableBridgelessArchitectureCache: Boolean? = null
|
||||
@@ -86,15 +85,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun disableEventLoopOnBridgeless(): Boolean {
|
||||
var cached = disableEventLoopOnBridgelessCache
|
||||
if (cached == null) {
|
||||
cached = ReactNativeFeatureFlagsCxxInterop.disableEventLoopOnBridgeless()
|
||||
disableEventLoopOnBridgelessCache = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
override fun disableMountItemReorderingAndroid(): Boolean {
|
||||
var cached = disableMountItemReorderingAndroidCache
|
||||
if (cached == null) {
|
||||
|
||||
+1
-3
@@ -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<<e9237a045ae4dac8109772f558059534>>
|
||||
* @generated SignedSource<<4510db43da901e086bed1f1d6120e01b>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -32,8 +32,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun disableEventLoopOnBridgeless(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun disableMountItemReorderingAndroid(): Boolean
|
||||
|
||||
@DoNotStrip @JvmStatic public external fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean
|
||||
|
||||
+1
-3
@@ -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<<bc8a67b9d153fc353054f38f32267a89>>
|
||||
* @generated SignedSource<<91864e51f03045343d7f908c87a85901>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -27,8 +27,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
||||
|
||||
override fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean = true
|
||||
|
||||
override fun disableEventLoopOnBridgeless(): Boolean = false
|
||||
|
||||
override fun disableMountItemReorderingAndroid(): Boolean = false
|
||||
|
||||
override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = false
|
||||
|
||||
+1
-12
@@ -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<<eef5b0c5d02927b3984a2dd8d0c48f1c>>
|
||||
* @generated SignedSource<<c74fd40b5988929440b157ea5437d65b>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -26,7 +26,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
|
||||
|
||||
private var commonTestFlagCache: Boolean? = null
|
||||
private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null
|
||||
private var disableEventLoopOnBridgelessCache: Boolean? = null
|
||||
private var disableMountItemReorderingAndroidCache: Boolean? = null
|
||||
private var enableAccumulatedUpdatesInRawPropsAndroidCache: Boolean? = null
|
||||
private var enableBridgelessArchitectureCache: Boolean? = null
|
||||
@@ -92,16 +91,6 @@ 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 disableMountItemReorderingAndroid(): Boolean {
|
||||
var cached = disableMountItemReorderingAndroidCache
|
||||
if (cached == null) {
|
||||
|
||||
+1
-3
@@ -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<<d1ddd8a765735a17f9967001669a50ec>>
|
||||
* @generated SignedSource<<f788466279ae3072eb6dcf0c69125360>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -27,8 +27,6 @@ public interface ReactNativeFeatureFlagsProvider {
|
||||
|
||||
@DoNotStrip public fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean
|
||||
|
||||
@DoNotStrip public fun disableEventLoopOnBridgeless(): Boolean
|
||||
|
||||
@DoNotStrip public fun disableMountItemReorderingAndroid(): Boolean
|
||||
|
||||
@DoNotStrip public fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean
|
||||
|
||||
+1
-15
@@ -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<<1359f52ece07f77a4a61083a94f10fe0>>
|
||||
* @generated SignedSource<<64272d425ecd02e71d1a59170ad942cd>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -51,12 +51,6 @@ class ReactNativeFeatureFlagsProviderHolder
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool disableEventLoopOnBridgeless() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableEventLoopOnBridgeless");
|
||||
return method(javaProvider_);
|
||||
}
|
||||
|
||||
bool disableMountItemReorderingAndroid() override {
|
||||
static const auto method =
|
||||
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableMountItemReorderingAndroid");
|
||||
@@ -335,11 +329,6 @@ bool JReactNativeFeatureFlagsCxxInterop::completeReactInstanceCreationOnBgThread
|
||||
return ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::disableEventLoopOnBridgeless(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::disableEventLoopOnBridgeless();
|
||||
}
|
||||
|
||||
bool JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
||||
return ReactNativeFeatureFlags::disableMountItemReorderingAndroid();
|
||||
@@ -597,9 +586,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
||||
makeNativeMethod(
|
||||
"completeReactInstanceCreationOnBgThreadOnAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::completeReactInstanceCreationOnBgThreadOnAndroid),
|
||||
makeNativeMethod(
|
||||
"disableEventLoopOnBridgeless",
|
||||
JReactNativeFeatureFlagsCxxInterop::disableEventLoopOnBridgeless),
|
||||
makeNativeMethod(
|
||||
"disableMountItemReorderingAndroid",
|
||||
JReactNativeFeatureFlagsCxxInterop::disableMountItemReorderingAndroid),
|
||||
|
||||
+1
-4
@@ -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<<13d552908696bd42ac2900499bc6074d>>
|
||||
* @generated SignedSource<<4d3c8e5c85de5c7a9bf6ad159d110404>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -36,9 +36,6 @@ class JReactNativeFeatureFlagsCxxInterop
|
||||
static bool completeReactInstanceCreationOnBgThreadOnAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool disableEventLoopOnBridgeless(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
static bool disableMountItemReorderingAndroid(
|
||||
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
||||
|
||||
|
||||
@@ -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<<b815f41d024d315ba0b6efcec89b31e1>>
|
||||
* @generated SignedSource<<da2936de884dd9d85e80652fe76d66ca>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -34,10 +34,6 @@ bool ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid()
|
||||
return getAccessor().completeReactInstanceCreationOnBgThreadOnAndroid();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::disableEventLoopOnBridgeless() {
|
||||
return getAccessor().disableEventLoopOnBridgeless();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlags::disableMountItemReorderingAndroid() {
|
||||
return getAccessor().disableMountItemReorderingAndroid();
|
||||
}
|
||||
|
||||
@@ -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<<da35bc7466accd84e6f0ce56f166c845>>
|
||||
* @generated SignedSource<<fd9bd691bde2694db1c0401930e275b3>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -49,11 +49,6 @@ class ReactNativeFeatureFlags {
|
||||
*/
|
||||
RN_EXPORT static bool completeReactInstanceCreationOnBgThreadOnAndroid();
|
||||
|
||||
/**
|
||||
* 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 disableEventLoopOnBridgeless();
|
||||
|
||||
/**
|
||||
* Prevent FabricMountingManager from reordering mountitems, which may lead to invalid state on the UI thread
|
||||
*/
|
||||
|
||||
+45
-63
@@ -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<<9a696445ba524ac777b6a7601c6c9510>>
|
||||
* @generated SignedSource<<fd2eaff91ac40a07c2306704c0b69f5c>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -65,24 +65,6 @@ bool ReactNativeFeatureFlagsAccessor::completeReactInstanceCreationOnBgThreadOnA
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::disableEventLoopOnBridgeless() {
|
||||
auto flagValue = disableEventLoopOnBridgeless_.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(2, "disableEventLoopOnBridgeless");
|
||||
|
||||
flagValue = currentProvider_->disableEventLoopOnBridgeless();
|
||||
disableEventLoopOnBridgeless_ = flagValue;
|
||||
}
|
||||
|
||||
return flagValue.value();
|
||||
}
|
||||
|
||||
bool ReactNativeFeatureFlagsAccessor::disableMountItemReorderingAndroid() {
|
||||
auto flagValue = disableMountItemReorderingAndroid_.load();
|
||||
|
||||
@@ -92,7 +74,7 @@ bool ReactNativeFeatureFlagsAccessor::disableMountItemReorderingAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(3, "disableMountItemReorderingAndroid");
|
||||
markFlagAsAccessed(2, "disableMountItemReorderingAndroid");
|
||||
|
||||
flagValue = currentProvider_->disableMountItemReorderingAndroid();
|
||||
disableMountItemReorderingAndroid_ = flagValue;
|
||||
@@ -110,7 +92,7 @@ bool ReactNativeFeatureFlagsAccessor::enableAccumulatedUpdatesInRawPropsAndroid(
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(4, "enableAccumulatedUpdatesInRawPropsAndroid");
|
||||
markFlagAsAccessed(3, "enableAccumulatedUpdatesInRawPropsAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableAccumulatedUpdatesInRawPropsAndroid();
|
||||
enableAccumulatedUpdatesInRawPropsAndroid_ = flagValue;
|
||||
@@ -128,7 +110,7 @@ bool ReactNativeFeatureFlagsAccessor::enableBridgelessArchitecture() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(5, "enableBridgelessArchitecture");
|
||||
markFlagAsAccessed(4, "enableBridgelessArchitecture");
|
||||
|
||||
flagValue = currentProvider_->enableBridgelessArchitecture();
|
||||
enableBridgelessArchitecture_ = flagValue;
|
||||
@@ -146,7 +128,7 @@ bool ReactNativeFeatureFlagsAccessor::enableCppPropsIteratorSetter() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(6, "enableCppPropsIteratorSetter");
|
||||
markFlagAsAccessed(5, "enableCppPropsIteratorSetter");
|
||||
|
||||
flagValue = currentProvider_->enableCppPropsIteratorSetter();
|
||||
enableCppPropsIteratorSetter_ = flagValue;
|
||||
@@ -164,7 +146,7 @@ bool ReactNativeFeatureFlagsAccessor::enableDeletionOfUnmountedViews() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(7, "enableDeletionOfUnmountedViews");
|
||||
markFlagAsAccessed(6, "enableDeletionOfUnmountedViews");
|
||||
|
||||
flagValue = currentProvider_->enableDeletionOfUnmountedViews();
|
||||
enableDeletionOfUnmountedViews_ = flagValue;
|
||||
@@ -182,7 +164,7 @@ bool ReactNativeFeatureFlagsAccessor::enableEagerRootViewAttachment() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(8, "enableEagerRootViewAttachment");
|
||||
markFlagAsAccessed(7, "enableEagerRootViewAttachment");
|
||||
|
||||
flagValue = currentProvider_->enableEagerRootViewAttachment();
|
||||
enableEagerRootViewAttachment_ = flagValue;
|
||||
@@ -200,7 +182,7 @@ bool ReactNativeFeatureFlagsAccessor::enableEventEmitterRetentionDuringGesturesO
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(9, "enableEventEmitterRetentionDuringGesturesOnAndroid");
|
||||
markFlagAsAccessed(8, "enableEventEmitterRetentionDuringGesturesOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableEventEmitterRetentionDuringGesturesOnAndroid();
|
||||
enableEventEmitterRetentionDuringGesturesOnAndroid_ = flagValue;
|
||||
@@ -218,7 +200,7 @@ bool ReactNativeFeatureFlagsAccessor::enableFabricLogs() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(10, "enableFabricLogs");
|
||||
markFlagAsAccessed(9, "enableFabricLogs");
|
||||
|
||||
flagValue = currentProvider_->enableFabricLogs();
|
||||
enableFabricLogs_ = flagValue;
|
||||
@@ -236,7 +218,7 @@ bool ReactNativeFeatureFlagsAccessor::enableFabricRenderer() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(11, "enableFabricRenderer");
|
||||
markFlagAsAccessed(10, "enableFabricRenderer");
|
||||
|
||||
flagValue = currentProvider_->enableFabricRenderer();
|
||||
enableFabricRenderer_ = flagValue;
|
||||
@@ -254,7 +236,7 @@ bool ReactNativeFeatureFlagsAccessor::enableFixForViewCommandRace() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(12, "enableFixForViewCommandRace");
|
||||
markFlagAsAccessed(11, "enableFixForViewCommandRace");
|
||||
|
||||
flagValue = currentProvider_->enableFixForViewCommandRace();
|
||||
enableFixForViewCommandRace_ = flagValue;
|
||||
@@ -272,7 +254,7 @@ bool ReactNativeFeatureFlagsAccessor::enableGranularShadowTreeStateReconciliatio
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(13, "enableGranularShadowTreeStateReconciliation");
|
||||
markFlagAsAccessed(12, "enableGranularShadowTreeStateReconciliation");
|
||||
|
||||
flagValue = currentProvider_->enableGranularShadowTreeStateReconciliation();
|
||||
enableGranularShadowTreeStateReconciliation_ = flagValue;
|
||||
@@ -290,7 +272,7 @@ bool ReactNativeFeatureFlagsAccessor::enableIOSViewClipToPaddingBox() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(14, "enableIOSViewClipToPaddingBox");
|
||||
markFlagAsAccessed(13, "enableIOSViewClipToPaddingBox");
|
||||
|
||||
flagValue = currentProvider_->enableIOSViewClipToPaddingBox();
|
||||
enableIOSViewClipToPaddingBox_ = flagValue;
|
||||
@@ -308,7 +290,7 @@ bool ReactNativeFeatureFlagsAccessor::enableImagePrefetchingAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(15, "enableImagePrefetchingAndroid");
|
||||
markFlagAsAccessed(14, "enableImagePrefetchingAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableImagePrefetchingAndroid();
|
||||
enableImagePrefetchingAndroid_ = flagValue;
|
||||
@@ -326,7 +308,7 @@ bool ReactNativeFeatureFlagsAccessor::enableJSRuntimeGCOnMemoryPressureOnIOS() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(16, "enableJSRuntimeGCOnMemoryPressureOnIOS");
|
||||
markFlagAsAccessed(15, "enableJSRuntimeGCOnMemoryPressureOnIOS");
|
||||
|
||||
flagValue = currentProvider_->enableJSRuntimeGCOnMemoryPressureOnIOS();
|
||||
enableJSRuntimeGCOnMemoryPressureOnIOS_ = flagValue;
|
||||
@@ -344,7 +326,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnAndroid() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(17, "enableLayoutAnimationsOnAndroid");
|
||||
markFlagAsAccessed(16, "enableLayoutAnimationsOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->enableLayoutAnimationsOnAndroid();
|
||||
enableLayoutAnimationsOnAndroid_ = flagValue;
|
||||
@@ -362,7 +344,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnIOS() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(18, "enableLayoutAnimationsOnIOS");
|
||||
markFlagAsAccessed(17, "enableLayoutAnimationsOnIOS");
|
||||
|
||||
flagValue = currentProvider_->enableLayoutAnimationsOnIOS();
|
||||
enableLayoutAnimationsOnIOS_ = flagValue;
|
||||
@@ -380,7 +362,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLongTaskAPI() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(19, "enableLongTaskAPI");
|
||||
markFlagAsAccessed(18, "enableLongTaskAPI");
|
||||
|
||||
flagValue = currentProvider_->enableLongTaskAPI();
|
||||
enableLongTaskAPI_ = flagValue;
|
||||
@@ -398,7 +380,7 @@ bool ReactNativeFeatureFlagsAccessor::enableNewBackgroundAndBorderDrawables() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(20, "enableNewBackgroundAndBorderDrawables");
|
||||
markFlagAsAccessed(19, "enableNewBackgroundAndBorderDrawables");
|
||||
|
||||
flagValue = currentProvider_->enableNewBackgroundAndBorderDrawables();
|
||||
enableNewBackgroundAndBorderDrawables_ = flagValue;
|
||||
@@ -416,7 +398,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(21, "enablePreciseSchedulingForPremountItemsOnAndroid");
|
||||
markFlagAsAccessed(20, "enablePreciseSchedulingForPremountItemsOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->enablePreciseSchedulingForPremountItemsOnAndroid();
|
||||
enablePreciseSchedulingForPremountItemsOnAndroid_ = flagValue;
|
||||
@@ -434,7 +416,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(22, "enablePropsUpdateReconciliationAndroid");
|
||||
markFlagAsAccessed(21, "enablePropsUpdateReconciliationAndroid");
|
||||
|
||||
flagValue = currentProvider_->enablePropsUpdateReconciliationAndroid();
|
||||
enablePropsUpdateReconciliationAndroid_ = flagValue;
|
||||
@@ -452,7 +434,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(23, "enableReportEventPaintTime");
|
||||
markFlagAsAccessed(22, "enableReportEventPaintTime");
|
||||
|
||||
flagValue = currentProvider_->enableReportEventPaintTime();
|
||||
enableReportEventPaintTime_ = flagValue;
|
||||
@@ -470,7 +452,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(24, "enableSynchronousStateUpdates");
|
||||
markFlagAsAccessed(23, "enableSynchronousStateUpdates");
|
||||
|
||||
flagValue = currentProvider_->enableSynchronousStateUpdates();
|
||||
enableSynchronousStateUpdates_ = 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::fixDifferentiatorEmittingUpdatesWithWrongP
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(28, "fixDifferentiatorEmittingUpdatesWithWrongParentTag");
|
||||
markFlagAsAccessed(27, "fixDifferentiatorEmittingUpdatesWithWrongParentTag");
|
||||
|
||||
flagValue = currentProvider_->fixDifferentiatorEmittingUpdatesWithWrongParentTag();
|
||||
fixDifferentiatorEmittingUpdatesWithWrongParentTag_ = 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::fuseboxEnabledRelease() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(31, "fuseboxEnabledRelease");
|
||||
markFlagAsAccessed(30, "fuseboxEnabledRelease");
|
||||
|
||||
flagValue = currentProvider_->fuseboxEnabledRelease();
|
||||
fuseboxEnabledRelease_ = flagValue;
|
||||
@@ -614,7 +596,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(32, "initEagerTurboModulesOnNativeModulesQueueAndroid");
|
||||
markFlagAsAccessed(31, "initEagerTurboModulesOnNativeModulesQueueAndroid");
|
||||
|
||||
flagValue = currentProvider_->initEagerTurboModulesOnNativeModulesQueueAndroid();
|
||||
initEagerTurboModulesOnNativeModulesQueueAndroid_ = flagValue;
|
||||
@@ -632,7 +614,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(33, "lazyAnimationCallbacks");
|
||||
markFlagAsAccessed(32, "lazyAnimationCallbacks");
|
||||
|
||||
flagValue = currentProvider_->lazyAnimationCallbacks();
|
||||
lazyAnimationCallbacks_ = flagValue;
|
||||
@@ -650,7 +632,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(34, "loadVectorDrawablesOnImages");
|
||||
markFlagAsAccessed(33, "loadVectorDrawablesOnImages");
|
||||
|
||||
flagValue = currentProvider_->loadVectorDrawablesOnImages();
|
||||
loadVectorDrawablesOnImages_ = flagValue;
|
||||
@@ -668,7 +650,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(35, "traceTurboModulePromiseRejectionsOnAndroid");
|
||||
markFlagAsAccessed(34, "traceTurboModulePromiseRejectionsOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid();
|
||||
traceTurboModulePromiseRejectionsOnAndroid_ = flagValue;
|
||||
@@ -686,7 +668,7 @@ bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(36, "useAlwaysAvailableJSErrorHandling");
|
||||
markFlagAsAccessed(35, "useAlwaysAvailableJSErrorHandling");
|
||||
|
||||
flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling();
|
||||
useAlwaysAvailableJSErrorHandling_ = flagValue;
|
||||
@@ -704,7 +686,7 @@ bool ReactNativeFeatureFlagsAccessor::useEditTextStockAndroidFocusBehavior() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(37, "useEditTextStockAndroidFocusBehavior");
|
||||
markFlagAsAccessed(36, "useEditTextStockAndroidFocusBehavior");
|
||||
|
||||
flagValue = currentProvider_->useEditTextStockAndroidFocusBehavior();
|
||||
useEditTextStockAndroidFocusBehavior_ = flagValue;
|
||||
@@ -722,7 +704,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(38, "useFabricInterop");
|
||||
markFlagAsAccessed(37, "useFabricInterop");
|
||||
|
||||
flagValue = currentProvider_->useFabricInterop();
|
||||
useFabricInterop_ = flagValue;
|
||||
@@ -740,7 +722,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(39, "useImmediateExecutorInAndroidBridgeless");
|
||||
markFlagAsAccessed(38, "useImmediateExecutorInAndroidBridgeless");
|
||||
|
||||
flagValue = currentProvider_->useImmediateExecutorInAndroidBridgeless();
|
||||
useImmediateExecutorInAndroidBridgeless_ = flagValue;
|
||||
@@ -758,7 +740,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(40, "useNativeViewConfigsInBridgelessMode");
|
||||
markFlagAsAccessed(39, "useNativeViewConfigsInBridgelessMode");
|
||||
|
||||
flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode();
|
||||
useNativeViewConfigsInBridgelessMode_ = flagValue;
|
||||
@@ -776,7 +758,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(41, "useOptimisedViewPreallocationOnAndroid");
|
||||
markFlagAsAccessed(40, "useOptimisedViewPreallocationOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->useOptimisedViewPreallocationOnAndroid();
|
||||
useOptimisedViewPreallocationOnAndroid_ = flagValue;
|
||||
@@ -794,7 +776,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(42, "useOptimizedEventBatchingOnAndroid");
|
||||
markFlagAsAccessed(41, "useOptimizedEventBatchingOnAndroid");
|
||||
|
||||
flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid();
|
||||
useOptimizedEventBatchingOnAndroid_ = flagValue;
|
||||
@@ -812,7 +794,7 @@ bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() {
|
||||
// be accessing the provider multiple times but the end state of this
|
||||
// instance and the returned flag value would be the same.
|
||||
|
||||
markFlagAsAccessed(43, "useRawPropsJsiValue");
|
||||
markFlagAsAccessed(42, "useRawPropsJsiValue");
|
||||
|
||||
flagValue = currentProvider_->useRawPropsJsiValue();
|
||||
useRawPropsJsiValue_ = flagValue;
|
||||
@@ -830,7 +812,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(44, "useRuntimeShadowNodeReferenceUpdate");
|
||||
markFlagAsAccessed(43, "useRuntimeShadowNodeReferenceUpdate");
|
||||
|
||||
flagValue = currentProvider_->useRuntimeShadowNodeReferenceUpdate();
|
||||
useRuntimeShadowNodeReferenceUpdate_ = flagValue;
|
||||
@@ -848,7 +830,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(45, "useTurboModuleInterop");
|
||||
markFlagAsAccessed(44, "useTurboModuleInterop");
|
||||
|
||||
flagValue = currentProvider_->useTurboModuleInterop();
|
||||
useTurboModuleInterop_ = flagValue;
|
||||
@@ -866,7 +848,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(46, "useTurboModules");
|
||||
markFlagAsAccessed(45, "useTurboModules");
|
||||
|
||||
flagValue = currentProvider_->useTurboModules();
|
||||
useTurboModules_ = flagValue;
|
||||
|
||||
+2
-4
@@ -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<<908876e2d8a415a3d90063eea7eace96>>
|
||||
* @generated SignedSource<<d552a019204fb845c71347e8b83b67ee>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -34,7 +34,6 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
|
||||
bool commonTestFlag();
|
||||
bool completeReactInstanceCreationOnBgThreadOnAndroid();
|
||||
bool disableEventLoopOnBridgeless();
|
||||
bool disableMountItemReorderingAndroid();
|
||||
bool enableAccumulatedUpdatesInRawPropsAndroid();
|
||||
bool enableBridgelessArchitecture();
|
||||
@@ -90,11 +89,10 @@ class ReactNativeFeatureFlagsAccessor {
|
||||
std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
|
||||
bool wasOverridden_;
|
||||
|
||||
std::array<std::atomic<const char*>, 47> accessedFeatureFlags_;
|
||||
std::array<std::atomic<const char*>, 46> accessedFeatureFlags_;
|
||||
|
||||
std::atomic<std::optional<bool>> commonTestFlag_;
|
||||
std::atomic<std::optional<bool>> completeReactInstanceCreationOnBgThreadOnAndroid_;
|
||||
std::atomic<std::optional<bool>> disableEventLoopOnBridgeless_;
|
||||
std::atomic<std::optional<bool>> disableMountItemReorderingAndroid_;
|
||||
std::atomic<std::optional<bool>> enableAccumulatedUpdatesInRawPropsAndroid_;
|
||||
std::atomic<std::optional<bool>> enableBridgelessArchitecture_;
|
||||
|
||||
+1
-5
@@ -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<<531c9238176bf572380c35d37a8f161a>>
|
||||
* @generated SignedSource<<a84fe2f37a8afbd6d2015a0d28f2c878>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -35,10 +35,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool disableEventLoopOnBridgeless() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool disableMountItemReorderingAndroid() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
+1
-10
@@ -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<<fdcf5bedda4926edbd612be30d6aa274>>
|
||||
* @generated SignedSource<<32058afdbd4cfbd28a1c21405ae3107d>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -63,15 +63,6 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
|
||||
return ReactNativeFeatureFlagsDefaults::completeReactInstanceCreationOnBgThreadOnAndroid();
|
||||
}
|
||||
|
||||
bool disableEventLoopOnBridgeless() override {
|
||||
auto value = values_["disableEventLoopOnBridgeless"];
|
||||
if (!value.isNull()) {
|
||||
return value.getBool();
|
||||
}
|
||||
|
||||
return ReactNativeFeatureFlagsDefaults::disableEventLoopOnBridgeless();
|
||||
}
|
||||
|
||||
bool disableMountItemReorderingAndroid() override {
|
||||
auto value = values_["disableMountItemReorderingAndroid"];
|
||||
if (!value.isNull()) {
|
||||
|
||||
+1
-2
@@ -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<<7f272dab47a698530807f5e98f5402eb>>
|
||||
* @generated SignedSource<<60ca2574926141333b48869428ae59e0>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -27,7 +27,6 @@ class ReactNativeFeatureFlagsProvider {
|
||||
|
||||
virtual bool commonTestFlag() = 0;
|
||||
virtual bool completeReactInstanceCreationOnBgThreadOnAndroid() = 0;
|
||||
virtual bool disableEventLoopOnBridgeless() = 0;
|
||||
virtual bool disableMountItemReorderingAndroid() = 0;
|
||||
virtual bool enableAccumulatedUpdatesInRawPropsAndroid() = 0;
|
||||
virtual bool enableBridgelessArchitecture() = 0;
|
||||
|
||||
+1
-6
@@ -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<<aebf023659b590d4af8f7adb17844332>>
|
||||
* @generated SignedSource<<9e4ac7a270dd74f6978374d8e2c05013>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -54,11 +54,6 @@ bool NativeReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAnd
|
||||
return ReactNativeFeatureFlags::completeReactInstanceCreationOnBgThreadOnAndroid();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::disableEventLoopOnBridgeless(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::disableEventLoopOnBridgeless();
|
||||
}
|
||||
|
||||
bool NativeReactNativeFeatureFlags::disableMountItemReorderingAndroid(
|
||||
jsi::Runtime& /*runtime*/) {
|
||||
return ReactNativeFeatureFlags::disableMountItemReorderingAndroid();
|
||||
|
||||
+1
-3
@@ -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<<3aadd0d890f3dac9fee5bc465d759203>>
|
||||
* @generated SignedSource<<c11c50b272b571325ee3947ec53f0050>>
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -41,8 +41,6 @@ class NativeReactNativeFeatureFlags
|
||||
|
||||
bool completeReactInstanceCreationOnBgThreadOnAndroid(jsi::Runtime& runtime);
|
||||
|
||||
bool disableEventLoopOnBridgeless(jsi::Runtime& runtime);
|
||||
|
||||
bool disableMountItemReorderingAndroid(jsi::Runtime& runtime);
|
||||
|
||||
bool enableAccumulatedUpdatesInRawPropsAndroid(jsi::Runtime& runtime);
|
||||
|
||||
+1
-2
@@ -142,8 +142,7 @@ void NativeMutationObserver::notifyMutationObserversIfNecessary() {
|
||||
|
||||
if (dispatchNotification) {
|
||||
TraceSection s("NativeMutationObserver::notifyObservers");
|
||||
if (ReactNativeFeatureFlags::enableBridgelessArchitecture() &&
|
||||
!ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) {
|
||||
if (ReactNativeFeatureFlags::enableBridgelessArchitecture()) {
|
||||
runtime_->queueMicrotask(notifyMutationObservers_.value());
|
||||
} else {
|
||||
jsInvoker_->invokeAsync([&](jsi::Runtime& runtime) {
|
||||
|
||||
+1
-2
@@ -24,8 +24,7 @@ std::unique_ptr<RuntimeSchedulerBase> getRuntimeSchedulerImplementation(
|
||||
RuntimeExecutor runtimeExecutor,
|
||||
std::function<RuntimeSchedulerTimePoint()> now,
|
||||
RuntimeSchedulerTaskErrorHandler onTaskError) {
|
||||
if (ReactNativeFeatureFlags::enableBridgelessArchitecture() &&
|
||||
!ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) {
|
||||
if (ReactNativeFeatureFlags::enableBridgelessArchitecture()) {
|
||||
return std::make_unique<RuntimeScheduler_Modern>(
|
||||
std::move(runtimeExecutor), std::move(now), std::move(onTaskError));
|
||||
} else {
|
||||
|
||||
@@ -81,14 +81,6 @@ ReactInstance::ReactInstance(
|
||||
try {
|
||||
ShadowNode::setUseRuntimeShadowNodeReferenceUpdateOnThread(true);
|
||||
callback(jsiRuntime);
|
||||
|
||||
// If we have first-class support for microtasks,
|
||||
// they would've been called as part of the previous callback.
|
||||
if (ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) {
|
||||
if (auto timerManager = weakTimerManager.lock()) {
|
||||
timerManager->callReactNativeMicrotasks(jsiRuntime);
|
||||
}
|
||||
}
|
||||
} catch (jsi::JSError& originalError) {
|
||||
jsErrorHandler->handleError(jsiRuntime, originalError, true);
|
||||
} catch (std::exception& ex) {
|
||||
|
||||
@@ -223,64 +223,6 @@ void TimerManager::callTimer(TimerHandle timerHandle) {
|
||||
void TimerManager::attachGlobals(jsi::Runtime& runtime) {
|
||||
// Install host functions for timers.
|
||||
// TODO (T45786383): Add missing timer functions from JSTimers
|
||||
|
||||
// Ensure that we don't define `setImmediate` and `clearImmediate` if
|
||||
// microtasks are enabled (as we polyfill them using `queueMicrotask` then).
|
||||
if (ReactNativeFeatureFlags::disableEventLoopOnBridgeless()) {
|
||||
runtime.global().setProperty(
|
||||
runtime,
|
||||
"setImmediate",
|
||||
jsi::Function::createFromHostFunction(
|
||||
runtime,
|
||||
jsi::PropNameID::forAscii(runtime, "setImmediate"),
|
||||
2, // Function, ...args
|
||||
[this](
|
||||
jsi::Runtime& rt,
|
||||
const jsi::Value& thisVal,
|
||||
const jsi::Value* args,
|
||||
size_t count) {
|
||||
if (count == 0) {
|
||||
throw jsi::JSError(
|
||||
rt,
|
||||
"setImmediate must be called with at least one argument (a function to call)");
|
||||
}
|
||||
|
||||
if (!args[0].isObject() || !args[0].asObject(rt).isFunction(rt)) {
|
||||
// Do not throw any error to match web spec
|
||||
return timerIndex_++;
|
||||
}
|
||||
auto callback = args[0].getObject(rt).getFunction(rt);
|
||||
|
||||
// Package up the remaining argument values into one place.
|
||||
std::vector<jsi::Value> moreArgs;
|
||||
for (size_t extraArgNum = 1; extraArgNum < count; extraArgNum++) {
|
||||
moreArgs.emplace_back(rt, args[extraArgNum]);
|
||||
}
|
||||
|
||||
return createReactNativeMicrotask(
|
||||
std::move(callback), std::move(moreArgs));
|
||||
}));
|
||||
|
||||
runtime.global().setProperty(
|
||||
runtime,
|
||||
"clearImmediate",
|
||||
jsi::Function::createFromHostFunction(
|
||||
runtime,
|
||||
jsi::PropNameID::forAscii(runtime, "clearImmediate"),
|
||||
1, // handle
|
||||
[this](
|
||||
jsi::Runtime& rt,
|
||||
const jsi::Value& thisVal,
|
||||
const jsi::Value* args,
|
||||
size_t count) {
|
||||
if (count > 0 && args[0].isNumber()) {
|
||||
auto handle = (TimerHandle)args[0].asNumber();
|
||||
deleteReactNativeMicrotask(rt, handle);
|
||||
}
|
||||
return jsi::Value::undefined();
|
||||
}));
|
||||
}
|
||||
|
||||
runtime.global().setProperty(
|
||||
runtime,
|
||||
"setTimeout",
|
||||
|
||||
@@ -143,8 +143,7 @@ std::unique_ptr<JSRuntime> HermesInstance::createJSRuntime(
|
||||
.withGCConfig(gcConfig.build())
|
||||
.withEnableSampleProfiling(true)
|
||||
.withMicrotaskQueue(
|
||||
ReactNativeFeatureFlags::enableBridgelessArchitecture() &&
|
||||
!ReactNativeFeatureFlags::disableEventLoopOnBridgeless());
|
||||
ReactNativeFeatureFlags::enableBridgelessArchitecture());
|
||||
|
||||
if (crashManager) {
|
||||
runtimeConfigBuilder.withCrashMgr(crashManager);
|
||||
|
||||
@@ -66,15 +66,6 @@ const definitions: FeatureFlagDefinitions = {
|
||||
purpose: 'release',
|
||||
},
|
||||
},
|
||||
disableEventLoopOnBridgeless: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
description:
|
||||
'The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances.',
|
||||
expectedReleaseValue: true,
|
||||
purpose: 'release',
|
||||
},
|
||||
},
|
||||
disableMountItemReorderingAndroid: {
|
||||
defaultValue: false,
|
||||
metadata: {
|
||||
|
||||
@@ -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<<e710f456c7fa57f98e46cbc467755503>>
|
||||
* @generated SignedSource<<e1f16c89435be5abedd0a060ef036d95>>
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
@@ -52,7 +52,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
|
||||
commonTestFlag: Getter<boolean>,
|
||||
commonTestFlagWithoutNativeImplementation: Getter<boolean>,
|
||||
completeReactInstanceCreationOnBgThreadOnAndroid: Getter<boolean>,
|
||||
disableEventLoopOnBridgeless: Getter<boolean>,
|
||||
disableMountItemReorderingAndroid: Getter<boolean>,
|
||||
enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean>,
|
||||
enableBridgelessArchitecture: Getter<boolean>,
|
||||
@@ -191,10 +190,6 @@ export const commonTestFlagWithoutNativeImplementation: Getter<boolean> = create
|
||||
* 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<boolean> = createNativeFlagGetter('completeReactInstanceCreationOnBgThreadOnAndroid', true);
|
||||
/**
|
||||
* 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<boolean> = createNativeFlagGetter('disableEventLoopOnBridgeless', false);
|
||||
/**
|
||||
* Prevent FabricMountingManager from reordering mountitems, which may lead to invalid state on the UI thread
|
||||
*/
|
||||
|
||||
+1
-2
@@ -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<<2dbeae49bc79bdbbf06c54273b2e2b9b>>
|
||||
* @generated SignedSource<<bcb501bc8f71f02c82a58b898e73d9a0>>
|
||||
* @flow strict
|
||||
*/
|
||||
|
||||
@@ -26,7 +26,6 @@ export interface Spec extends TurboModule {
|
||||
+commonTestFlag?: () => boolean;
|
||||
+commonTestFlagWithoutNativeImplementation?: () => boolean;
|
||||
+completeReactInstanceCreationOnBgThreadOnAndroid?: () => boolean;
|
||||
+disableEventLoopOnBridgeless?: () => boolean;
|
||||
+disableMountItemReorderingAndroid?: () => boolean;
|
||||
+enableAccumulatedUpdatesInRawPropsAndroid?: () => boolean;
|
||||
+enableBridgelessArchitecture?: () => boolean;
|
||||
|
||||
Reference in New Issue
Block a user