Skip to content

Commit 3ba4b12

Browse files
committed
Enable suspenseCallback on React Native (#29210)
## Summary suspenseCallback feature has proved to be useful for FB Web. Let's look at enabling the feature for the React Native build. ## How did you test this change? Will sync the react changes with a React Native build and will verify that performance logging is correctly notified of suspense promises during the suspense callback. DiffTrain build for commit 246d7bf.
1 parent 6c99ba7 commit 3ba4b12

File tree

14 files changed

+302
-178
lines changed

14 files changed

+302
-178
lines changed

compiled-rn/VERSION_NATIVE_FB

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
19.0.0-native-fb-ee7f6757-20240823
1+
19.0.0-native-fb-246d7bfe-20240826

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-test-renderer/cjs/ReactTestRenderer-dev.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<487e4d25726d3b9452e5df47a0ff70f5>>
10+
* @generated SignedSource<<9fd63ef3b1c7300e9c6d203ae91a8b08>>
1111
*/
1212

1313
"use strict";
@@ -14938,11 +14938,11 @@ __DEV__ &&
1493814938
(function () {
1493914939
var internals = {
1494014940
bundleType: 1,
14941-
version: "19.0.0-native-fb-ee7f6757-20240823",
14941+
version: "19.0.0-native-fb-246d7bfe-20240826",
1494214942
rendererPackageName: "react-test-renderer",
1494314943
currentDispatcherRef: ReactSharedInternals,
1494414944
findFiberByHostInstance: getInstanceFromNode,
14945-
reconcilerVersion: "19.0.0-native-fb-ee7f6757-20240823"
14945+
reconcilerVersion: "19.0.0-native-fb-246d7bfe-20240826"
1494614946
};
1494714947
internals.overrideHookState = overrideHookState;
1494814948
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -15087,5 +15087,5 @@ __DEV__ &&
1508715087
flushSyncWorkAcrossRoots_impl(0, !0));
1508815088
}
1508915089
};
15090-
exports.version = "19.0.0-native-fb-ee7f6757-20240823";
15090+
exports.version = "19.0.0-native-fb-246d7bfe-20240826";
1509115091
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-test-renderer/cjs/ReactTestRenderer-prod.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<2b7194fd59bbe7abfe013eed25837c19>>
10+
* @generated SignedSource<<c126df2e448ffc59e98d891cf74ae8d2>>
1111
*/
1212

1313
"use strict";
@@ -9331,14 +9331,14 @@ function wrapFiber(fiber) {
93319331
}
93329332
var internals$jscomp$inline_1216 = {
93339333
bundleType: 0,
9334-
version: "19.0.0-native-fb-ee7f6757-20240823",
9334+
version: "19.0.0-native-fb-246d7bfe-20240826",
93359335
rendererPackageName: "react-test-renderer",
93369336
currentDispatcherRef: ReactSharedInternals,
93379337
findFiberByHostInstance: function (mockNode) {
93389338
mockNode = nodeToInstanceMap.get(mockNode);
93399339
return void 0 !== mockNode ? mockNode.internalInstanceHandle : null;
93409340
},
9341-
reconcilerVersion: "19.0.0-native-fb-ee7f6757-20240823"
9341+
reconcilerVersion: "19.0.0-native-fb-246d7bfe-20240826"
93429342
};
93439343
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
93449344
var hook$jscomp$inline_1217 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -9474,4 +9474,4 @@ exports.unstable_batchedUpdates = function (fn, a) {
94749474
flushSyncWorkAcrossRoots_impl(0, !0));
94759475
}
94769476
};
9477-
exports.version = "19.0.0-native-fb-ee7f6757-20240823";
9477+
exports.version = "19.0.0-native-fb-246d7bfe-20240826";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-test-renderer/cjs/ReactTestRenderer-profiling.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<299f69238375a704376166f52cdb50e2>>
10+
* @generated SignedSource<<1730b3d88bae08be3715d2c99dbe4f36>>
1111
*/
1212

