Files
react-native/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h
T
Thomas NardoneandFacebook GitHub Bot ca5ce205f7 Add separate flags for recycling View, Text components (#49211)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/49211

Add more control over view recycling behavior by splitting out each component that currently supports it.

Changelog:[Android][Added] Feature flags for recycling View, Text components separately

Reviewed By: sammy-SC, mdvacca

Differential Revision: D69190841

fbshipit-source-id: 6d85fee7103bf928e4f5bf6946bab3ff4cae4053
2025-02-05 18:36:06 -08:00

437 lines
12 KiB
C++

/*
* 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<<f11fb76af1081648c884174db67efa74>>
*/
/**
* 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
*/
#pragma once
#include <folly/dynamic.h>
#include <react/featureflags/ReactNativeFeatureFlagsDefaults.h>
namespace facebook::react {
/**
* This class is a ReactNativeFeatureFlags provider that takes the values for
* feature flags from a folly::dynamic object (e.g. from a JSON object), if
* they are defined. For the flags not defined in the object, it falls back to
* the default values defined in ReactNativeFeatureFlagsDefaults.
*
* The API is strict about typing. It ignores null values from the
* folly::dynamic object, but if the key is defined, the value must have the
* correct type or otherwise throws an exception.
*/
class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDefaults {
private:
folly::dynamic values_;
public:
ReactNativeFeatureFlagsDynamicProvider(folly::dynamic values): values_(std::move(values)) {
if (!values_.isObject()) {
throw std::invalid_argument("ReactNativeFeatureFlagsDynamicProvider: values must be an object");
}
}
bool commonTestFlag() override {
auto value = values_["commonTestFlag"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::commonTestFlag();
}
bool disableMountItemReorderingAndroid() override {
auto value = values_["disableMountItemReorderingAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::disableMountItemReorderingAndroid();
}
bool enableAccumulatedUpdatesInRawPropsAndroid() override {
auto value = values_["enableAccumulatedUpdatesInRawPropsAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableAccumulatedUpdatesInRawPropsAndroid();
}
bool enableBridgelessArchitecture() override {
auto value = values_["enableBridgelessArchitecture"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableBridgelessArchitecture();
}
bool enableCppPropsIteratorSetter() override {
auto value = values_["enableCppPropsIteratorSetter"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableCppPropsIteratorSetter();
}
bool enableEagerRootViewAttachment() override {
auto value = values_["enableEagerRootViewAttachment"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableEagerRootViewAttachment();
}
bool enableEventEmitterRetentionDuringGesturesOnAndroid() override {
auto value = values_["enableEventEmitterRetentionDuringGesturesOnAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableEventEmitterRetentionDuringGesturesOnAndroid();
}
bool enableFabricLogs() override {
auto value = values_["enableFabricLogs"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableFabricLogs();
}
bool enableFabricRenderer() override {
auto value = values_["enableFabricRenderer"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableFabricRenderer();
}
bool enableFixForViewCommandRace() override {
auto value = values_["enableFixForViewCommandRace"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableFixForViewCommandRace();
}
bool enableGranularShadowTreeStateReconciliation() override {
auto value = values_["enableGranularShadowTreeStateReconciliation"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableGranularShadowTreeStateReconciliation();
}
bool enableIOSViewClipToPaddingBox() override {
auto value = values_["enableIOSViewClipToPaddingBox"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableIOSViewClipToPaddingBox();
}
bool enableImagePrefetchingAndroid() override {
auto value = values_["enableImagePrefetchingAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableImagePrefetchingAndroid();
}
bool enableJSRuntimeGCOnMemoryPressureOnIOS() override {
auto value = values_["enableJSRuntimeGCOnMemoryPressureOnIOS"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableJSRuntimeGCOnMemoryPressureOnIOS();
}
bool enableLayoutAnimationsOnAndroid() override {
auto value = values_["enableLayoutAnimationsOnAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableLayoutAnimationsOnAndroid();
}
bool enableLayoutAnimationsOnIOS() override {
auto value = values_["enableLayoutAnimationsOnIOS"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableLayoutAnimationsOnIOS();
}
bool enableLongTaskAPI() override {
auto value = values_["enableLongTaskAPI"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableLongTaskAPI();
}
bool enableNewBackgroundAndBorderDrawables() override {
auto value = values_["enableNewBackgroundAndBorderDrawables"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableNewBackgroundAndBorderDrawables();
}
bool enablePreciseSchedulingForPremountItemsOnAndroid() override {
auto value = values_["enablePreciseSchedulingForPremountItemsOnAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enablePreciseSchedulingForPremountItemsOnAndroid();
}
bool enablePropsUpdateReconciliationAndroid() override {
auto value = values_["enablePropsUpdateReconciliationAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enablePropsUpdateReconciliationAndroid();
}
bool enableReportEventPaintTime() override {
auto value = values_["enableReportEventPaintTime"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableReportEventPaintTime();
}
bool enableSynchronousStateUpdates() override {
auto value = values_["enableSynchronousStateUpdates"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableSynchronousStateUpdates();
}
bool enableUIConsistency() override {
auto value = values_["enableUIConsistency"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableUIConsistency();
}
bool enableViewRecycling() override {
auto value = values_["enableViewRecycling"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableViewRecycling();
}
bool enableViewRecyclingForText() override {
auto value = values_["enableViewRecyclingForText"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableViewRecyclingForText();
}
bool enableViewRecyclingForView() override {
auto value = values_["enableViewRecyclingForView"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::enableViewRecyclingForView();
}
bool excludeYogaFromRawProps() override {
auto value = values_["excludeYogaFromRawProps"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::excludeYogaFromRawProps();
}
bool fixDifferentiatorEmittingUpdatesWithWrongParentTag() override {
auto value = values_["fixDifferentiatorEmittingUpdatesWithWrongParentTag"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::fixDifferentiatorEmittingUpdatesWithWrongParentTag();
}
bool fixMappingOfEventPrioritiesBetweenFabricAndReact() override {
auto value = values_["fixMappingOfEventPrioritiesBetweenFabricAndReact"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::fixMappingOfEventPrioritiesBetweenFabricAndReact();
}
bool fixMountingCoordinatorReportedPendingTransactionsOnAndroid() override {
auto value = values_["fixMountingCoordinatorReportedPendingTransactionsOnAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::fixMountingCoordinatorReportedPendingTransactionsOnAndroid();
}
bool fuseboxEnabledRelease() override {
auto value = values_["fuseboxEnabledRelease"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::fuseboxEnabledRelease();
}
bool fuseboxNetworkInspectionEnabled() override {
auto value = values_["fuseboxNetworkInspectionEnabled"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::fuseboxNetworkInspectionEnabled();
}
bool lazyAnimationCallbacks() override {
auto value = values_["lazyAnimationCallbacks"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::lazyAnimationCallbacks();
}
bool traceTurboModulePromiseRejectionsOnAndroid() override {
auto value = values_["traceTurboModulePromiseRejectionsOnAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::traceTurboModulePromiseRejectionsOnAndroid();
}
bool useAlwaysAvailableJSErrorHandling() override {
auto value = values_["useAlwaysAvailableJSErrorHandling"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useAlwaysAvailableJSErrorHandling();
}
bool useEditTextStockAndroidFocusBehavior() override {
auto value = values_["useEditTextStockAndroidFocusBehavior"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useEditTextStockAndroidFocusBehavior();
}
bool useFabricInterop() override {
auto value = values_["useFabricInterop"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useFabricInterop();
}
bool useNativeViewConfigsInBridgelessMode() override {
auto value = values_["useNativeViewConfigsInBridgelessMode"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useNativeViewConfigsInBridgelessMode();
}
bool useOptimizedEventBatchingOnAndroid() override {
auto value = values_["useOptimizedEventBatchingOnAndroid"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useOptimizedEventBatchingOnAndroid();
}
bool useRawPropsJsiValue() override {
auto value = values_["useRawPropsJsiValue"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useRawPropsJsiValue();
}
bool useRuntimeShadowNodeReferenceUpdate() override {
auto value = values_["useRuntimeShadowNodeReferenceUpdate"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useRuntimeShadowNodeReferenceUpdate();
}
bool useTurboModuleInterop() override {
auto value = values_["useTurboModuleInterop"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useTurboModuleInterop();
}
bool useTurboModules() override {
auto value = values_["useTurboModules"];
if (!value.isNull()) {
return value.getBool();
}
return ReactNativeFeatureFlagsDefaults::useTurboModules();
}
};
} // namespace facebook::react