Skip to content

Commit 6eddd13

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 f33a6b6.
1 parent aecaccf commit 6eddd13

File tree

13 files changed

+361
-437
lines changed

13 files changed

+361
-437
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<<98fc293dc2ddd5bd7ffa9ec7eb7ac707>>
10+
* @generated SignedSource<<fa29b2fc6de1e6452849c40ebd890ad7>>
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

@@ -26367,7 +26357,7 @@ if (__DEV__) {
2636726357
"named imports.";
2636826358
}
2636926359

26370-
var ownerName = owner ? getComponentNameFromFiber(owner) : null;
26360+
var ownerName = owner ? getComponentNameFromOwner(owner) : null;
2637126361

2637226362
if (ownerName) {
2637326363
info += "\n\nCheck the render method of `" + ownerName + "`.";
@@ -26630,7 +26620,7 @@ if (__DEV__) {
2663026620
return root;
2663126621
}
2663226622

26633-
var ReactVersion = "19.0.0-canary-fbd6543d";
26623+
var ReactVersion = "19.0.0-canary-2f991a8a";
2663426624

2663526625
/*
2663626626
* The `'' + value` pattern (used in perf-sensitive code) throws for Symbol

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<<06b7bf08ce800f028055b90ac4c262ac>>
10+
* @generated SignedSource<<c280d92632a452d04a57733b09d6735d>>
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);
@@ -9153,19 +9149,19 @@ function wrapFiber(fiber) {
91539149
fiberToWrapper.set(fiber, wrapper));
91549150
return wrapper;
91559151
}
9156-
var devToolsConfig$jscomp$inline_995 = {
9152+
var devToolsConfig$jscomp$inline_994 = {
91579153
findFiberByHostInstance: function () {
91589154
throw Error("TestRenderer does not support findFiberByHostInstance()");
91599155
},
91609156
bundleType: 0,
9161-
version: "19.0.0-canary-6296ea1f",
9157+
version: "19.0.0-canary-f92daaf1",
91629158
rendererPackageName: "react-test-renderer"
91639159
};
9164-
var internals$jscomp$inline_1215 = {
9165-
bundleType: devToolsConfig$jscomp$inline_995.bundleType,
9166-
version: devToolsConfig$jscomp$inline_995.version,
9167-
rendererPackageName: devToolsConfig$jscomp$inline_995.rendererPackageName,
9168-
rendererConfig: devToolsConfig$jscomp$inline_995.rendererConfig,
9160+
var internals$jscomp$inline_1214 = {
9161+
bundleType: devToolsConfig$jscomp$inline_994.bundleType,
9162+
version: devToolsConfig$jscomp$inline_994.version,
9163+
rendererPackageName: devToolsConfig$jscomp$inline_994.rendererPackageName,
9164+
rendererConfig: devToolsConfig$jscomp$inline_994.rendererConfig,
91699165
overrideHookState: null,
91709166
overrideHookStateDeletePath: null,
91719167
overrideHookStateRenamePath: null,
@@ -9182,26 +9178,26 @@ var internals$jscomp$inline_1215 = {
91829178
return null === fiber ? null : fiber.stateNode;
91839179
},
91849180
findFiberByHostInstance:
9185-
devToolsConfig$jscomp$inline_995.findFiberByHostInstance ||
9181+
devToolsConfig$jscomp$inline_994.findFiberByHostInstance ||
91869182
emptyFindFiberByHostInstance,
91879183
findHostInstancesForRefresh: null,
91889184
scheduleRefresh: null,
91899185
scheduleRoot: null,
91909186
setRefreshHandler: null,
91919187
getCurrentFiber: null,
9192-
reconcilerVersion: "19.0.0-canary-6296ea1f"
9188+
reconcilerVersion: "19.0.0-canary-f92daaf1"
91939189
};
91949190
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
9195-
var hook$jscomp$inline_1216 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
9191+
var hook$jscomp$inline_1215 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
91969192
if (
9197-
!hook$jscomp$inline_1216.isDisabled &&
9198-
hook$jscomp$inline_1216.supportsFiber
9193+
!hook$jscomp$inline_1215.isDisabled &&
9194+
hook$jscomp$inline_1215.supportsFiber
91999195
)
92009196
try {
9201-
(rendererID = hook$jscomp$inline_1216.inject(
9202-
internals$jscomp$inline_1215
9197+
(rendererID = hook$jscomp$inline_1215.inject(
9198+
internals$jscomp$inline_1214
92039199
)),
9204-
(injectedHook = hook$jscomp$inline_1216);
9200+
(injectedHook = hook$jscomp$inline_1215);
92059201
} catch (err) {}
92069202
}
92079203
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<<4f09bf783fcfd1bedefb736ffc52c17b>>
10+
* @generated SignedSource<<74899a6d3fe92773c2f385a9916407bb>>
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);
@@ -9769,12 +9765,12 @@ function wrapFiber(fiber) {
97699765
fiberToWrapper.set(fiber, wrapper));
97709766
return wrapper;
97719767
}
9772-
var devToolsConfig$jscomp$inline_1079 = {
9768+
var devToolsConfig$jscomp$inline_1078 = {
97739769
findFiberByHostInstance: function () {
97749770
throw Error("TestRenderer does not support findFiberByHostInstance()");
97759771
},
97769772
bundleType: 0,
9777-
version: "19.0.0-canary-99936a6e",
9773+
version: "19.0.0-canary-aa699661",
97789774
rendererPackageName: "react-test-renderer"
97799775
};
97809776
(function (internals) {
@@ -9791,10 +9787,10 @@ var devToolsConfig$jscomp$inline_1079 = {
97919787
} catch (err) {}
97929788
return hook.checkDCE ? !0 : !1;
97939789
})({
9794-
bundleType: devToolsConfig$jscomp$inline_1079.bundleType,
9795-
version: devToolsConfig$jscomp$inline_1079.version,
9796-
rendererPackageName: devToolsConfig$jscomp$inline_1079.rendererPackageName,
9797-
rendererConfig: devToolsConfig$jscomp$inline_1079.rendererConfig,
9790+
bundleType: devToolsConfig$jscomp$inline_1078.bundleType,
9791+
version: devToolsConfig$jscomp$inline_1078.version,
9792+
rendererPackageName: devToolsConfig$jscomp$inline_1078.rendererPackageName,
9793+
rendererConfig: devToolsConfig$jscomp$inline_1078.rendererConfig,
97989794
overrideHookState: null,
97999795
overrideHookStateDeletePath: null,
98009796
overrideHookStateRenamePath: null,
@@ -9811,14 +9807,14 @@ var devToolsConfig$jscomp$inline_1079 = {
98119807
return null === fiber ? null : fiber.stateNode;
98129808
},
98139809
findFiberByHostInstance:
9814-
devToolsConfig$jscomp$inline_1079.findFiberByHostInstance ||
9810+
devToolsConfig$jscomp$inline_1078.findFiberByHostInstance ||
98159811
emptyFindFiberByHostInstance,
98169812
findHostInstancesForRefresh: null,
98179813
scheduleRefresh: null,
98189814
scheduleRoot: null,
98199815
setRefreshHandler: null,
98209816
getCurrentFiber: null,
9821-
reconcilerVersion: "19.0.0-canary-99936a6e"
9817+
reconcilerVersion: "19.0.0-canary-aa699661"
98229818
});
98239819
exports._Scheduler = Scheduler;
98249820
exports.act = act;

0 commit comments

Comments
 (0)