Skip to content

Commit 812db07

Browse files
committed
Track Owner for Server Components in DEV (#28753)
This implements the concept of a DEV-only "owner" for Server Components. The owner concept isn't really super useful. We barely use it anymore, but we do have it as a concept in DevTools in a couple of cases so this adds it for parity. However, this is mainly interesting because it could be used to wire up future owner-based stacks. I do this by outlining the DebugInfo for a Server Component (ReactComponentInfo). Then I just rely on Flight deduping to refer to that. I refer to the same thing by referential equality so that we can associate a Server Component parent in DebugInfo with an owner. If you suspend and replay a Server Component, we have to restore the same owner. To do that, I did a little ugly hack and stashed it on the thenable state object. Felt unnecessarily complicated to add a stateful wrapper for this one dev-only case. The owner could really be anything since it could be coming from a different implementation. Because this is the first time we have an owner other than Fiber, I have to fix up a bunch of places that assumes Fiber. I mainly did the `typeof owner.tag === 'number'` to assume it's a Fiber for now. This also doesn't actually add it to DevTools / RN Inspector yet. I just ignore them there for now. Because Server Components can be async the owner isn't tracked after an await. We need per-component AsyncLocalStorage for that. This can be done in a follow up. DiffTrain build for commit e0455fe.
1 parent 47691a3 commit 812db07

File tree

13 files changed

+361
-434
lines changed

13 files changed

+361
-434
lines changed

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

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<3151ca79177b1e7b421f14db372bfd97>>
10+
* @generated SignedSource<<568cb702cdaad263cf51f5b74157b2ba>>
1111
*/
1212

1313
"use strict";
@@ -349,6 +349,17 @@ if (__DEV__) {
349349
return type.displayName || "Context";
350350
}
351351

352+
function getComponentNameFromOwner(owner) {
353+
if (typeof owner.tag === "number") {
354+
return getComponentNameFromFiber(owner);
355+
}
356+
357+
if (typeof owner.name === "string") {
358+
return owner.name;
359+
}
360+
361+
return null;
362+
}
352363
function getComponentNameFromFiber(fiber) {
353364
var tag = fiber.tag,
354365
type = fiber.type;
@@ -2881,21 +2892,14 @@ if (__DEV__) {
28812892

28822893
var objectIs = typeof Object.is === "function" ? Object.is : is; // $FlowFixMe[method-unbinding]
28832894

2884-
function describeBuiltInComponentFrame(name, ownerFn) {
2895+
function describeBuiltInComponentFrame(name) {
28852896
{
2886-
var ownerName = null;
2887-
2888-
if (ownerFn) {
2889-
ownerName = ownerFn.displayName || ownerFn.name || null;
2890-
}
2891-
2892-
return describeComponentFrame(name, ownerName);
2897+
return describeComponentFrame(name);
28932898
}
28942899
}
28952900
function describeDebugInfoFrame(name, env) {
28962901
return describeBuiltInComponentFrame(
2897-
name + (env ? " (" + env + ")" : ""),
2898-
null
2902+
name + (env ? " (" + env + ")" : "")
28992903
);
29002904
}
29012905

@@ -2904,65 +2908,51 @@ if (__DEV__) {
29042908
new PossiblyWeakMap$1();
29052909
}
29062910

2907-
function describeComponentFrame(name, ownerName) {
2908-
var sourceInfo = "";
2909-
2910-
if (ownerName) {
2911-
sourceInfo = " (created by " + ownerName + ")";
2912-
}
2913-
2914-
return "\n in " + (name || "Unknown") + sourceInfo;
2911+
function describeComponentFrame(name) {
2912+
return "\n in " + (name || "Unknown");
29152913
}
29162914

2917-
function describeClassComponentFrame(ctor, ownerFn) {
2915+
function describeClassComponentFrame(ctor) {
29182916
{
2919-
return describeFunctionComponentFrame(ctor, ownerFn);
2917+
return describeFunctionComponentFrame(ctor);
29202918
}
29212919
}
2922-
function describeFunctionComponentFrame(fn, ownerFn) {
2920+
function describeFunctionComponentFrame(fn) {
29232921
{
29242922
if (!fn) {
29252923
return "";
29262924
}
29272925

29282926
var name = fn.displayName || fn.name || null;
2929-
var ownerName = null;
2930-
2931-
if (ownerFn) {
2932-
ownerName = ownerFn.displayName || ownerFn.name || null;
2933-
}
2934-
2935-
return describeComponentFrame(name, ownerName);
2927+
return describeComponentFrame(name);
29362928
}
29372929
}
29382930

29392931
function describeFiber(fiber) {
2940-
var owner = fiber._debugOwner ? fiber._debugOwner.type : null;
2941-
29422932
switch (fiber.tag) {
29432933
case HostHoistable:
29442934
case HostSingleton:
29452935
case HostComponent:
2946-
return describeBuiltInComponentFrame(fiber.type, owner);
2936+
return describeBuiltInComponentFrame(fiber.type);
29472937

29482938
case LazyComponent:
2949-
return describeBuiltInComponentFrame("Lazy", owner);
2939+
return describeBuiltInComponentFrame("Lazy");
29502940

29512941
case SuspenseComponent:
2952-
return describeBuiltInComponentFrame("Suspense", owner);
2942+
return describeBuiltInComponentFrame("Suspense");
29532943

29542944
case SuspenseListComponent:
2955-
return describeBuiltInComponentFrame("SuspenseList", owner);
2945+
return describeBuiltInComponentFrame("SuspenseList");
29562946

29572947
case FunctionComponent:
29582948
case SimpleMemoComponent:
2959-
return describeFunctionComponentFrame(fiber.type, owner);
2949+
return describeFunctionComponentFrame(fiber.type);
29602950

29612951
case ForwardRef:
2962-
return describeFunctionComponentFrame(fiber.type.render, owner);
2952+
return describeFunctionComponentFrame(fiber.type.render);
29632953

29642954
case ClassComponent:
2965-
return describeClassComponentFrame(fiber.type, owner);
2955+
return describeClassComponentFrame(fiber.type);
29662956

29672957
default:
29682958
return "";
@@ -5253,8 +5243,8 @@ if (__DEV__) {
52535243

52545244
var owner = current._debugOwner;
52555245

5256-
if (owner !== null && typeof owner !== "undefined") {
5257-
return getComponentNameFromFiber(owner);
5246+
if (owner != null) {
5247+
return getComponentNameFromOwner(owner);
52585248
}
52595249
}
52605250

@@ -26560,7 +26550,7 @@ if (__DEV__) {
2656026550
"named imports.";
2656126551
}
2656226552

26563-
var ownerName = owner ? getComponentNameFromFiber(owner) : null;
26553+
var ownerName = owner ? getComponentNameFromOwner(owner) : null;
2656426554

2656526555
if (ownerName) {
2656626556
info += "\n\nCheck the render method of `" + ownerName + "`.";
@@ -26823,7 +26813,7 @@ if (__DEV__) {
2682326813
return root;
2682426814
}
2682526815

26826-
var ReactVersion = "19.0.0-canary-29bd6113";
26816+
var ReactVersion = "19.0.0-canary-6077cfa0";
2682726817

2682826818
// Might add PROFILE later.
2682926819

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

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<432e9d2dc4a6b45da0162dd89f63ecfc>>
10+
* @generated SignedSource<<edf13283385b2e5a6dba5a299a226ed0>>
1111
*/
1212

1313
"use strict";
@@ -654,28 +654,24 @@ function is(x, y) {
654654
return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
655655
}
656656
var objectIs = "function" === typeof Object.is ? Object.is : is;
657-
function describeComponentFrame(name, ownerName) {
658-
var sourceInfo = "";
659-
ownerName && (sourceInfo = " (created by " + ownerName + ")");
660-
return "\n in " + (name || "Unknown") + sourceInfo;
657+
function describeBuiltInComponentFrame(name) {
658+
return "\n in " + (name || "Unknown");
661659
}
662660
function describeFunctionComponentFrame(fn) {
663-
return fn
664-
? describeComponentFrame(fn.displayName || fn.name || null, null)
665-
: "";
661+
return fn ? "\n in " + (fn.displayName || fn.name || "Unknown") : "";
666662
}
667663
function describeFiber(fiber) {
668664
switch (fiber.tag) {
669665
case 26:
670666
case 27:
671667
case 5:
672-
return describeComponentFrame(fiber.type, null);
668+
return describeBuiltInComponentFrame(fiber.type);
673669
case 16:
674-
return describeComponentFrame("Lazy", null);
670+
return describeBuiltInComponentFrame("Lazy");
675671
case 13:
676-
return describeComponentFrame("Suspense", null);
672+
return describeBuiltInComponentFrame("Suspense");
677673
case 19:
678-
return describeComponentFrame("SuspenseList", null);
674+
return describeBuiltInComponentFrame("SuspenseList");
679675
case 0:
680676
case 15:
681677
return describeFunctionComponentFrame(fiber.type);
@@ -9211,19 +9207,19 @@ function wrapFiber(fiber) {
92119207
fiberToWrapper.set(fiber, wrapper));
92129208
return wrapper;
92139209
}
9214-
var devToolsConfig$jscomp$inline_995 = {
9210+
var devToolsConfig$jscomp$inline_994 = {
92159211
findFiberByHostInstance: function () {
92169212
throw Error("TestRenderer does not support findFiberByHostInstance()");
92179213
},
92189214
bundleType: 0,
9219-
version: "19.0.0-canary-0689007c",
9215+
version: "19.0.0-canary-51953c35",
92209216
rendererPackageName: "react-test-renderer"
92219217
};
9222-
var internals$jscomp$inline_1185 = {
9223-
bundleType: devToolsConfig$jscomp$inline_995.bundleType,
9224-
version: devToolsConfig$jscomp$inline_995.version,
9225-
rendererPackageName: devToolsConfig$jscomp$inline_995.rendererPackageName,
9226-
rendererConfig: devToolsConfig$jscomp$inline_995.rendererConfig,
9218+
var internals$jscomp$inline_1184 = {
9219+
bundleType: devToolsConfig$jscomp$inline_994.bundleType,
9220+
version: devToolsConfig$jscomp$inline_994.version,
9221+
rendererPackageName: devToolsConfig$jscomp$inline_994.rendererPackageName,
9222+
rendererConfig: devToolsConfig$jscomp$inline_994.rendererConfig,
92279223
overrideHookState: null,
92289224
overrideHookStateDeletePath: null,
92299225
overrideHookStateRenamePath: null,
@@ -9240,26 +9236,26 @@ var internals$jscomp$inline_1185 = {
92409236
return null === fiber ? null : fiber.stateNode;
92419237
},
92429238
findFiberByHostInstance:
9243-
devToolsConfig$jscomp$inline_995.findFiberByHostInstance ||
9239+
devToolsConfig$jscomp$inline_994.findFiberByHostInstance ||
92449240
emptyFindFiberByHostInstance,
92459241
findHostInstancesForRefresh: null,
92469242
scheduleRefresh: null,
92479243
scheduleRoot: null,
92489244
setRefreshHandler: null,
92499245
getCurrentFiber: null,
9250-
reconcilerVersion: "19.0.0-canary-0689007c"
9246+
reconcilerVersion: "19.0.0-canary-51953c35"
92519247
};
92529248
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
9253-
var hook$jscomp$inline_1186 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
9249+
var hook$jscomp$inline_1185 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
92549250
if (
9255-
!hook$jscomp$inline_1186.isDisabled &&
9256-
hook$jscomp$inline_1186.supportsFiber
9251+
!hook$jscomp$inline_1185.isDisabled &&
9252+
hook$jscomp$inline_1185.supportsFiber
92579253
)
92589254
try {
9259-
(rendererID = hook$jscomp$inline_1186.inject(
9260-
internals$jscomp$inline_1185
9255+
(rendererID = hook$jscomp$inline_1185.inject(
9256+
internals$jscomp$inline_1184
92619257
)),
9262-
(injectedHook = hook$jscomp$inline_1186);
9258+
(injectedHook = hook$jscomp$inline_1185);
92639259
} catch (err) {}
92649260
}
92659261
exports._Scheduler = Scheduler;

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

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

1313
"use strict";
@@ -742,28 +742,24 @@ function is(x, y) {
742742
return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
743743
}
744744
var objectIs = "function" === typeof Object.is ? Object.is : is;
745-
function describeComponentFrame(name, ownerName) {
746-
var sourceInfo = "";
747-
ownerName && (sourceInfo = " (created by " + ownerName + ")");
748-
return "\n in " + (name || "Unknown") + sourceInfo;
745+
function describeBuiltInComponentFrame(name) {
746+
return "\n in " + (name || "Unknown");
749747
}
750748
function describeFunctionComponentFrame(fn) {
751-
return fn
752-
? describeComponentFrame(fn.displayName || fn.name || null, null)
753-
: "";
749+
return fn ? "\n in " + (fn.displayName || fn.name || "Unknown") : "";
754750
}
755751
function describeFiber(fiber) {
756752
switch (fiber.tag) {
757753
case 26:
758754
case 27:
759755
case 5:
760-
return describeComponentFrame(fiber.type, null);
756+
return describeBuiltInComponentFrame(fiber.type);
761757
case 16:
762-
return describeComponentFrame("Lazy", null);
758+
return describeBuiltInComponentFrame("Lazy");
763759
case 13:
764-
return describeComponentFrame("Suspense", null);
760+
return describeBuiltInComponentFrame("Suspense");
765761
case 19:
766-
return describeComponentFrame("SuspenseList", null);
762+
return describeBuiltInComponentFrame("SuspenseList");
767763
case 0:
768764
case 15:
769765
return describeFunctionComponentFrame(fiber.type);
@@ -9827,12 +9823,12 @@ function wrapFiber(fiber) {
98279823
fiberToWrapper.set(fiber, wrapper));
98289824
return wrapper;
98299825
}
9830-
var devToolsConfig$jscomp$inline_1079 = {
9826+
var devToolsConfig$jscomp$inline_1078 = {
98319827
findFiberByHostInstance: function () {
98329828
throw Error("TestRenderer does not support findFiberByHostInstance()");
98339829
},
98349830
bundleType: 0,
9835-
version: "19.0.0-canary-3aa3c53d",
9831+
version: "19.0.0-canary-c0ff0c26",
98369832
rendererPackageName: "react-test-renderer"
98379833
};
98389834
(function (internals) {
@@ -9849,10 +9845,10 @@ var devToolsConfig$jscomp$inline_1079 = {
98499845
} catch (err) {}
98509846
return hook.checkDCE ? !0 : !1;
98519847
})({
9852-
bundleType: devToolsConfig$jscomp$inline_1079.bundleType,
9853-
version: devToolsConfig$jscomp$inline_1079.version,
9854-
rendererPackageName: devToolsConfig$jscomp$inline_1079.rendererPackageName,
9855-
rendererConfig: devToolsConfig$jscomp$inline_1079.rendererConfig,
9848+
bundleType: devToolsConfig$jscomp$inline_1078.bundleType,
9849+
version: devToolsConfig$jscomp$inline_1078.version,
9850+
rendererPackageName: devToolsConfig$jscomp$inline_1078.rendererPackageName,
9851+
rendererConfig: devToolsConfig$jscomp$inline_1078.rendererConfig,
98569852
overrideHookState: null,
98579853
overrideHookStateDeletePath: null,
98589854
overrideHookStateRenamePath: null,
@@ -9869,14 +9865,14 @@ var devToolsConfig$jscomp$inline_1079 = {
98699865
return null === fiber ? null : fiber.stateNode;
98709866
},
98719867
findFiberByHostInstance:
9872-
devToolsConfig$jscomp$inline_1079.findFiberByHostInstance ||
9868+
devToolsConfig$jscomp$inline_1078.findFiberByHostInstance ||
98739869
emptyFindFiberByHostInstance,
98749870
findHostInstancesForRefresh: null,
98759871
scheduleRefresh: null,
98769872
scheduleRoot: null,
98779873
setRefreshHandler: null,
98789874
getCurrentFiber: null,
9879-
reconcilerVersion: "19.0.0-canary-3aa3c53d"
9875+
reconcilerVersion: "19.0.0-canary-c0ff0c26"
98809876
});
98819877
exports._Scheduler = Scheduler;
98829878
exports.act = act;

0 commit comments

Comments
 (0)