1313
"use strict";
@@ -9944,14 +9944,14 @@ function wrapFiber(fiber) {
99449944
}
99459945
var internals$jscomp$inline_1117 = {
99469946
bundleType: 0,
9947-
version: "19.0.0-native-fb-ee7f6757-20240823",
9947+
version: "19.0.0-native-fb-246d7bfe-20240826",
99489948
rendererPackageName: "react-test-renderer",
99499949
currentDispatcherRef: ReactSharedInternals,
99509950
findFiberByHostInstance: function (mockNode) {
99519951
mockNode = nodeToInstanceMap.get(mockNode);
99529952
return void 0 !== mockNode ? mockNode.internalInstanceHandle : null;
99539953
},
9954-
reconcilerVersion: "19.0.0-native-fb-ee7f6757-20240823",
9954+
reconcilerVersion: "19.0.0-native-fb-246d7bfe-20240826",
99559955
getLaneLabelMap: function () {
99569956
for (
99579957
var map = new Map(), lane = 1, index$149 = 0;
@@ -10102,4 +10102,4 @@ exports.unstable_batchedUpdates = function (fn, a) {
1010210102
flushSyncWorkAcrossRoots_impl(0, !0));
1010310103
}
1010410104
};
10105-
exports.version = "19.0.0-native-fb-ee7f6757-20240823";
10105+
exports.version = "19.0.0-native-fb-246d7bfe-20240826";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react/cjs/React-dev.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<2ba29bebd603109d19a424b4d5da6619>>
10+
* @generated SignedSource<<896f79c85e8c2785f38cee89b95a332f>>
1111
*/
1212

1313
"use strict";
@@ -1705,7 +1705,7 @@ __DEV__ &&
17051705
exports.useTransition = function () {
17061706
return resolveDispatcher().useTransition();
17071707
};
1708-
exports.version = "19.0.0-native-fb-ee7f6757-20240823";
1708+
exports.version = "19.0.0-native-fb-246d7bfe-20240826";
17091709
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
17101710
"function" ===
17111711
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react/cjs/React-prod.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<2a611fb74005fd03289965ce11f15bca>>
10+
* @generated SignedSource<<fc1f4804ec761bcebe4c15d74709e0e6>>
1111
*/
1212

1313
"use strict";
@@ -580,4 +580,4 @@ exports.useSyncExternalStore = function (
580580
exports.useTransition = function () {
581581
return ReactSharedInternals.H.useTransition();
582582
};
583-
exports.version = "19.0.0-native-fb-ee7f6757-20240823";
583+
exports.version = "19.0.0-native-fb-246d7bfe-20240826";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react/cjs/React-profiling.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<7ee390300a2fbde0cddea1af7690a29f>>
10+
* @generated SignedSource<<695d3ab4be692d0760b33e3253e66289>>
1111
*/
1212

1313
"use strict";
@@ -584,7 +584,7 @@ exports.useSyncExternalStore = function (
584584
exports.useTransition = function () {
585585
return ReactSharedInternals.H.useTransition();
586586
};
587-
exports.version = "19.0.0-native-fb-ee7f6757-20240823";
587+
exports.version = "19.0.0-native-fb-246d7bfe-20240826";
588588
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
589589
"function" ===
590590
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ee7f6757c446c4e79ecc7e2bc22b8c9b712834b7
1+
246d7bfeb0c90ecccd9531929b60a79d628a4c78

compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/implementations/ReactFabric-dev.fb.js

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<746002f099c7204907e443cbabc48477>>
10+
* @generated SignedSource<<554f420a6fa3f25ed0f068fc6a103bef>>
1111
*/
1212

1313
"use strict";
@@ -9487,6 +9487,9 @@ __DEV__ &&
94879487
newProps &&
94889488
(workInProgress.child.flags |= 8192);
94899489
scheduleRetryEffect(workInProgress, workInProgress.updateQueue);
9490+
null !== workInProgress.updateQueue &&
9491+
null != workInProgress.memoizedProps.suspenseCallback &&
9492+
(workInProgress.flags |= 4);
94909493
bubbleProperties(workInProgress);
94919494
0 !== (workInProgress.mode & 2) &&
94929495
newProps &&
@@ -10414,6 +10417,10 @@ __DEV__ &&
1041410417
);
1041510418
break;
1041610419
case 18:
10420+
finishedRoot = finishedRoot.hydrationCallbacks;
10421+
null !== finishedRoot &&
10422+
(finishedRoot = finishedRoot.onDeleted) &&
10423+
finishedRoot(deletedFiber.stateNode);
1041710424
break;
1041810425
case 4:
1041910426
var containerInfo = deletedFiber.stateNode.containerInfo,
@@ -10736,35 +10743,50 @@ __DEV__ &&
1073610743
case 13:
1073710744
recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1073810745
commitReconciliationEffects(finishedWork);
10739-
if (finishedWork.child.flags & 8192) {
10740-
var isShowingFallback = null !== finishedWork.memoizedState;
10741-
current = null !== current && null !== current.memoizedState;
10746+
finishedWork.child.flags & 8192 &&
10747+
((root = null !== finishedWork.memoizedState),
10748+
(current = null !== current && null !== current.memoizedState),
1074210749
alwaysThrottleRetries
10743-
? isShowingFallback !== current &&
10744-
(globalMostRecentFallbackTime = now$1())
10745-
: isShowingFallback &&
10746-
!current &&
10747-
(globalMostRecentFallbackTime = now$1());
10748-
}
10749-
flags & 4 &&
10750-
((flags = finishedWork.updateQueue),
10750+
? root !== current && (globalMostRecentFallbackTime = now$1())
10751+
: root && !current && (globalMostRecentFallbackTime = now$1()));
10752+
if (flags & 4) {
10753+
try {
10754+
if (null !== finishedWork.memoizedState) {
10755+
var suspenseCallback =
10756+
finishedWork.memoizedProps.suspenseCallback;
10757+
if ("function" === typeof suspenseCallback) {
10758+
var retryQueue = finishedWork.updateQueue;
10759+
null !== retryQueue && suspenseCallback(new Set(retryQueue));
10760+
} else
10761+
void 0 !== suspenseCallback &&
10762+
error$jscomp$0("Unexpected type for suspenseCallback.");
10763+
}
10764+
} catch (error$28) {
10765+
captureCommitPhaseError(
10766+
finishedWork,
10767+
finishedWork.return,
10768+
error$28
10769+
);
10770+
}
10771+
flags = finishedWork.updateQueue;
1075110772
null !== flags &&
1075210773
((finishedWork.updateQueue = null),
10753-
attachSuspenseRetryListeners(finishedWork, flags)));
10774+
attachSuspenseRetryListeners(finishedWork, flags));
10775+
}
1075410776
break;
1075510777
case 22:
1075610778
flags & 512 &&
1075710779
null !== current &&
1075810780
safelyDetachRef(current, current.return);
10759-
var isHidden = null !== finishedWork.memoizedState;
10760-
isShowingFallback =
10761-
null !== current && null !== current.memoizedState;
10781+
retryQueue = null !== finishedWork.memoizedState;
10782+
suspenseCallback = null !== current && null !== current.memoizedState;
1076210783
if (finishedWork.mode & 1) {
1076310784
var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,
1076410785
prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
10765-
offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || isHidden;
10786+
offscreenSubtreeIsHidden =
10787+
prevOffscreenSubtreeIsHidden || retryQueue;
1076610788
offscreenSubtreeWasHidden =
10767-
prevOffscreenSubtreeWasHidden || isShowingFallback;
10789+
prevOffscreenSubtreeWasHidden || suspenseCallback;
1076810790
recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1076910791
offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
1077010792
offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
@@ -10775,13 +10797,13 @@ __DEV__ &&
1077510797
root._visibility &= -3;
1077610798
root._visibility |= root._pendingVisibility & 2;
1077710799
flags & 8192 &&
10778-
((root._visibility = isHidden
10800+
((root._visibility = retryQueue
1077910801
? root._visibility & -2
1078010802
: root._visibility | 1),
10781-
isHidden &&
10803+
retryQueue &&
1078210804
((root = offscreenSubtreeIsHidden || offscreenSubtreeWasHidden),
1078310805
null === current ||
10784-
isShowingFallback ||
10806+
suspenseCallback ||
1078510807
root ||
1078610808
(0 !== (finishedWork.mode & 1) &&
1078710809
recursivelyTraverseDisappearLayoutEffects(finishedWork))));
@@ -13750,6 +13772,7 @@ __DEV__ &&
1375013772
this.onRecoverableError = onRecoverableError;
1375113773
this.pooledCache = null;
1375213774
this.pooledCacheLanes = 0;
13775+
this.hydrationCallbacks = null;
1375313776
this.formState = formState;
1375413777
this.incompleteTransitions = new Map();
1375513778
this.passiveEffectDuration = this.effectDuration = 0;
@@ -16929,11 +16952,11 @@ __DEV__ &&
1692916952
(function () {
1693016953
var internals = {
1693116954
bundleType: 1,
16932-
version: "19.0.0-native-fb-ee7f6757-20240823",
16955+
version: "19.0.0-native-fb-246d7bfe-20240826",
1693316956
rendererPackageName: "react-native-renderer",
1693416957
currentDispatcherRef: ReactSharedInternals,
1693516958
findFiberByHostInstance: getInstanceFromNode,
16936-
reconcilerVersion: "19.0.0-native-fb-ee7f6757-20240823"
16959+
reconcilerVersion: "19.0.0-native-fb-246d7bfe-20240826"
1693716960
};
1693816961
null !== extraDevToolsConfig &&
1693916962
(internals.rendererConfig = extraDevToolsConfig);
@@ -17076,6 +17099,7 @@ __DEV__ &&
1707617099
onRecoverableError,
1707717100
null
1707817101
);
17102+
options.hydrationCallbacks = null;
1707917103
concurrentRoot = 1 === concurrentRoot ? 1 : 0;
1708017104
isDevToolsPresent && (concurrentRoot |= 2);
1708117105
concurrentRoot = createFiber(3, null, null, concurrentRoot);

0 commit comments

Comments
 (0)