Clean up feature flag to use lazy public instances in Fabric (#33943)

## Summary

We have thoroughly tested this flag in production and proved stability
and performance, so we can clean it up and "ship it".
This commit is contained in:
Rubén Norte 2025-07-21 10:27:46 +01:00 committed by GitHub
parent 28d4bc496b
commit e9638c33d7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 31 additions and 46 deletions

View File

@ -66,10 +66,7 @@ import {
getInspectorDataForInstance,
} from './ReactNativeFiberInspector';
import {
passChildrenWhenCloningPersistedNodes,
enableLazyPublicInstanceInFabric,
} from 'shared/ReactFeatureFlags';
import {passChildrenWhenCloningPersistedNodes} from 'shared/ReactFeatureFlags';
import {REACT_CONTEXT_TYPE} from 'shared/ReactSymbols';
import type {ReactContext} from 'shared/ReactTypes';
@ -204,37 +201,17 @@ export function createInstance(
internalInstanceHandle, // internalInstanceHandle
);
if (enableLazyPublicInstanceInFabric) {
return {
node: node,
canonical: {
nativeTag: tag,
viewConfig,
currentProps: props,
internalInstanceHandle,
publicInstance: null,
publicRootInstance: rootContainerInstance.publicInstance,
},
};
} else {
const component = createPublicInstance(
tag,
return {
node: node,
canonical: {
nativeTag: tag,
viewConfig,
currentProps: props,
internalInstanceHandle,
rootContainerInstance.publicInstance,
);
return {
node: node,
canonical: {
nativeTag: tag,
viewConfig,
currentProps: props,
internalInstanceHandle,
publicInstance: component,
},
};
}
publicInstance: null,
publicRootInstance: rootContainerInstance.publicInstance,
},
};
}
export function createTextInstance(

View File

@ -15,6 +15,7 @@ import {
ReactNativeViewConfigRegistry,
UIManager,
deepFreezeAndThrowOnMutationInDev,
createPublicInstance,
type PublicRootInstance,
} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';
@ -285,8 +286,26 @@ export function getChildHostContext(
export function getPublicInstance(instance: Instance): PublicInstance {
// $FlowExpectedError[prop-missing] For compatibility with Fabric
if (instance.canonical != null && instance.canonical.publicInstance != null) {
// $FlowFixMe[incompatible-return]
if (instance.canonical != null) {
if (instance.canonical.publicInstance == null) {
// $FlowExpectedError[incompatible-use]
instance.canonical.publicInstance = createPublicInstance(
// $FlowExpectedError[incompatible-use]
instance.canonical.nativeTag,
// $FlowExpectedError[incompatible-use]
instance.canonical.viewConfig,
// $FlowExpectedError[incompatible-use]
instance.canonical.internalInstanceHandle,
// $FlowExpectedError[incompatible-use]
instance.canonical.publicRootInstance ?? null,
);
// This was only necessary to create the public instance.
// $FlowExpectedError[prop-missing]
instance.canonical.publicRootInstance = null;
}
// $FlowExpectedError[prop-missing]
// $FlowExpectedError[incompatible-return]
return instance.canonical.publicInstance;
}

View File

@ -151,8 +151,6 @@ export const transitionLaneExpirationMs = 5000;
*/
export const enableInfiniteRenderLoopDetection = false;
export const enableLazyPublicInstanceInFabric = false;
export const enableFragmentRefs = __EXPERIMENTAL__;
// -----------------------------------------------------------------------------

View File

@ -23,7 +23,6 @@ export const enableHiddenSubtreeInsertionEffectCleanup = __VARIANT__;
export const enablePersistedModeClonedFlag = __VARIANT__;
export const enableEagerAlternateStateNodeCleanup = __VARIANT__;
export const passChildrenWhenCloningPersistedNodes = __VARIANT__;
export const enableLazyPublicInstanceInFabric = __VARIANT__;
export const renameElementSymbol = __VARIANT__;
export const enableFragmentRefs = __VARIANT__;
export const enableComponentPerformanceTrack = __VARIANT__;

View File

@ -25,7 +25,6 @@ export const {
enablePersistedModeClonedFlag,
enableEagerAlternateStateNodeCleanup,
passChildrenWhenCloningPersistedNodes,
enableLazyPublicInstanceInFabric,
renameElementSymbol,
enableFragmentRefs,
} = dynamicFlags;

View File

@ -64,7 +64,6 @@ export const enableYieldingBeforePassive = false;
export const enableThrottledScheduling = false;
export const enableViewTransition = false;
export const enableGestureTransition = false;
export const enableLazyPublicInstanceInFabric = false;
export const enableScrollEndPolyfill = true;
export const enableSuspenseyImages = false;
export const enableFizzBlockingRender = true;

View File

@ -66,7 +66,6 @@ export const enableYieldingBeforePassive = true;
export const enableThrottledScheduling = false;
export const enableViewTransition = false;
export const enableGestureTransition = false;
export const enableLazyPublicInstanceInFabric = false;
export const enableScrollEndPolyfill = true;
export const enableSuspenseyImages = false;
export const enableFizzBlockingRender = true;

View File

@ -62,7 +62,6 @@ export const enableYieldingBeforePassive = false;
export const enableThrottledScheduling = false;
export const enableViewTransition = false;
export const enableGestureTransition = false;
export const enableLazyPublicInstanceInFabric = false;
export const enableScrollEndPolyfill = true;
export const enableSuspenseyImages = false;
export const enableFizzBlockingRender = true;

View File

@ -74,7 +74,6 @@ export const enableYieldingBeforePassive = false;
export const enableThrottledScheduling = false;
export const enableViewTransition = false;
export const enableGestureTransition = false;
export const enableLazyPublicInstanceInFabric = false;
export const enableScrollEndPolyfill = true;
export const enableSuspenseyImages = false;
export const enableFizzBlockingRender = true;

View File

@ -31,7 +31,6 @@ export const enableSchedulingProfiler = __VARIANT__;
export const enableInfiniteRenderLoopDetection = __VARIANT__;
export const enableFastAddPropertiesInDiffing = __VARIANT__;
export const enableLazyPublicInstanceInFabric = false;
export const enableViewTransition = __VARIANT__;
export const enableComponentPerformanceTrack = __VARIANT__;
export const enableScrollEndPolyfill = __VARIANT__;

View File

@ -102,8 +102,6 @@ export const disableLegacyMode = true;
export const enableEagerAlternateStateNodeCleanup = true;
export const enableLazyPublicInstanceInFabric = false;
export const enableGestureTransition = false;
export const enableSuspenseyImages = false;