[Flight] Include I/O not awaited in user space (#33715)
If I/O is not awaited in user space in a "previous" path we used to just drop it on the floor. There's a few strategies we could apply here. My first commit just emits it without an await but that would mean we don't have an await stack when there's no I/O in a follow up. I went with a strategy where the "previous" I/O is used only if the "next" didn't have I/O. This may still drop I/O on the floor if there's two back to back within internals for example. It would only log the first one even though the outer await may have started earlier. It may also log deeper in the "next" path if that had user space stacks and then the outer await will appear as if it awaited after. So it's not perfect.
Sebastian Markbåge committed
Jul 7, 2025 at 10:33 UTC
0378b46e7e4c5c15ac57308e2894b6d78d5fb488
2 files changed
+393
-251
packages/react-server/src/ReactFlightServer.js
+8
-11
@@ -2061,20 +2061,17 @@ function visitAsyncNode(
2061
return null;
2062
}
2063
visited.add(node);
2064
+ let previousIONode = null;
2065
// First visit anything that blocked this sequence to start in the first place.
2066
if (node.previous !== null && node.end > request.timeOrigin) {
2066
- // We ignore the returned io nodes here because if it wasn't awaited in user space,
2067
- // then we don't log it. It also means that it can just have been part of a previous
2068
- // component's render.
2069
- // TODO: This means that some I/O can get lost that was still blocking the sequence.
2070
- const ioNode = visitAsyncNode(
2067
+ previousIONode = visitAsyncNode(
2068
request,
2069
task,
2070
node.previous,
2071
visited,
2072
cutOff,
2073
);
2077
- if (ioNode === undefined) {
2074
+ if (previousIONode === undefined) {
2075
// Undefined is used as a signal that we found a suitable aborted node and we don't have to find
2076
// further aborted nodes.
2077
return undefined;
@@ -2085,17 +2082,17 @@ function visitAsyncNode(
2082
return node;
2083
}
2084
case UNRESOLVED_PROMISE_NODE: {
2088
- return null;
2085
+ return previousIONode;
2086
}
2087
case PROMISE_NODE: {
2088
if (node.end <= request.timeOrigin) {
2089
// This was already resolved when we started this render. It must have been either something
2090
// that's part of a start up sequence or externally cached data. We exclude that information.
2091
// The technique for debugging the effects of uncached data on the render is to simply uncache it.
2095
- return null;
2092
+ return previousIONode;
2093
}
2094
const awaited = node.awaited;
2098
- let match = null;
2095
+ let match: void | null | PromiseNode | IONode = previousIONode;
2096
if (awaited !== null) {
2097
const ioNode = visitAsyncNode(request, task, awaited, visited, cutOff);
2098
if (ioNode === undefined) {
@@ -2143,11 +2140,11 @@ function visitAsyncNode(
2140
return match;
2141
}
2142
case UNRESOLVED_AWAIT_NODE: {
2146
- return null;
2143
+ return previousIONode;
2144
}
2145
case AWAIT_NODE: {
2146
const awaited = node.awaited;
2150
- let match = null;
2147
+ let match: void | null | PromiseNode | IONode = previousIONode;
2148
if (awaited !== null) {
2149
const ioNode = visitAsyncNode(request, task, awaited, visited, cutOff);
2150
if (ioNode === undefined) {
packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js
+385
-240
@@ -112,7 +112,8 @@ function filterStackFrame(filename, functionName) {
112
!filename.includes('node_modules') &&
113
// Filter out our own internal source code since it'll typically be in node_modules
114
(!filename.includes('/packages/') || filename.includes('/__tests__/')) &&
115
- !filename.includes('/build/')
115
+ !filename.includes('/build/') &&
116
+ !functionName.includes('internal_')
117
);
118
}
119
@@ -233,9 +234,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
234
[
235
"Object.<anonymous>",
236
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
236
- 202,
237
+ 203,
238
109,
238
- 182,
239
+ 183,
240
50,
241
],
242
],
@@ -257,9 +258,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
258
[
259
"Object.<anonymous>",
260
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
260
- 202,
261
+ 203,
262
109,
262
- 182,
263
+ 183,
264
50,
265
],
266
],
@@ -268,25 +269,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
269
[
270
"delay",
271
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
271
- 160,
272
+ 161,
273
12,
273
- 159,
274
+ 160,
275
3,
276
],
277
[
278
"getData",
279
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
279
- 184,
280
+ 185,
281
13,
281
- 183,
282
+ 184,
283
5,
284
],
285
[
286
"Component",
287
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
287
- 191,
288
+ 192,
289
26,
289
- 190,
290
+ 191,
291
5,
292
],
293
],
@@ -305,9 +306,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
306
[
307
"Object.<anonymous>",
308
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
308
- 202,
309
+ 203,
310
109,
310
- 182,
311
+ 183,
312
50,
313
],
314
],
@@ -316,17 +317,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
317
[
318
"getData",
319
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
319
- 184,
320
+ 185,
321
13,
321
- 183,
322
+ 184,
323
5,
324
],
325
[
326
"Component",
327
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
327
- 191,
328
+ 192,
329
26,
329
- 190,
330
+ 191,
331
5,
332
],
333
],
@@ -351,9 +352,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
352
[
353
"Object.<anonymous>",
354
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
354
- 202,
355
+ 203,
356
109,
356
- 182,
357
+ 183,
358
50,
359
],
360
],
@@ -362,25 +363,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
363
[
364
"delay",
365
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
365
- 160,
366
+ 161,
367
12,
367
- 159,
368
+ 160,
369
3,
370
],
371
[
372
"getData",
373
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
373
- 185,
374
+ 186,
375
21,
375
- 183,
376
+ 184,
377
5,
378
],
379
[
380
"Component",
381
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
381
- 191,
382
+ 192,
383
20,
383
- 190,
384
+ 191,
385
5,
386
],
387
],
@@ -401,9 +402,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
402
[
403
"Object.<anonymous>",
404
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
404
- 202,
405
+ 203,
406
109,
406
- 182,
407
+ 183,
408
50,
409
],
410
],
@@ -412,17 +413,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
413
[
414
"getData",
415
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
415
- 186,
416
+ 187,
417
21,
417
- 183,
418
+ 184,
419
5,
420
],
421
[
422
"Component",
423
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
423
- 191,
424
+ 192,
425
20,
425
- 190,
426
+ 191,
427
5,
428
],
429
],
@@ -442,9 +443,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
443
[
444
"Component",
445
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
445
- 193,
446
+ 194,
447
60,
447
- 190,
448
+ 191,
449
5,
450
],
451
],
@@ -466,9 +467,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
467
[
468
"Object.<anonymous>",
469
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
469
- 202,
470
+ 203,
471
109,
471
- 182,
472
+ 183,
473
50,
474
],
475
],
@@ -477,17 +478,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
478
[
479
"delay",
480
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
480
- 160,
481
+ 161,
482
12,
482
- 159,
483
+ 160,
484
3,
485
],
486
[
487
"getData",
488
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
488
- 185,
489
+ 186,
490
21,
490
- 183,
491
+ 184,
492
5,
493
],
494
],
@@ -506,9 +507,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
507
[
508
"Component",
509
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
509
- 193,
510
+ 194,
511
60,
511
- 190,
512
+ 191,
513
5,
514
],
515
],
@@ -517,9 +518,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
518
[
519
"InnerComponent",
520
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
520
- 199,
521
+ 200,
522
35,
522
- 196,
523
+ 197,
524
5,
525
],
526
],
@@ -593,9 +594,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
594
[
595
"Object.<anonymous>",
596
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
596
- 557,
597
+ 558,
598
40,
598
- 538,
599
+ 539,
600
49,
601
],
602
],
@@ -617,9 +618,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
618
[
619
"Object.<anonymous>",
620
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
620
- 557,
621
+ 558,
622
40,
622
- 538,
623
+ 539,
624
49,
625
],
626
],
@@ -628,25 +629,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
629
[
630
"delay",
631
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
631
- 160,
632
+ 161,
633
12,
633
- 159,
634
+ 160,
635
3,
636
],
637
[
638
"getData",
639
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
639
- 540,
640
+ 541,
641
13,
641
- 539,
642
+ 540,
643
5,
644
],
645
[
646
"Component",
647
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
647
- 545,
648
+ 546,
649
36,
649
- 544,
650
+ 545,
651
5,
652
],
653
],
@@ -665,9 +666,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
666
[
667
"Object.<anonymous>",
668
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
668
- 557,
669
+ 558,
670
40,
670
- 538,
671
+ 539,
672
49,
673
],
674
],
@@ -676,17 +677,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
677
[
678
"getData",
679
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
679
- 540,
680
+ 541,
681
13,
681
- 539,
682
+ 540,
683
5,
684
],
685
[
686
"Component",
687
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
687
- 545,
688
+ 546,
689
36,
689
- 544,
690
+ 545,
691
5,
692
],
693
],
@@ -706,9 +707,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
707
[
708
"Component",
709
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
709
- 547,
710
+ 548,
711
60,
711
- 544,
712
+ 545,
713
5,
714
],
715
],
@@ -727,9 +728,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
728
[
729
"Object.<anonymous>",
730
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
730
- 557,
731
+ 558,
732
40,
732
- 538,
733
+ 539,
734
49,
735
],
736
],
@@ -738,25 +739,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
739
[
740
"delay",
741
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
741
- 160,
742
+ 161,
743
12,
743
- 159,
744
+ 160,
745
3,
746
],
747
[
748
"getData",
749
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
749
- 540,
750
+ 541,
751
13,
751
- 539,
752
+ 540,
753
5,
754
],
755
[
756
"Component",
757
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
757
- 546,
758
+ 547,
759
22,
759
- 544,
760
+ 545,
761
5,
762
],
763
],
@@ -775,9 +776,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
776
[
777
"Component",
778
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
778
- 547,
779
+ 548,
780
60,
780
- 544,
781
+ 545,
782
5,
783
],
784
],
@@ -786,9 +787,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
787
[
788
"InnerComponent",
789
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
789
- 553,
790
+ 554,
791
40,
791
- 550,
792
+ 551,
793
5,
794
],
795
],
@@ -851,9 +852,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
852
[
853
"Object.<anonymous>",
854
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
854
- 820,
855
+ 821,
856
109,
856
- 807,
857
+ 808,
858
67,
859
],
860
],
@@ -872,9 +873,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
873
[
874
"Object.<anonymous>",
875
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
875
- 820,
876
+ 821,
877
109,
877
- 807,
878
+ 808,
879
67,
880
],
881
],
@@ -883,9 +884,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
884
[
885
"Component",
886
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
886
- 810,
887
+ 811,
888
7,
888
- 808,
889
+ 809,
890
5,
891
],
892
],
@@ -947,9 +948,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
948
[
949
"Object.<anonymous>",
950
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
950
- 916,
951
+ 917,
952
109,
952
- 907,
953
+ 908,
954
94,
955
],
956
],
@@ -1020,9 +1021,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1021
[
1022
"Object.<anonymous>",
1023
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1023
- 989,
1024
+ 990,
1025
109,
1025
- 965,
1026
+ 966,
1027
50,
1028
],
1029
],
@@ -1104,9 +1105,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1105
[
1106
"Object.<anonymous>",
1107
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1107
- 1073,
1108
+ 1074,
1109
109,
1109
- 1056,
1110
+ 1057,
1111
63,
1112
],
1113
],
@@ -1123,17 +1124,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1124
[
1125
"fetchThirdParty",
1126
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1126
- 167,
1127
+ 168,
1128
40,
1128
- 165,
1129
+ 166,
1130
3,
1131
],
1132
[
1133
"Component",
1134
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1134
- 1069,
1135
+ 1070,
1136
24,
1136
- 1068,
1137
+ 1069,
1138
5,
1139
],
1140
],
@@ -1155,17 +1156,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1156
[
1157
"fetchThirdParty",
1158
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1158
- 167,
1159
+ 168,
1160
40,
1160
- 165,
1161
+ 166,
1162
3,
1163
],
1164
[
1165
"Component",
1166
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1166
- 1069,
1167
+ 1070,
1168
24,
1168
- 1068,
1169
+ 1069,
1170
5,
1171
],
1172
],
@@ -1174,25 +1175,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1175
[
1176
"delay",
1177
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1177
- 160,
1178
+ 161,
1179
12,
1179
- 159,
1180
+ 160,
1181
3,
1182
],
1183
[
1184
"getData",
1185
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1185
- 1058,
1186
+ 1059,
1187
13,
1187
- 1057,
1188
+ 1058,
1189
5,
1190
],
1191
[
1192
"ThirdPartyComponent",
1193
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1193
- 1064,
1194
+ 1065,
1195
24,
1195
- 1063,
1196
+ 1064,
1197
5,
1198
],
1199
],
@@ -1211,17 +1212,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1212
[
1213
"fetchThirdParty",
1214
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1214
- 167,
1215
+ 168,
1216
40,
1216
- 165,
1217
+ 166,
1218
3,
1219
],
1220
[
1221
"Component",
1222
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1222
- 1069,
1223
+ 1070,
1224
24,
1224
- 1068,
1225
+ 1069,
1226
5,
1227
],
1228
],
@@ -1230,17 +1231,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1231
[
1232
"getData",
1233
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1233
- 1058,
1234
+ 1059,
1235
13,
1235
- 1057,
1236
+ 1058,
1237
5,
1238
],
1239
[
1240
"ThirdPartyComponent",
1241
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1241
- 1064,
1242
+ 1065,
1243
24,
1243
- 1063,
1244
+ 1064,
1245
5,
1246
],
1247
],
@@ -1265,17 +1266,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1266
[
1267
"fetchThirdParty",
1268
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1268
- 167,
1269
+ 168,
1270
40,
1270
- 165,
1271
+ 166,
1272
3,
1273
],
1274
[
1275
"Component",
1276
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1276
- 1069,
1277
+ 1070,
1278
24,
1278
- 1068,
1279
+ 1069,
1280
5,
1281
],
1282
],
@@ -1284,25 +1285,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1285
[
1286
"delay",
1287
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1287
- 160,
1288
+ 161,
1289
12,
1289
- 159,
1290
+ 160,
1291
3,
1292
],
1293
[
1294
"getData",
1295
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1295
- 1059,
1296
+ 1060,
1297
13,
1297
- 1057,
1298
+ 1058,
1299
5,
1300
],
1301
[
1302
"ThirdPartyComponent",
1303
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1303
- 1064,
1304
+ 1065,
1305
18,
1305
- 1063,
1306
+ 1064,
1307
5,
1308
],
1309
],
@@ -1321,17 +1322,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1322
[
1323
"fetchThirdParty",
1324
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1324
- 167,
1325
+ 168,
1326
40,
1326
- 165,
1327
+ 166,
1328
3,
1329
],
1330
[
1331
"Component",
1332
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1332
- 1069,
1333
+ 1070,
1334
24,
1334
- 1068,
1335
+ 1069,
1336
5,
1337
],
1338
],
@@ -1340,17 +1341,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1341
[
1342
"getData",
1343
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1343
- 1059,
1344
+ 1060,
1345
13,
1345
- 1057,
1346
+ 1058,
1347
5,
1348
],
1349
[
1350
"ThirdPartyComponent",
1351
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1351
- 1064,
1352
+ 1065,
1353
18,
1353
- 1063,
1354
+ 1064,
1355
5,
1356
],
1357
],
@@ -1425,9 +1426,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1426
[
1427
"Object.<anonymous>",
1428
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1428
- 1389,
1429
+ 1390,
1430
40,
1430
- 1372,
1431
+ 1373,
1432
62,
1433
],
1434
],
@@ -1449,9 +1450,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1450
[
1451
"Object.<anonymous>",
1452
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1452
- 1389,
1453
+ 1390,
1454
40,
1454
- 1372,
1455
+ 1373,
1456
62,
1457
],
1458
],
@@ -1460,25 +1461,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1461
[
1462
"delay",
1463
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1463
- 160,
1464
+ 161,
1465
12,
1465
- 159,
1466
+ 160,
1467
3,
1468
],
1469
[
1470
"getData",
1471
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1471
- 1374,
1472
+ 1375,
1473
13,
1473
- 1373,
1474
+ 1374,
1475
25,
1476
],
1477
[
1478
"Component",
1479
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1479
- 1384,
1480
+ 1385,
1481
13,
1481
- 1383,
1482
+ 1384,
1483
5,
1484
],
1485
],
@@ -1497,9 +1498,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1498
[
1499
"Object.<anonymous>",
1500
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1500
- 1389,
1501
+ 1390,
1502
40,
1502
- 1372,
1503
+ 1373,
1504
62,
1505
],
1506
],
@@ -1508,17 +1509,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1509
[
1510
"getData",
1511
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1511
- 1374,
1512
+ 1375,
1513
13,
1513
- 1373,
1514
+ 1374,
1515
25,
1516
],
1517
[
1518
"Component",
1519
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1519
- 1384,
1520
+ 1385,
1521
13,
1521
- 1383,
1522
+ 1384,
1523
5,
1524
],
1525
],
@@ -1538,9 +1539,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1539
[
1540
"Component",
1541
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1541
- 1385,
1542
+ 1386,
1543
60,
1543
- 1383,
1544
+ 1384,
1545
5,
1546
],
1547
],
@@ -1562,9 +1563,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1563
[
1564
"Object.<anonymous>",
1565
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1565
- 1389,
1566
+ 1390,
1567
40,
1567
- 1372,
1568
+ 1373,
1569
62,
1570
],
1571
],
@@ -1573,25 +1574,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1574
[
1575
"delay",
1576
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1576
- 160,
1577
+ 161,
1578
12,
1578
- 159,
1579
+ 160,
1580
3,
1581
],
1582
[
1583
"getData",
1584
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1584
- 1374,
1585
+ 1375,
1586
13,
1586
- 1373,
1587
+ 1374,
1588
25,
1589
],
1590
[
1591
"Component",
1592
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1592
- 1384,
1593
+ 1385,
1594
13,
1594
- 1383,
1595
+ 1384,
1596
5,
1597
],
1598
],
@@ -1610,9 +1611,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1611
[
1612
"Component",
1613
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1613
- 1385,
1614
+ 1386,
1615
60,
1615
- 1383,
1616
+ 1384,
1617
5,
1618
],
1619
],
@@ -1621,9 +1622,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1622
[
1623
"Child",
1624
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1624
- 1379,
1625
+ 1380,
1626
28,
1626
- 1378,
1627
+ 1379,
1628
5,
1629
],
1630
],
@@ -1694,9 +1695,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1695
[
1696
"Object.<anonymous>",
1697
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1697
- 1658,
1698
+ 1659,
1699
40,
1699
- 1642,
1700
+ 1643,
1701
57,
1702
],
1703
],
@@ -1718,9 +1719,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1719
[
1720
"Object.<anonymous>",
1721
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1721
- 1658,
1722
+ 1659,
1723
40,
1723
- 1642,
1724
+ 1643,
1725
57,
1726
],
1727
],
@@ -1729,25 +1730,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1730
[
1731
"delay",
1732
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1732
- 160,
1733
+ 161,
1734
12,
1734
- 159,
1735
+ 160,
1736
3,
1737
],
1738
[
1739
"getData",
1740
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1740
- 1644,
1741
+ 1645,
1742
13,
1742
- 1643,
1743
+ 1644,
1744
25,
1745
],
1746
[
1747
"Component",
1748
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1748
- 1653,
1749
+ 1654,
1750
23,
1750
- 1652,
1751
+ 1653,
1752
5,
1753
],
1754
],
@@ -1766,9 +1767,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1767
[
1768
"Object.<anonymous>",
1769
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1769
- 1658,
1770
+ 1659,
1771
40,
1771
- 1642,
1772
+ 1643,
1773
57,
1774
],
1775
],
@@ -1777,17 +1778,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
1778
[
1779
"getData",
1780
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1780
- 1644,
1781
+ 1645,
1782
13,
1782
- 1643,
1783
+ 1644,
1784
25,
1785
],
1786
[
1787
"Component",
1788
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1788
- 1653,
1789
+ 1654,
1790
23,
1790
- 1652,
1791
+ 1653,
1792
5,
1793
],
1794
],
@@ -1807,9 +1808,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1808
[
1809
"Component",
1810
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1810
- 1654,
1811
+ 1655,
1812
60,
1812
- 1652,
1813
+ 1653,
1814
5,
1815
],
1816
],
@@ -1828,9 +1829,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1829
[
1830
"Object.<anonymous>",
1831
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1831
- 1658,
1832
+ 1659,
1833
40,
1833
- 1642,
1834
+ 1643,
1835
57,
1836
],
1837
],
@@ -1839,25 +1840,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1840
[
1841
"delay",
1842
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1842
- 160,
1843
+ 161,
1844
12,
1844
- 159,
1845
+ 160,
1846
3,
1847
],
1848
[
1849
"getData",
1850
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1850
- 1644,
1851
+ 1645,
1852
13,
1852
- 1643,
1853
+ 1644,
1854
25,
1855
],
1856
[
1857
"Component",
1858
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1858
- 1653,
1859
+ 1654,
1860
23,
1860
- 1652,
1861
+ 1653,
1862
5,
1863
],
1864
],
@@ -1936,9 +1937,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1937
[
1938
"Object.<anonymous>",
1939
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1939
- 1900,
1940
+ 1901,
1941
40,
1941
- 1882,
1942
+ 1883,
1943
80,
1944
],
1945
],
@@ -1960,9 +1961,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
1961
[
1962
"Object.<anonymous>",
1963
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1963
- 1900,
1964
+ 1901,
1965
40,
1965
- 1882,
1966
+ 1883,
1967
80,
1968
],
1969
],
@@ -1971,25 +1972,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
1972
[
1973
"delay",
1974
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1974
- 160,
1975
+ 161,
1976
12,
1976
- 159,
1977
+ 160,
1978
3,
1979
],
1980
[
1981
"delayTrice",
1982
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1982
- 1890,
1983
+ 1891,
1984
13,
1984
- 1888,
1985
+ 1889,
1986
5,
1987
],
1988
[
1989
"Bar",
1990
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
1990
- 1895,
1991
+ 1896,
1992
13,
1992
- 1894,
1993
+ 1895,
1994
5,
1995
],
1996
],
@@ -2008,9 +2009,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2009
[
2010
"Object.<anonymous>",
2011
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2011
- 1900,
2012
+ 1901,
2013
40,
2013
- 1882,
2014
+ 1883,
2015
80,
2016
],
2017
],
@@ -2019,17 +2020,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
2020
[
2021
"delayTrice",
2022
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2022
- 1890,
2023
+ 1891,
2024
13,
2024
- 1888,
2025
+ 1889,
2026
5,
2027
],
2028
[
2029
"Bar",
2030
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2030
- 1895,
2031
+ 1896,
2032
13,
2032
- 1894,
2033
+ 1895,
2034
5,
2035
],
2036
],
@@ -2051,9 +2052,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2052
[
2053
"Object.<anonymous>",
2054
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2054
- 1900,
2055
+ 1901,
2056
40,
2056
- 1882,
2057
+ 1883,
2058
80,
2059
],
2060
],
@@ -2062,33 +2063,33 @@ describe('ReactFlightAsyncDebugInfo', () => {
2063
[
2064
"delay",
2065
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2065
- 160,
2066
+ 161,
2067
12,
2067
- 159,
2068
+ 160,
2069
3,
2070
],
2071
[
2072
"delayTwice",
2073
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2073
- 1884,
2074
+ 1885,
2075
13,
2075
- 1883,
2076
+ 1884,
2077
5,
2078
],
2079
[
2080
"delayTrice",
2081
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2081
- 1889,
2082
+ 1890,
2083
15,
2083
- 1888,
2084
+ 1889,
2085
5,
2086
],
2087
[
2088
"Bar",
2089
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2089
- 1895,
2090
+ 1896,
2091
13,
2091
- 1894,
2092
+ 1895,
2093
5,
2094
],
2095
],
@@ -2107,9 +2108,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2108
[
2109
"Object.<anonymous>",
2110
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2110
- 1900,
2111
+ 1901,
2112
40,
2112
- 1882,
2113
+ 1883,
2114
80,
2115
],
2116
],
@@ -2118,25 +2119,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
2119
[
2120
"delayTwice",
2121
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2121
- 1884,
2122
+ 1885,
2123
13,
2123
- 1883,
2124
+ 1884,
2125
5,
2126
],
2127
[
2128
"delayTrice",
2129
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2129
- 1889,
2130
+ 1890,
2131
15,
2131
- 1888,
2132
+ 1889,
2133
5,
2134
],
2135
[
2136
"Bar",
2137
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2137
- 1895,
2138
+ 1896,
2139
13,
2139
- 1894,
2140
+ 1895,
2141
5,
2142
],
2143
],
@@ -2158,9 +2159,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2159
[
2160
"Object.<anonymous>",
2161
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2161
- 1900,
2162
+ 1901,
2163
40,
2163
- 1882,
2164
+ 1883,
2165
80,
2166
],
2167
],
@@ -2169,17 +2170,17 @@ describe('ReactFlightAsyncDebugInfo', () => {
2170
[
2171
"delay",
2172
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2172
- 160,
2173
+ 161,
2174
12,
2174
- 159,
2175
+ 160,
2176
3,
2177
],
2178
[
2179
"delayTwice",
2180
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2180
- 1885,
2181
+ 1886,
2182
13,
2182
- 1883,
2183
+ 1884,
2184
5,
2185
],
2186
],
@@ -2198,9 +2199,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2199
[
2200
"Object.<anonymous>",
2201
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2201
- 1900,
2202
+ 1901,
2203
40,
2203
- 1882,
2204
+ 1883,
2205
80,
2206
],
2207
],
@@ -2209,9 +2210,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2210
[
2211
"delayTwice",
2212
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2212
- 1885,
2213
+ 1886,
2214
13,
2214
- 1883,
2215
+ 1884,
2216
5,
2217
],
2218
],
@@ -2272,9 +2273,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2273
[
2274
"Object.<anonymous>",
2275
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2275
- 2241,
2276
+ 2242,
2277
109,
2277
- 2230,
2278
+ 2231,
2279
58,
2280
],
2281
],
@@ -2296,9 +2297,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2297
[
2298
"Object.<anonymous>",
2299
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2299
- 2241,
2300
+ 2242,
2301
109,
2301
- 2230,
2302
+ 2231,
2303
58,
2304
],
2305
],
@@ -2307,25 +2308,25 @@ describe('ReactFlightAsyncDebugInfo', () => {
2308
[
2309
"delay",
2310
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2310
- 160,
2311
+ 161,
2312
12,
2312
- 159,
2313
+ 160,
2314
3,
2315
],
2316
[
2317
"getData",
2318
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2318
- 2232,
2319
+ 2233,
2320
14,
2320
- 2231,
2321
+ 2232,
2322
5,
2323
],
2324
[
2325
"Component",
2326
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2326
- 2238,
2327
+ 2239,
2328
20,
2328
- 2237,
2329
+ 2238,
2330
5,
2331
],
2332
],
@@ -2344,9 +2345,9 @@ describe('ReactFlightAsyncDebugInfo', () => {
2345
[
2346
"Object.<anonymous>",
2347
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2347
- 2241,
2348
+ 2242,
2349
109,
2349
- 2230,
2350
+ 2231,
2351
58,
2352
],
2353
],
@@ -2355,17 +2356,161 @@ describe('ReactFlightAsyncDebugInfo', () => {
2356
[
2357
"getData",
2358
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2358
- 2232,
2359
+ 2233,
2360
23,
2360
- 2231,
2361
+ 2232,
2362
5,
2363
],
2364
[
2365
"Component",
2366
"/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2367
+ 2239,
2368
+ 20,
2369
2238,
2370
+ 5,
2371
+ ],
2372
+ ],
2373
+ },
2374
+ {
2375
+ "time": 0,
2376
+ },
2377
+ {
2378
+ "time": 0,
2379
+ },
2380
+ ]
2381
+ `);
2382
+ }
2383
+ });
2384
+
2385
+ it('can track IO that is not awaited in user space', async () => {
2386
+ function internal_API(text) {
2387
+ return delay(1).then(async () => {
2388
+ return text.toUpperCase();
2389
+ });
2390
+ }
2391
+
2392
+ async function Component({text, promise}) {
2393
+ return await internal_API('hi, seb');
2394
+ }
2395
+
2396
+ const stream = ReactServerDOMServer.renderToPipeableStream(
2397
+ <Component />,
2398
+ {},
2399
+ {
2400
+ filterStackFrame,
2401
+ },
2402
+ );
2403
+
2404
+ const readable = new Stream.PassThrough(streamOptions);
2405
+
2406
+ const result = ReactServerDOMClient.createFromNodeStream(readable, {
2407
+ moduleMap: {},
2408
+ moduleLoading: {},
2409
+ });
2410
+ stream.pipe(readable);
2411
+
2412
+ expect(await result).toBe('HI, SEB');
2413
+
2414
+ await finishLoadingStream(readable);
2415
+ if (
2416
+ __DEV__ &&
2417
+ gate(
2418
+ flags =>
2419
+ flags.enableComponentPerformanceTrack && flags.enableAsyncDebugInfo,
2420
+ )
2421
+ ) {
2422
+ expect(getDebugInfo(result)).toMatchInlineSnapshot(`
2423
+ [
2424
+ {
2425
+ "time": 0,
2426
+ },
2427
+ {
2428
+ "env": "Server",
2429
+ "key": null,
2430
+ "name": "Component",
2431
+ "props": {},
2432
+ "stack": [
2433
+ [
2434
+ "Object.<anonymous>",
2435
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2436
+ 2397,
2437
+ 40,
2438
+ 2385,
2439
+ 56,
2440
+ ],
2441
+ ],
2442
+ },
2443
+ {
2444
+ "time": 0,
2445
+ },
2446
+ {
2447
+ "awaited": {
2448
+ "end": 0,
2449
+ "env": "Server",
2450
+ "name": "delay",
2451
+ "owner": {
2452
+ "env": "Server",
2453
+ "key": null,
2454
+ "name": "Component",
2455
+ "props": {},
2456
+ "stack": [
2457
+ [
2458
+ "Object.<anonymous>",
2459
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2460
+ 2397,
2461
+ 40,
2462
+ 2385,
2463
+ 56,
2464
+ ],
2465
+ ],
2466
+ },
2467
+ "stack": [
2468
+ [
2469
+ "delay",
2470
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2471
+ 161,
2472
+ 12,
2473
+ 160,
2474
+ 3,
2475
+ ],
2476
+ [
2477
+ "Component",
2478
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2479
+ 2393,
2480
+ 20,
2481
+ 2392,
2482
+ 5,
2483
+ ],
2484
+ ],
2485
+ "start": 0,
2486
+ "value": {
2487
+ "value": "HI, SEB",
2488
+ },
2489
+ },
2490
+ "env": "Server",
2491
+ "owner": {
2492
+ "env": "Server",
2493
+ "key": null,
2494
+ "name": "Component",
2495
+ "props": {},
2496
+ "stack": [
2497
+ [
2498
+ "Object.<anonymous>",
2499
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2500
+ 2397,
2501
+ 40,
2502
+ 2385,
2503
+ 56,
2504
+ ],
2505
+ ],
2506
+ },
2507
+ "stack": [
2508
+ [
2509
+ "Component",
2510
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2511
+ 2393,
2512
20,
2368
- 2237,
2513
+ 2392,
2514
5,
2515
],
2516
],