Skip to content

Commit e9638c3

Browse files
authored
Clean up feature flag to use lazy public instances in Fabric (facebook#33943)
## Summary We have thoroughly tested this flag in production and proved stability and performance, so we can clean it up and "ship it".
1 parent 28d4bc4 commit e9638c3

11 files changed

+31
-46
lines changed

packages/react-native-renderer/src/ReactFiberConfigFabric.js

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,7 @@ import {
6666
getInspectorDataForInstance,
6767
} from './ReactNativeFiberInspector';
6868

69-
import {
70-
passChildrenWhenCloningPersistedNodes,
71-
enableLazyPublicInstanceInFabric,
72-
} from 'shared/ReactFeatureFlags';
69+
import {passChildrenWhenCloningPersistedNodes} from 'shared/ReactFeatureFlags';
7370
import {REACT_CONTEXT_TYPE} from 'shared/ReactSymbols';
7471
import type {ReactContext} from 'shared/ReactTypes';
7572

@@ -204,37 +201,17 @@ export function createInstance(
204201
internalInstanceHandle, // internalInstanceHandle
205202
);
206203

207-
if (enableLazyPublicInstanceInFabric) {
208-
return {
209-
node: node,
210-
canonical: {
211-
nativeTag: tag,
212-
viewConfig,
213-
currentProps: props,
214-
internalInstanceHandle,
215-
publicInstance: null,
216-
publicRootInstance: rootContainerInstance.publicInstance,
217-
},
218-
};
219-
} else {
220-
const component = createPublicInstance(
221-
tag,
204+
return {
205+
node: node,
206+
canonical: {
207+
nativeTag: tag,
222208
viewConfig,
209+
currentProps: props,
223210
internalInstanceHandle,
224-
rootContainerInstance.publicInstance,
225-
);
226-
227-
return {
228-
node: node,
229-
canonical: {
230-
nativeTag: tag,
231-
viewConfig,
232-
currentProps: props,
233-
internalInstanceHandle,
234-
publicInstance: component,
235-
},
236-
};
237-
}
211+
publicInstance: null,
212+
publicRootInstance: rootContainerInstance.publicInstance,
213+
},
214+
};
238215
}
239216

240217
export function createTextInstance(

packages/react-native-renderer/src/ReactFiberConfigNative.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
ReactNativeViewConfigRegistry,
1616
UIManager,
1717
deepFreezeAndThrowOnMutationInDev,
18+
createPublicInstance,
1819
type PublicRootInstance,
1920
} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';
2021

@@ -285,8 +286,26 @@ export function getChildHostContext(
285286

286287
export function getPublicInstance(instance: Instance): PublicInstance {
287288
// $FlowExpectedError[prop-missing] For compatibility with Fabric
288-
if (instance.canonical != null && instance.canonical.publicInstance != null) {
289-
// $FlowFixMe[incompatible-return]
289+
if (instance.canonical != null) {
290+
if (instance.canonical.publicInstance == null) {
291+
// $FlowExpectedError[incompatible-use]
292+
instance.canonical.publicInstance = createPublicInstance(
293+
// $FlowExpectedError[incompatible-use]
294+
instance.canonical.nativeTag,
295+
// $FlowExpectedError[incompatible-use]
296+
instance.canonical.viewConfig,
297+
// $FlowExpectedError[incompatible-use]
298+
instance.canonical.internalInstanceHandle,
299+
// $FlowExpectedError[incompatible-use]
300+
instance.canonical.publicRootInstance ?? null,
301+
);
302+
// This was only necessary to create the public instance.
303+
// $FlowExpectedError[prop-missing]
304+
instance.canonical.publicRootInstance = null;
305+
}
306+
307+
// $FlowExpectedError[prop-missing]
308+
// $FlowExpectedError[incompatible-return]
290309
return instance.canonical.publicInstance;
291310
}
292311

packages/shared/ReactFeatureFlags.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,6 @@ export const transitionLaneExpirationMs = 5000;
151151
*/
152152
export const enableInfiniteRenderLoopDetection = false;
153153

154-
export const enableLazyPublicInstanceInFabric = false;
155-
156154
export const enableFragmentRefs = __EXPERIMENTAL__;
157155

158156
// -----------------------------------------------------------------------------

packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ export const enableHiddenSubtreeInsertionEffectCleanup = __VARIANT__;
2323
export const enablePersistedModeClonedFlag = __VARIANT__;
2424
export const enableEagerAlternateStateNodeCleanup = __VARIANT__;
2525
export const passChildrenWhenCloningPersistedNodes = __VARIANT__;
26-
export const enableLazyPublicInstanceInFabric = __VARIANT__;
2726
export const renameElementSymbol = __VARIANT__;
2827
export const enableFragmentRefs = __VARIANT__;
2928
export const enableComponentPerformanceTrack = __VARIANT__;

packages/shared/forks/ReactFeatureFlags.native-fb.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export const {
2525
enablePersistedModeClonedFlag,
2626
enableEagerAlternateStateNodeCleanup,
2727
passChildrenWhenCloningPersistedNodes,
28-
enableLazyPublicInstanceInFabric,
2928
renameElementSymbol,
3029
enableFragmentRefs,
3130
} = dynamicFlags;

packages/shared/forks/ReactFeatureFlags.native-oss.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ export const enableYieldingBeforePassive = false;
6464
export const enableThrottledScheduling = false;
6565
export const enableViewTransition = false;
6666
export const enableGestureTransition = false;
67-
export const enableLazyPublicInstanceInFabric = false;
6867
export const enableScrollEndPolyfill = true;
6968
export const enableSuspenseyImages = false;
7069
export const enableFizzBlockingRender = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ export const enableYieldingBeforePassive = true;
6666
export const enableThrottledScheduling = false;
6767
export const enableViewTransition = false;
6868
export const enableGestureTransition = false;
69-
export const enableLazyPublicInstanceInFabric = false;
7069
export const enableScrollEndPolyfill = true;
7170
export const enableSuspenseyImages = false;
7271
export const enableFizzBlockingRender = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ export const enableYieldingBeforePassive = false;
6262
export const enableThrottledScheduling = false;
6363
export const enableViewTransition = false;
6464
export const enableGestureTransition = false;
65-
export const enableLazyPublicInstanceInFabric = false;
6665
export const enableScrollEndPolyfill = true;
6766
export const enableSuspenseyImages = false;
6867
export const enableFizzBlockingRender = true;

packages/shared/forks/ReactFeatureFlags.test-renderer.www.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ export const enableYieldingBeforePassive = false;
7474
export const enableThrottledScheduling = false;
7575
export const enableViewTransition = false;
7676
export const enableGestureTransition = false;
77-
export const enableLazyPublicInstanceInFabric = false;
7877
export const enableScrollEndPolyfill = true;
7978
export const enableSuspenseyImages = false;
8079
export const enableFizzBlockingRender = true;

packages/shared/forks/ReactFeatureFlags.www-dynamic.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export const enableSchedulingProfiler = __VARIANT__;
3131
export const enableInfiniteRenderLoopDetection = __VARIANT__;
3232

3333
export const enableFastAddPropertiesInDiffing = __VARIANT__;
34-
export const enableLazyPublicInstanceInFabric = false;
3534
export const enableViewTransition = __VARIANT__;
3635
export const enableComponentPerformanceTrack = __VARIANT__;
3736
export const enableScrollEndPolyfill = __VARIANT__;

0 commit comments

Comments
 (0)