Skip to content

Commit a084c8a

Browse files
committed
Register Suspense retry handlers in commit phase (facebook#31667)
To avoid GC pressure and accidentally hanging onto old trees Suspense boundary retries are now implemented in the commit phase. I used the Callback flag which was previously only used to schedule callbacks for Class components. This isn't quite semantically equivalent but it's unused and seemingly compatible. DiffTrain build for [de68d2f](facebook@de68d2f)
1 parent 691606c commit a084c8a

23 files changed

+697
-631
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-16d2bbbd-20241203
1+
19.0.0-native-fb-de68d2f4-20241204

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-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<<cbb4fb73c9e1ccc01854e808c548f830>>
10+
* @generated SignedSource<<160a11128267704309b6ab8a4178e177>>
1111
*/
1212

1313
"use strict";
@@ -420,5 +420,5 @@ __DEV__ &&
420420
exports.useFormStatus = function () {
421421
return resolveDispatcher().useHostTransitionStatus();
422422
};
423-
exports.version = "19.0.0-native-fb-16d2bbbd-20241203";
423+
exports.version = "19.0.0-native-fb-de68d2f4-20241204";
424424
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-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<<239a11226e90f84bbe038aeaaca66638>>
10+
* @generated SignedSource<<4ab67f1597a97138a25ba4aa51a83988>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.0.0-native-fb-16d2bbbd-20241203";
206+
exports.version = "19.0.0-native-fb-de68d2f4-20241204";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-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<<239a11226e90f84bbe038aeaaca66638>>
10+
* @generated SignedSource<<4ab67f1597a97138a25ba4aa51a83988>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.0.0-native-fb-16d2bbbd-20241203";
206+
exports.version = "19.0.0-native-fb-de68d2f4-20241204";

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

Lines changed: 197 additions & 191 deletions
Large diffs are not rendered by default.

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

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

1313
/*
@@ -6657,13 +6657,8 @@ function updateSuspenseComponent(current, workInProgress, renderLanes) {
66576657
);
66586658
} else
66596659
"$?" === nextInstance.data
6660-
? ((workInProgress.flags |= 128),
6660+
? ((workInProgress.flags |= 192),
66616661
(workInProgress.child = current.child),
6662-
(workInProgress = retryDehydratedSuspenseBoundary.bind(
6663-
null,
6664-
current
6665-
)),
6666-
registerSuspenseInstanceRetry(nextInstance, workInProgress),
66676662
(workInProgress = null))
66686663
: ((renderLanes = JSCompiler_temp$jscomp$0.treeContext),
66696664
(nextHydratableInstance = getNextHydratable(
@@ -8528,6 +8523,16 @@ function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {
85288523
case 13:
85298524
recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
85308525
flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
8526+
flags & 64 &&
8527+
((flags = finishedWork.memoizedState),
8528+
null !== flags &&
8529+
((flags = flags.dehydrated),
8530+
null !== flags &&
8531+
((finishedWork = retryDehydratedSuspenseBoundary.bind(
8532+
null,
8533+
finishedWork
8534+
)),
8535+
registerSuspenseInstanceRetry(flags, finishedWork))));
85318536
break;
85328537
case 22:
85338538
if (0 !== (finishedWork.mode & 1)) {
@@ -12352,20 +12357,20 @@ function extractEvents$1(
1235212357
}
1235312358
}
1235412359
for (
12355-
var i$jscomp$inline_1489 = 0;
12356-
i$jscomp$inline_1489 < simpleEventPluginEvents.length;
12357-
i$jscomp$inline_1489++
12360+
var i$jscomp$inline_1488 = 0;
12361+
i$jscomp$inline_1488 < simpleEventPluginEvents.length;
12362+
i$jscomp$inline_1488++
1235812363
) {
12359-
var eventName$jscomp$inline_1490 =
12360-
simpleEventPluginEvents[i$jscomp$inline_1489],
12361-
domEventName$jscomp$inline_1491 =
12362-
eventName$jscomp$inline_1490.toLowerCase(),
12363-
capitalizedEvent$jscomp$inline_1492 =
12364-
eventName$jscomp$inline_1490[0].toUpperCase() +
12365-
eventName$jscomp$inline_1490.slice(1);
12364+
var eventName$jscomp$inline_1489 =
12365+
simpleEventPluginEvents[i$jscomp$inline_1488],
12366+
domEventName$jscomp$inline_1490 =
12367+
eventName$jscomp$inline_1489.toLowerCase(),
12368+
capitalizedEvent$jscomp$inline_1491 =
12369+
eventName$jscomp$inline_1489[0].toUpperCase() +
12370+
eventName$jscomp$inline_1489.slice(1);
1236612371
registerSimpleEvent(
12367-
domEventName$jscomp$inline_1491,
12368-
"on" + capitalizedEvent$jscomp$inline_1492
12372+
domEventName$jscomp$inline_1490,
12373+
"on" + capitalizedEvent$jscomp$inline_1491
1236912374
);
1237012375
}
1237112376
registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
@@ -14265,15 +14270,16 @@ function isSuspenseInstanceFallback(instance) {
1426514270
}
1426614271
function registerSuspenseInstanceRetry(instance, callback) {
1426714272
var ownerDocument = instance.ownerDocument;
14268-
"complete" !== ownerDocument.readyState &&
14269-
ownerDocument.addEventListener(
14270-
"DOMContentLoaded",
14271-
function () {
14272-
"$?" === instance.data && callback();
14273-
},
14274-
{ once: !0 }
14275-
);
14276-
instance._reactRetry = callback;
14273+
if ("$?" !== instance.data || "complete" === ownerDocument.readyState)
14274+
callback();
14275+
else {
14276+
var listener = function () {
14277+
callback();
14278+
ownerDocument.removeEventListener("DOMContentLoaded", listener);
14279+
};
14280+
ownerDocument.addEventListener("DOMContentLoaded", listener);
14281+
instance._reactRetry = listener;
14282+
}
1427714283
}
1427814284
function getNextHydratable(node) {
1427914285
for (; null != node; node = node.nextSibling) {
@@ -15856,16 +15862,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1585615862
0 === i && attemptExplicitHydrationTarget(target);
1585715863
}
1585815864
};
15859-
var isomorphicReactPackageVersion$jscomp$inline_1732 = React.version;
15865+
var isomorphicReactPackageVersion$jscomp$inline_1731 = React.version;
1586015866
if (
15861-
"19.0.0-native-fb-16d2bbbd-20241203" !==
15862-
isomorphicReactPackageVersion$jscomp$inline_1732
15867+
"19.0.0-native-fb-de68d2f4-20241204" !==
15868+
isomorphicReactPackageVersion$jscomp$inline_1731
1586315869
)
1586415870
throw Error(
1586515871
formatProdErrorMessage(
1586615872
527,
15867-
isomorphicReactPackageVersion$jscomp$inline_1732,
15868-
"19.0.0-native-fb-16d2bbbd-20241203"
15873+
isomorphicReactPackageVersion$jscomp$inline_1731,
15874+
"19.0.0-native-fb-de68d2f4-20241204"
1586915875
)
1587015876
);
1587115877
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -15885,25 +15891,25 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1588515891
null === componentOrElement ? null : componentOrElement.stateNode;
1588615892
return componentOrElement;
1588715893
};
15888-
var internals$jscomp$inline_2187 = {
15894+
var internals$jscomp$inline_2186 = {
1588915895
bundleType: 0,
15890-
version: "19.0.0-native-fb-16d2bbbd-20241203",
15896+
version: "19.0.0-native-fb-de68d2f4-20241204",
1589115897
rendererPackageName: "react-dom",
1589215898
currentDispatcherRef: ReactSharedInternals,
1589315899
findFiberByHostInstance: getClosestInstanceFromNode,
15894-
reconcilerVersion: "19.0.0-native-fb-16d2bbbd-20241203"
15900+
reconcilerVersion: "19.0.0-native-fb-de68d2f4-20241204"
1589515901
};
1589615902
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
15897-
var hook$jscomp$inline_2188 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
15903+
var hook$jscomp$inline_2187 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
1589815904
if (
15899-
!hook$jscomp$inline_2188.isDisabled &&
15900-
hook$jscomp$inline_2188.supportsFiber
15905+
!hook$jscomp$inline_2187.isDisabled &&
15906+
hook$jscomp$inline_2187.supportsFiber
1590115907
)
1590215908
try {
15903-
(rendererID = hook$jscomp$inline_2188.inject(
15904-
internals$jscomp$inline_2187
15909+
(rendererID = hook$jscomp$inline_2187.inject(
15910+
internals$jscomp$inline_2186
1590515911
)),
15906-
(injectedHook = hook$jscomp$inline_2188);
15912+
(injectedHook = hook$jscomp$inline_2187);
1590715913
} catch (err) {}
1590815914
}
1590915915
exports.createRoot = function (container, options) {
@@ -15995,4 +16001,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1599516001
listenToAllSupportedEvents(container);
1599616002
return new ReactDOMHydrationRoot(initialChildren);
1599716003
};
15998-
exports.version = "19.0.0-native-fb-16d2bbbd-20241203";
16004+
exports.version = "19.0.0-native-fb-de68d2f4-20241204";

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

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<0ebd78a0cf049a802a2b35960edaa452>>
10+
* @generated SignedSource<<d41e5384bdb7ebba5c6944401702170a>>
1111
*/
1212

1313
/*
@@ -6828,13 +6828,8 @@ function updateSuspenseComponent(current, workInProgress, renderLanes) {
68286828
);
68296829
} else
68306830
"$?" === nextInstance.data
6831-
? ((workInProgress.flags |= 128),
6831+
? ((workInProgress.flags |= 192),
68326832
(workInProgress.child = current.child),
6833-
(workInProgress = retryDehydratedSuspenseBoundary.bind(
6834-
null,
6835-
current
6836-
)),
6837-
registerSuspenseInstanceRetry(nextInstance, workInProgress),
68386833
(workInProgress = null))
68396834
: ((renderLanes = JSCompiler_temp$jscomp$0.treeContext),
68406835
(nextHydratableInstance = getNextHydratable(
@@ -8933,6 +8928,16 @@ function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {
89338928
case 13:
89348929
recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
89358930
flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
8931+
flags & 64 &&
8932+
((finishedRoot = finishedWork.memoizedState),
8933+
null !== finishedRoot &&
8934+
((finishedRoot = finishedRoot.dehydrated),
8935+
null !== finishedRoot &&
8936+
((finishedWork = retryDehydratedSuspenseBoundary.bind(
8937+
null,
8938+
finishedWork
8939+
)),
8940+
registerSuspenseInstanceRetry(finishedRoot, finishedWork))));
89368941
break;
89378942
case 22:
89388943
if (0 !== (finishedWork.mode & 1)) {
@@ -12997,20 +13002,20 @@ function extractEvents$1(
1299713002
}
1299813003
}
1299913004
for (
13000-
var i$jscomp$inline_1577 = 0;
13001-
i$jscomp$inline_1577 < simpleEventPluginEvents.length;
13002-
i$jscomp$inline_1577++
13005+
var i$jscomp$inline_1576 = 0;
13006+
i$jscomp$inline_1576 < simpleEventPluginEvents.length;
13007+
i$jscomp$inline_1576++
1300313008
) {
13004-
var eventName$jscomp$inline_1578 =
13005-
simpleEventPluginEvents[i$jscomp$inline_1577],
13006-
domEventName$jscomp$inline_1579 =
13007-
eventName$jscomp$inline_1578.toLowerCase(),
13008-
capitalizedEvent$jscomp$inline_1580 =
13009-
eventName$jscomp$inline_1578[0].toUpperCase() +
13010-
eventName$jscomp$inline_1578.slice(1);
13009+
var eventName$jscomp$inline_1577 =
13010+
simpleEventPluginEvents[i$jscomp$inline_1576],
13011+
domEventName$jscomp$inline_1578 =
13012+
eventName$jscomp$inline_1577.toLowerCase(),
13013+
capitalizedEvent$jscomp$inline_1579 =
13014+
eventName$jscomp$inline_1577[0].toUpperCase() +
13015+
eventName$jscomp$inline_1577.slice(1);
1301113016
registerSimpleEvent(
13012-
domEventName$jscomp$inline_1579,
13013-
"on" + capitalizedEvent$jscomp$inline_1580
13017+
domEventName$jscomp$inline_1578,
13018+
"on" + capitalizedEvent$jscomp$inline_1579
1301413019
);
1301513020
}
1301613021
registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
@@ -14910,15 +14915,16 @@ function isSuspenseInstanceFallback(instance) {
1491014915
}
1491114916
function registerSuspenseInstanceRetry(instance, callback) {
1491214917
var ownerDocument = instance.ownerDocument;
14913-
"complete" !== ownerDocument.readyState &&
14914-
ownerDocument.addEventListener(
14915-
"DOMContentLoaded",
14916-
function () {
14917-
"$?" === instance.data && callback();
14918-
},
14919-
{ once: !0 }
14920-
);
14921-
instance._reactRetry = callback;
14918+
if ("$?" !== instance.data || "complete" === ownerDocument.readyState)
14919+
callback();
14920+
else {
14921+
var listener = function () {
14922+
callback();
14923+
ownerDocument.removeEventListener("DOMContentLoaded", listener);
14924+
};
14925+
ownerDocument.addEventListener("DOMContentLoaded", listener);
14926+
instance._reactRetry = listener;
14927+
}
1492214928
}
1492314929
function getNextHydratable(node) {
1492414930
for (; null != node; node = node.nextSibling) {
@@ -16509,16 +16515,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1650916515
0 === i && attemptExplicitHydrationTarget(target);
1651016516
}
1651116517
};
16512-
var isomorphicReactPackageVersion$jscomp$inline_1822 = React.version;
16518+
var isomorphicReactPackageVersion$jscomp$inline_1821 = React.version;
1651316519
if (
16514-
"19.0.0-native-fb-16d2bbbd-20241203" !==
16515-
isomorphicReactPackageVersion$jscomp$inline_1822
16520+
"19.0.0-native-fb-de68d2f4-20241204" !==
16521+
isomorphicReactPackageVersion$jscomp$inline_1821
1651616522
)
1651716523
throw Error(
1651816524
formatProdErrorMessage(
1651916525
527,
16520-
isomorphicReactPackageVersion$jscomp$inline_1822,
16521-
"19.0.0-native-fb-16d2bbbd-20241203"
16526+
isomorphicReactPackageVersion$jscomp$inline_1821,
16527+
"19.0.0-native-fb-de68d2f4-20241204"
1652216528
)
1652316529
);
1652416530
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -16538,13 +16544,13 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1653816544
null === componentOrElement ? null : componentOrElement.stateNode;
1653916545
return componentOrElement;
1654016546
};
16541-
var internals$jscomp$inline_1829 = {
16547+
var internals$jscomp$inline_1828 = {
1654216548
bundleType: 0,
16543-
version: "19.0.0-native-fb-16d2bbbd-20241203",
16549+
version: "19.0.0-native-fb-de68d2f4-20241204",
1654416550
rendererPackageName: "react-dom",
1654516551
currentDispatcherRef: ReactSharedInternals,
1654616552
findFiberByHostInstance: getClosestInstanceFromNode,
16547-
reconcilerVersion: "19.0.0-native-fb-16d2bbbd-20241203",
16553+
reconcilerVersion: "19.0.0-native-fb-de68d2f4-20241204",
1654816554
getLaneLabelMap: function () {
1654916555
for (
1655016556
var map = new Map(), lane = 1, index$292 = 0;
@@ -16562,16 +16568,16 @@ var internals$jscomp$inline_1829 = {
1656216568
}
1656316569
};
1656416570
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
16565-
var hook$jscomp$inline_2239 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
16571+
var hook$jscomp$inline_2238 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
1656616572
if (
16567-
!hook$jscomp$inline_2239.isDisabled &&
16568-
hook$jscomp$inline_2239.supportsFiber
16573+
!hook$jscomp$inline_2238.isDisabled &&
16574+
hook$jscomp$inline_2238.supportsFiber
1656916575
)
1657016576
try {
16571-
(rendererID = hook$jscomp$inline_2239.inject(
16572-
internals$jscomp$inline_1829
16577+
(rendererID = hook$jscomp$inline_2238.inject(
16578+
internals$jscomp$inline_1828
1657316579
)),
16574-
(injectedHook = hook$jscomp$inline_2239);
16580+
(injectedHook = hook$jscomp$inline_2238);
1657516581
} catch (err) {}
1657616582
}
1657716583
exports.createRoot = function (container, options) {
@@ -16663,4 +16669,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1666316669
listenToAllSupportedEvents(container);
1666416670
return new ReactDOMHydrationRoot(initialChildren);
1666516671
};
16666-
exports.version = "19.0.0-native-fb-16d2bbbd-20241203";
16672+
exports.version = "19.0.0-native-fb-de68d2f4-20241204";

0 commit comments

Comments
 (0)