BLUE
PHP 7.4.33
Path:
/var/www/uibuilder.cmshelp.dk/httpdocs/node_modules/react-native/ReactCommon/react/featureflags
Run
Logout
Edit File
Size: 31.47 KB
Close
/var/www/uibuilder.cmshelp.dk/httpdocs/node_modules/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp
Text
Base64
/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @generated SignedSource<<a360603ae99888aa172cc1b85d3893e4>> */ /** * IMPORTANT: Do NOT modify this file directly. * * To change the definition of the flags, edit * packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js. * * To regenerate this code, run the following script from the repo root: * yarn featureflags --update */ #include <react/featureflags/ReactNativeFeatureFlagsDefaults.h> #include <sstream> #include <stdexcept> #include <string> #include "ReactNativeFeatureFlags.h" namespace facebook::react { ReactNativeFeatureFlagsAccessor::ReactNativeFeatureFlagsAccessor() : currentProvider_(std::make_unique<ReactNativeFeatureFlagsDefaults>()), wasOverridden_(false) {} bool ReactNativeFeatureFlagsAccessor::commonTestFlag() { auto flagValue = commonTestFlag_.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(0, "commonTestFlag"); flagValue = currentProvider_->commonTestFlag(); commonTestFlag_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::completeReactInstanceCreationOnBgThreadOnAndroid() { auto flagValue = completeReactInstanceCreationOnBgThreadOnAndroid_.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(1, "completeReactInstanceCreationOnBgThreadOnAndroid"); flagValue = currentProvider_->completeReactInstanceCreationOnBgThreadOnAndroid(); completeReactInstanceCreationOnBgThreadOnAndroid_ = flagValue; } 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(); 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(3, "disableMountItemReorderingAndroid"); flagValue = currentProvider_->disableMountItemReorderingAndroid(); disableMountItemReorderingAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableAccumulatedUpdatesInRawPropsAndroid() { auto flagValue = enableAccumulatedUpdatesInRawPropsAndroid_.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(4, "enableAccumulatedUpdatesInRawPropsAndroid"); flagValue = currentProvider_->enableAccumulatedUpdatesInRawPropsAndroid(); enableAccumulatedUpdatesInRawPropsAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableBridgelessArchitecture() { auto flagValue = enableBridgelessArchitecture_.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(5, "enableBridgelessArchitecture"); flagValue = currentProvider_->enableBridgelessArchitecture(); enableBridgelessArchitecture_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableCppPropsIteratorSetter() { auto flagValue = enableCppPropsIteratorSetter_.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(6, "enableCppPropsIteratorSetter"); flagValue = currentProvider_->enableCppPropsIteratorSetter(); enableCppPropsIteratorSetter_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableDeletionOfUnmountedViews() { auto flagValue = enableDeletionOfUnmountedViews_.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(7, "enableDeletionOfUnmountedViews"); flagValue = currentProvider_->enableDeletionOfUnmountedViews(); enableDeletionOfUnmountedViews_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableEagerRootViewAttachment() { auto flagValue = enableEagerRootViewAttachment_.load(); if (!flagValue.has_value()) { // This block is not exclusive but it is not necessary. // If multiple threads try to initialize the feature flag, we would only // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. markFlagAsAccessed(8, "enableEagerRootViewAttachment"); flagValue = currentProvider_->enableEagerRootViewAttachment(); enableEagerRootViewAttachment_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableEventEmitterRetentionDuringGesturesOnAndroid() { auto flagValue = enableEventEmitterRetentionDuringGesturesOnAndroid_.load(); if (!flagValue.has_value()) { // This block is not exclusive but it is not necessary. // If multiple threads try to initialize the feature flag, we would only // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. markFlagAsAccessed(9, "enableEventEmitterRetentionDuringGesturesOnAndroid"); flagValue = currentProvider_->enableEventEmitterRetentionDuringGesturesOnAndroid(); enableEventEmitterRetentionDuringGesturesOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableFabricLogs() { auto flagValue = enableFabricLogs_.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(10, "enableFabricLogs"); flagValue = currentProvider_->enableFabricLogs(); enableFabricLogs_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableFabricRenderer() { auto flagValue = enableFabricRenderer_.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(11, "enableFabricRenderer"); flagValue = currentProvider_->enableFabricRenderer(); enableFabricRenderer_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableFixForViewCommandRace() { auto flagValue = enableFixForViewCommandRace_.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(12, "enableFixForViewCommandRace"); flagValue = currentProvider_->enableFixForViewCommandRace(); enableFixForViewCommandRace_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableGranularShadowTreeStateReconciliation() { auto flagValue = enableGranularShadowTreeStateReconciliation_.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(13, "enableGranularShadowTreeStateReconciliation"); flagValue = currentProvider_->enableGranularShadowTreeStateReconciliation(); enableGranularShadowTreeStateReconciliation_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableIOSViewClipToPaddingBox() { auto flagValue = enableIOSViewClipToPaddingBox_.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(14, "enableIOSViewClipToPaddingBox"); flagValue = currentProvider_->enableIOSViewClipToPaddingBox(); enableIOSViewClipToPaddingBox_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableImagePrefetchingAndroid() { auto flagValue = enableImagePrefetchingAndroid_.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(15, "enableImagePrefetchingAndroid"); flagValue = currentProvider_->enableImagePrefetchingAndroid(); enableImagePrefetchingAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnAndroid() { auto flagValue = enableLayoutAnimationsOnAndroid_.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(16, "enableLayoutAnimationsOnAndroid"); flagValue = currentProvider_->enableLayoutAnimationsOnAndroid(); enableLayoutAnimationsOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnIOS() { auto flagValue = enableLayoutAnimationsOnIOS_.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(17, "enableLayoutAnimationsOnIOS"); flagValue = currentProvider_->enableLayoutAnimationsOnIOS(); enableLayoutAnimationsOnIOS_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableLongTaskAPI() { auto flagValue = enableLongTaskAPI_.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(18, "enableLongTaskAPI"); flagValue = currentProvider_->enableLongTaskAPI(); enableLongTaskAPI_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableNewBackgroundAndBorderDrawables() { auto flagValue = enableNewBackgroundAndBorderDrawables_.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, "enableNewBackgroundAndBorderDrawables"); flagValue = currentProvider_->enableNewBackgroundAndBorderDrawables(); enableNewBackgroundAndBorderDrawables_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enablePreciseSchedulingForPremountItemsOnAndroid() { auto flagValue = enablePreciseSchedulingForPremountItemsOnAndroid_.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(20, "enablePreciseSchedulingForPremountItemsOnAndroid"); flagValue = currentProvider_->enablePreciseSchedulingForPremountItemsOnAndroid(); enablePreciseSchedulingForPremountItemsOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enablePropsUpdateReconciliationAndroid() { auto flagValue = enablePropsUpdateReconciliationAndroid_.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(21, "enablePropsUpdateReconciliationAndroid"); flagValue = currentProvider_->enablePropsUpdateReconciliationAndroid(); enablePropsUpdateReconciliationAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableReportEventPaintTime() { auto flagValue = enableReportEventPaintTime_.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(22, "enableReportEventPaintTime"); flagValue = currentProvider_->enableReportEventPaintTime(); enableReportEventPaintTime_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableSynchronousStateUpdates() { auto flagValue = enableSynchronousStateUpdates_.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(23, "enableSynchronousStateUpdates"); flagValue = currentProvider_->enableSynchronousStateUpdates(); enableSynchronousStateUpdates_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableUIConsistency() { auto flagValue = enableUIConsistency_.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(24, "enableUIConsistency"); flagValue = currentProvider_->enableUIConsistency(); enableUIConsistency_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::enableViewRecycling() { auto flagValue = enableViewRecycling_.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(25, "enableViewRecycling"); flagValue = currentProvider_->enableViewRecycling(); enableViewRecycling_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::excludeYogaFromRawProps() { auto flagValue = excludeYogaFromRawProps_.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(26, "excludeYogaFromRawProps"); flagValue = currentProvider_->excludeYogaFromRawProps(); excludeYogaFromRawProps_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::fixDifferentiatorEmittingUpdatesWithWrongParentTag() { auto flagValue = fixDifferentiatorEmittingUpdatesWithWrongParentTag_.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(27, "fixDifferentiatorEmittingUpdatesWithWrongParentTag"); flagValue = currentProvider_->fixDifferentiatorEmittingUpdatesWithWrongParentTag(); fixDifferentiatorEmittingUpdatesWithWrongParentTag_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::fixMappingOfEventPrioritiesBetweenFabricAndReact() { auto flagValue = fixMappingOfEventPrioritiesBetweenFabricAndReact_.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(28, "fixMappingOfEventPrioritiesBetweenFabricAndReact"); flagValue = currentProvider_->fixMappingOfEventPrioritiesBetweenFabricAndReact(); fixMappingOfEventPrioritiesBetweenFabricAndReact_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::fixMountingCoordinatorReportedPendingTransactionsOnAndroid() { auto flagValue = fixMountingCoordinatorReportedPendingTransactionsOnAndroid_.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(29, "fixMountingCoordinatorReportedPendingTransactionsOnAndroid"); flagValue = currentProvider_->fixMountingCoordinatorReportedPendingTransactionsOnAndroid(); fixMountingCoordinatorReportedPendingTransactionsOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledRelease() { auto flagValue = fuseboxEnabledRelease_.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(30, "fuseboxEnabledRelease"); flagValue = currentProvider_->fuseboxEnabledRelease(); fuseboxEnabledRelease_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::initEagerTurboModulesOnNativeModulesQueueAndroid() { auto flagValue = initEagerTurboModulesOnNativeModulesQueueAndroid_.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(31, "initEagerTurboModulesOnNativeModulesQueueAndroid"); flagValue = currentProvider_->initEagerTurboModulesOnNativeModulesQueueAndroid(); initEagerTurboModulesOnNativeModulesQueueAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::lazyAnimationCallbacks() { auto flagValue = lazyAnimationCallbacks_.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(32, "lazyAnimationCallbacks"); flagValue = currentProvider_->lazyAnimationCallbacks(); lazyAnimationCallbacks_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::loadVectorDrawablesOnImages() { auto flagValue = loadVectorDrawablesOnImages_.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(33, "loadVectorDrawablesOnImages"); flagValue = currentProvider_->loadVectorDrawablesOnImages(); loadVectorDrawablesOnImages_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid() { auto flagValue = traceTurboModulePromiseRejectionsOnAndroid_.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(34, "traceTurboModulePromiseRejectionsOnAndroid"); flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid(); traceTurboModulePromiseRejectionsOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() { auto flagValue = useAlwaysAvailableJSErrorHandling_.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(35, "useAlwaysAvailableJSErrorHandling"); flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling(); useAlwaysAvailableJSErrorHandling_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useFabricInterop() { auto flagValue = useFabricInterop_.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(36, "useFabricInterop"); flagValue = currentProvider_->useFabricInterop(); useFabricInterop_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useImmediateExecutorInAndroidBridgeless() { auto flagValue = useImmediateExecutorInAndroidBridgeless_.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(37, "useImmediateExecutorInAndroidBridgeless"); flagValue = currentProvider_->useImmediateExecutorInAndroidBridgeless(); useImmediateExecutorInAndroidBridgeless_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { auto flagValue = useNativeViewConfigsInBridgelessMode_.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(38, "useNativeViewConfigsInBridgelessMode"); flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode(); useNativeViewConfigsInBridgelessMode_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useOptimisedViewPreallocationOnAndroid() { auto flagValue = useOptimisedViewPreallocationOnAndroid_.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(39, "useOptimisedViewPreallocationOnAndroid"); flagValue = currentProvider_->useOptimisedViewPreallocationOnAndroid(); useOptimisedViewPreallocationOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() { auto flagValue = useOptimizedEventBatchingOnAndroid_.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(40, "useOptimizedEventBatchingOnAndroid"); flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid(); useOptimizedEventBatchingOnAndroid_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() { auto flagValue = useRawPropsJsiValue_.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(41, "useRawPropsJsiValue"); flagValue = currentProvider_->useRawPropsJsiValue(); useRawPropsJsiValue_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useRuntimeShadowNodeReferenceUpdate() { auto flagValue = useRuntimeShadowNodeReferenceUpdate_.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, "useRuntimeShadowNodeReferenceUpdate"); flagValue = currentProvider_->useRuntimeShadowNodeReferenceUpdate(); useRuntimeShadowNodeReferenceUpdate_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() { auto flagValue = useTurboModuleInterop_.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(43, "useTurboModuleInterop"); flagValue = currentProvider_->useTurboModuleInterop(); useTurboModuleInterop_ = flagValue; } return flagValue.value(); } bool ReactNativeFeatureFlagsAccessor::useTurboModules() { auto flagValue = useTurboModules_.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(44, "useTurboModules"); flagValue = currentProvider_->useTurboModules(); useTurboModules_ = flagValue; } return flagValue.value(); } void ReactNativeFeatureFlagsAccessor::override( std::unique_ptr<ReactNativeFeatureFlagsProvider> provider) { if (wasOverridden_) { throw std::runtime_error( "Feature flags cannot be overridden more than once"); } ensureFlagsNotAccessed(); wasOverridden_ = true; currentProvider_ = std::move(provider); } std::optional<std::string> ReactNativeFeatureFlagsAccessor::getAccessedFeatureFlagNames() const { std::ostringstream featureFlagListBuilder; for (const auto& featureFlagName : accessedFeatureFlags_) { if (featureFlagName != nullptr) { featureFlagListBuilder << featureFlagName << ", "; } } std::string accessedFeatureFlagNames = featureFlagListBuilder.str(); if (!accessedFeatureFlagNames.empty()) { accessedFeatureFlagNames = accessedFeatureFlagNames.substr(0, accessedFeatureFlagNames.size() - 2); } return accessedFeatureFlagNames.empty() ? std::nullopt : std::optional{accessedFeatureFlagNames}; } void ReactNativeFeatureFlagsAccessor::markFlagAsAccessed( int position, const char* flagName) { accessedFeatureFlags_[position] = flagName; } void ReactNativeFeatureFlagsAccessor::ensureFlagsNotAccessed() { auto accessedFeatureFlagNames = getAccessedFeatureFlagNames(); if (accessedFeatureFlagNames.has_value()) { throw std::runtime_error( "Feature flags were accessed before being overridden: " + accessedFeatureFlagNames.value()); } } } // namespace facebook::react
Save
Close
Exit & Reset
Text mode: syntax highlighting auto-detects file type.
Directory Contents
Dirs: 1 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
tests
DIR
-
drwxr-xr-x
2025-03-28 11:04:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
CMakeLists.txt
657 B
lrw-r--r--
2025-03-28 11:04:43
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
React-featureflags.podspec
1.92 KB
lrw-r--r--
2025-03-28 11:04:43
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlags.cpp
7.32 KB
lrw-r--r--
2025-03-28 11:04:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlags.h
11.19 KB
lrw-r--r--
2025-03-28 11:04:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlagsAccessor.cpp
31.47 KB
lrw-r--r--
2025-03-28 11:04:39
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlagsAccessor.h
6.16 KB
lrw-r--r--
2025-03-28 11:04:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlagsDefaults.h
4.12 KB
lrw-r--r--
2025-03-28 11:04:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlagsDynamicProvider.h
13.07 KB
lrw-r--r--
2025-03-28 11:04:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ReactNativeFeatureFlagsProvider.h
3.11 KB
lrw-r--r--
2025-03-28 11:04:41
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).