609
eventType: null | string,
610
eventIsRepeat: boolean,
611
isSpawnedUpdate: boolean,
612
+ isPingedUpdate: boolean,
613
renderStartTime: number,
614
lanes: Lanes,
615
debugTask: null | ConsoleTask, // DEV-only
659
// $FlowFixMe[method-unbinding]
660
console.timeStamp.bind(
661
console,
661
- isSpawnedUpdate
662
- ? 'Cascading Update'
663
- : renderStartTime - updateTime > 5
664
- ? 'Update Blocked'
665
- : 'Update',
662
+ isPingedUpdate
663
+ ? 'Promise Resolved'
664
+ : isSpawnedUpdate
665
+ ? 'Cascading Update'
666
+ : renderStartTime - updateTime > 5
667
+ ? 'Update Blocked'
668
+ : 'Update',
669
updateTime,
670
renderStartTime,
671
currentTrack,
675
);
676
} else {
677
console.timeStamp(
675
- isSpawnedUpdate
676
- ? 'Cascading Update'
677
- : renderStartTime - updateTime > 5
678
- ? 'Update Blocked'
679
- : 'Update',
678
+ isPingedUpdate
679
+ ? 'Promise Resolved'
680
+ : isSpawnedUpdate
681
+ ? 'Cascading Update'
682
+ : renderStartTime - updateTime > 5
683
+ ? 'Update Blocked'
684
+ : 'Update',
685
updateTime,
686
renderStartTime,
687
currentTrack,
699
eventTime: number,
700
eventType: null | string,
701
eventIsRepeat: boolean,
702
+ isPingedUpdate: boolean,
703
renderStartTime: number,
704
debugTask: null | ConsoleTask, // DEV-only
705
): void {
769
// $FlowFixMe[method-unbinding]
770
console.timeStamp.bind(
771
console,
766
- renderStartTime - updateTime > 5 ? 'Update Blocked' : 'Update',
772
+ isPingedUpdate
773
+ ? 'Promise Resolved'
774
+ : renderStartTime - updateTime > 5
775
+ ? 'Update Blocked'
776
+ : 'Update',
777
updateTime,
778
renderStartTime,
779
currentTrack,
783
);
784
} else {
785
console.timeStamp(
776
- renderStartTime - updateTime > 5 ? 'Update Blocked' : 'Update',
786
+ isPingedUpdate
787
+ ? 'Promise Resolved'
788
+ : renderStartTime - updateTime > 5
789
+ ? 'Update Blocked'
790
+ : 'Update',
791
updateTime,
792
renderStartTime,
793
currentTrack,
803
startTime: number,
804
endTime: number,
805
lanes: Lanes,
806
+ debugTask: null | ConsoleTask,
807
): void {
808
if (supportsUserTiming) {
809
+ if (endTime <= startTime) {
810
+ return;
811
+ }
812
const color = includesOnlyHydrationOrOffscreenLanes(lanes)
813
? 'tertiary-dark'
814
: 'primary-dark';
797
- console.timeStamp(
798
- includesOnlyOffscreenLanes(lanes)
799
- ? 'Prepared'
800
- : includesOnlyHydrationLanes(lanes)
801
- ? 'Hydrated'
802
- : 'Render',
803
- startTime,
804
- endTime,
805
- currentTrack,
806
- LANES_TRACK_GROUP,
807
- color,
808
- );
815
+ const label = includesOnlyOffscreenLanes(lanes)
816
+ ? 'Prepared'
817
+ : includesOnlyHydrationLanes(lanes)
818
+ ? 'Hydrated'
819
+ : 'Render';
820
+ if (__DEV__ && debugTask) {
821
+ debugTask.run(
822
+ // $FlowFixMe[method-unbinding]
823
+ console.timeStamp.bind(
824
+ console,
825
+ label,
826
+ startTime,
827
+ endTime,
828
+ currentTrack,
829
+ LANES_TRACK_GROUP,
830
+ color,
831
+ ),
832
+ );
833
+ } else {
834
+ console.timeStamp(
835
+ label,
836
+ startTime,
837
+ endTime,
838
+ currentTrack,
839
+ LANES_TRACK_GROUP,
840
+ color,
841
+ );
842
+ }
843
}
844
}
845
847
startTime: number,
848
endTime: number,
849
lanes: Lanes,
850
+ debugTask: null | ConsoleTask,
851
): void {
852
if (supportsUserTiming) {
853
+ if (endTime <= startTime) {
854
+ return;
855
+ }
856
const color = includesOnlyHydrationOrOffscreenLanes(lanes)
857
? 'tertiary-dark'
858
: 'primary-dark';
821
- console.timeStamp(
822
- includesOnlyOffscreenLanes(lanes)
823
- ? 'Prewarm'
824
- : includesOnlyHydrationLanes(lanes)
825
- ? 'Interrupted Hydration'
826
- : 'Interrupted Render',
827
- startTime,
828
- endTime,
829
- currentTrack,
830
- LANES_TRACK_GROUP,
831
- color,
832
- );
859
+ const label = includesOnlyOffscreenLanes(lanes)
860
+ ? 'Prewarm'
861
+ : includesOnlyHydrationLanes(lanes)
862
+ ? 'Interrupted Hydration'
863
+ : 'Interrupted Render';
864
+ if (__DEV__ && debugTask) {
865
+ debugTask.run(
866
+ // $FlowFixMe[method-unbinding]
867
+ console.timeStamp.bind(
868
+ console,
869
+ label,
870
+ startTime,
871
+ endTime,
872
+ currentTrack,
873
+ LANES_TRACK_GROUP,
874
+ color,
875
+ ),
876
+ );
877
+ } else {
878
+ console.timeStamp(
879
+ label,
880
+ startTime,
881
+ endTime,
882
+ currentTrack,
883
+ LANES_TRACK_GROUP,
884
+ color,
885
+ );
886
+ }
887
}
888
}
889
891
startTime: number,
892
endTime: number,
893
lanes: Lanes,
894
+ debugTask: null | ConsoleTask,
895
): void {
896
if (supportsUserTiming) {
897
+ if (endTime <= startTime) {
898
+ return;
899
+ }
900
const color = includesOnlyHydrationOrOffscreenLanes(lanes)
901
? 'tertiary-dark'
902
: 'primary-dark';
845
- console.timeStamp(
846
- 'Prewarm',
847
- startTime,
848
- endTime,
849
- currentTrack,
850
- LANES_TRACK_GROUP,
851
- color,
852
- );
903
+ if (__DEV__ && debugTask) {
904
+ debugTask.run(
905
+ // $FlowFixMe[method-unbinding]
906
+ console.timeStamp.bind(
907
+ console,
908
+ 'Prewarm',
909
+ startTime,
910
+ endTime,
911
+ currentTrack,
912
+ LANES_TRACK_GROUP,
913
+ color,
914
+ ),
915
+ );
916
+ } else {
917
+ console.timeStamp(
918
+ 'Prewarm',
919
+ startTime,
920
+ endTime,
921
+ currentTrack,
922
+ LANES_TRACK_GROUP,
923
+ color,
924
+ );
925
+ }
926
}
927
}
928
930
startTime: number,
931
endTime: number,
932
lanes: Lanes,
933
+ debugTask: null | ConsoleTask,
934
): void {
935
// This means the render was suspended and cannot commit until it gets unblocked.
936
if (supportsUserTiming) {
937
+ if (endTime <= startTime) {
938
+ return;
939
+ }
940
const color = includesOnlyHydrationOrOffscreenLanes(lanes)
941
? 'tertiary-dark'
942
: 'primary-dark';
866
- console.timeStamp(
867
- 'Suspended',
868
- startTime,
869
- endTime,
870
- currentTrack,
871
- LANES_TRACK_GROUP,
872
- color,
873
- );
943
+ if (__DEV__ && debugTask) {
944
+ debugTask.run(
945
+ // $FlowFixMe[method-unbinding]
946
+ console.timeStamp.bind(
947
+ console,
948
+ 'Suspended',
949
+ startTime,
950
+ endTime,
951
+ currentTrack,
952
+ LANES_TRACK_GROUP,
953
+ color,
954
+ ),
955
+ );
956
+ } else {
957
+ console.timeStamp(
958
+ 'Suspended',
959
+ startTime,
960
+ endTime,
961
+ currentTrack,
962
+ LANES_TRACK_GROUP,
963
+ color,
964
+ );
965
+ }
966
}
967
}
968
972
lanes: Lanes,
973
recoverableErrors: Array<CapturedValue<mixed>>,
974
hydrationFailed: boolean,
975
+ debugTask: null | ConsoleTask,
976
): void {
977
if (supportsUserTiming) {
978
+ if (endTime <= startTime) {
979
+ return;
980
+ }
981
if (__DEV__) {
982
const properties: Array<[string, string]> = [];
983
for (let i = 0; i < recoverableErrors.length; i++) {
993
String(error);
994
properties.push(['Recoverable Error', message]);
995
}
900
- performance.measure('Recovered', {
996
+ const options = {
997
start: startTime,
998
end: endTime,
999
detail: {
1007
properties,
1008
},
1009
},
914
- });
1010
+ };
1011
+ if (debugTask) {
1012
+ debugTask.run(
1013
+ // $FlowFixMe[method-unbinding]
1014
+ performance.measure.bind(performance, 'Recovered', options),
1015
+ );
1016
+ } else {
1017
+ performance.measure('Recovered', options);
1018
+ }
1019
} else {
1020
console.timeStamp(
1021
'Recovered',
1033
startTime: number,
1034
endTime: number,
1035
lanes: Lanes,
1036
+ debugTask: null | ConsoleTask,
1037
): void {
1038
if (supportsUserTiming) {
934
- console.timeStamp(
935
- 'Errored',
936
- startTime,
937
- endTime,
938
- currentTrack,
939
- LANES_TRACK_GROUP,
940
- 'error',
941
- );
1039
+ if (endTime <= startTime) {
1040
+ return;
1041
+ }
1042
+ if (__DEV__ && debugTask) {
1043
+ debugTask.run(
1044
+ // $FlowFixMe[method-unbinding]
1045
+ console.timeStamp.bind(
1046
+ console,
1047
+ 'Errored',
1048
+ startTime,
1049
+ endTime,
1050
+ currentTrack,
1051
+ LANES_TRACK_GROUP,
1052
+ 'error',
1053
+ ),
1054
+ );
1055
+ } else {
1056
+ console.timeStamp(
1057
+ 'Errored',
1058
+ startTime,
1059
+ endTime,
1060
+ currentTrack,
1061
+ LANES_TRACK_GROUP,
1062
+ 'error',
1063
+ );
1064
+ }
1065
}
1066
}
1067
1068
export function logInconsistentRender(
1069
startTime: number,
1070
endTime: number,
1071
+ debugTask: null | ConsoleTask,
1072
): void {
1073
if (supportsUserTiming) {
950
- console.timeStamp(
951
- 'Teared Render',
952
- startTime,
953
- endTime,
954
- currentTrack,
955
- LANES_TRACK_GROUP,
956
- 'error',
957
- );
1074
+ if (endTime <= startTime) {
1075
+ return;
1076
+ }
1077
+ if (__DEV__ && debugTask) {
1078
+ debugTask.run(
1079
+ // $FlowFixMe[method-unbinding]
1080
+ console.timeStamp.bind(
1081
+ console,
1082
+ 'Teared Render',
1083
+ startTime,
1084
+ endTime,
1085
+ currentTrack,
1086
+ LANES_TRACK_GROUP,
1087
+ 'error',
1088
+ ),
1089
+ );
1090
+ } else {
1091
+ console.timeStamp(
1092
+ 'Teared Render',
1093
+ startTime,
1094
+ endTime,
1095
+ currentTrack,
1096
+ LANES_TRACK_GROUP,
1097
+ 'error',
1098
+ );
1099
+ }
1100
}
1101
}
1102
1103
export function logSuspenseThrottlePhase(
1104
startTime: number,
1105
endTime: number,
1106
+ debugTask: null | ConsoleTask,
1107
): void {
1108
// This was inside a throttled Suspense boundary commit.
1109
if (supportsUserTiming) {
967
- console.timeStamp(
968
- 'Throttled',
969
- startTime,
970
- endTime,
971
- currentTrack,
972
- LANES_TRACK_GROUP,
973
- 'secondary-light',
974
- );
1110
+ if (endTime <= startTime) {
1111
+ return;
1112
+ }
1113
+ if (__DEV__ && debugTask) {
1114
+ debugTask.run(
1115
+ // $FlowFixMe[method-unbinding]
1116
+ console.timeStamp.bind(
1117
+ console,
1118
+ 'Throttled',
1119
+ startTime,
1120
+ endTime,
1121
+ currentTrack,
1122
+ LANES_TRACK_GROUP,
1123
+ 'secondary-light',
1124
+ ),
1125
+ );
1126
+ } else {
1127
+ console.timeStamp(
1128
+ 'Throttled',
1129
+ startTime,
1130
+ endTime,
1131
+ currentTrack,
1132
+ LANES_TRACK_GROUP,
1133
+ 'secondary-light',
1134
+ );
1135
+ }
1136
}
1137
}
1138
1139
export function logSuspendedCommitPhase(
1140
startTime: number,
1141
endTime: number,
1142
+ debugTask: null | ConsoleTask,
1143
): void {
1144
// This means the commit was suspended on CSS or images.
1145
if (supportsUserTiming) {
1146
+ if (endTime <= startTime) {
1147
+ return;
1148
+ }
1149
// TODO: Include the exact reason and URLs of what resources suspended.
1150
// TODO: This might also be Suspended while waiting on a View Transition.
986
- console.timeStamp(
987
- 'Suspended on CSS or Images',
988
- startTime,
989
- endTime,
990
- currentTrack,
991
- LANES_TRACK_GROUP,
992
- 'secondary-light',
993
- );
1151
+ if (__DEV__ && debugTask) {
1152
+ debugTask.run(
1153
+ // $FlowFixMe[method-unbinding]
1154
+ console.timeStamp.bind(
1155
+ console,
1156
+ 'Suspended on CSS or Images',
1157
+ startTime,
1158
+ endTime,
1159
+ currentTrack,
1160
+ LANES_TRACK_GROUP,
1161
+ 'secondary-light',
1162
+ ),
1163
+ );
1164
+ } else {
1165
+ console.timeStamp(
1166
+ 'Suspended on CSS or Images',
1167
+ startTime,
1168
+ endTime,
1169
+ currentTrack,
1170
+ LANES_TRACK_GROUP,
1171
+ 'secondary-light',
1172
+ );
1173
+ }
1174
}
1175
}
1176
1179
endTime: number,
1180
errors: Array<CapturedValue<mixed>>,
1181
passive: boolean,
1182
+ debugTask: null | ConsoleTask,
1183
): void {
1184
if (supportsUserTiming) {
1185
+ if (endTime <= startTime) {
1186
+ return;
1187
+ }
1188
if (__DEV__) {
1189
const properties: Array<[string, string]> = [];
1190
for (let i = 0; i < errors.length; i++) {
1200
String(error);
1201
properties.push(['Error', message]);
1202
}
1019
- performance.measure('Errored', {
1203
+ const options = {
1204
start: startTime,
1205
end: endTime,
1206
detail: {
1214
properties,
1215
},
1216
},
1033
- });
1217
+ };
1218
+ if (debugTask) {
1219
+ debugTask.run(
1220
+ // $FlowFixMe[method-unbinding]
1221
+ performance.measure.bind(performance, 'Errored', options),
1222
+ );
1223
+ } else {
1224
+ performance.measure('Errored', options);
1225
+ }
1226
} else {
1227
console.timeStamp(
1228
'Errored',
1240
startTime: number,
1241
endTime: number,
1242
errors: null | Array<CapturedValue<mixed>>,
1243
+ debugTask: null | ConsoleTask,
1244
): void {
1245
if (errors !== null) {
1053
- logCommitErrored(startTime, endTime, errors, false);
1246
+ logCommitErrored(startTime, endTime, errors, false, debugTask);
1247
return;
1248
}
1249
if (supportsUserTiming) {
1057
- console.timeStamp(
1058
- 'Commit',
1059
- startTime,
1060
- endTime,
1061
- currentTrack,
1062
- LANES_TRACK_GROUP,
1063
- 'secondary-dark',
1064
- );
1250
+ if (endTime <= startTime) {
1251
+ return;
1252
+ }
1253
+ if (__DEV__ && debugTask) {
1254
+ debugTask.run(
1255
+ // $FlowFixMe[method-unbinding]
1256
+ console.timeStamp.bind(
1257
+ console,
1258
+ 'Commit',
1259
+ startTime,
1260
+ endTime,
1261
+ currentTrack,
1262
+ LANES_TRACK_GROUP,
1263
+ 'secondary-dark',
1264
+ ),
1265
+ );
1266
+ } else {
1267
+ console.timeStamp(
1268
+ 'Commit',
1269
+ startTime,
1270
+ endTime,
1271
+ currentTrack,
1272
+ LANES_TRACK_GROUP,
1273
+ 'secondary-dark',
1274
+ );
1275
+ }
1276
}
1277
}
1278
1280
startTime: number,
1281
endTime: number,
1282
delayedUntilPaint: boolean,
1283
+ debugTask: null | ConsoleTask,
1284
): void {
1285
if (supportsUserTiming) {
1074
- console.timeStamp(
1075
- delayedUntilPaint ? 'Waiting for Paint' : '',
1076
- startTime,
1077
- endTime,
1078
- currentTrack,
1079
- LANES_TRACK_GROUP,
1080
- 'secondary-light',
1081
- );
1286
+ if (endTime <= startTime) {
1287
+ return;
1288
+ }
1289
+ if (__DEV__ && debugTask) {
1290
+ debugTask.run(
1291
+ // $FlowFixMe[method-unbinding]
1292
+ console.timeStamp.bind(
1293
+ console,
1294
+ delayedUntilPaint ? 'Waiting for Paint' : '',
1295
+ startTime,
1296
+ endTime,
1297
+ currentTrack,
1298
+ LANES_TRACK_GROUP,
1299
+ 'secondary-light',
1300
+ ),
1301
+ );
1302
+ } else {
1303
+ console.timeStamp(
1304
+ delayedUntilPaint ? 'Waiting for Paint' : '',
1305
+ startTime,
1306
+ endTime,
1307
+ currentTrack,
1308
+ LANES_TRACK_GROUP,
1309
+ 'secondary-light',
1310
+ );
1311
+ }
1312
}
1313
}
1314
1316
startTime: number,
1317
endTime: number,
1318
errors: null | Array<CapturedValue<mixed>>,
1319
+ debugTask: null | ConsoleTask,
1320
): void {
1321
if (errors !== null) {
1091
- logCommitErrored(startTime, endTime, errors, true);
1322
+ logCommitErrored(startTime, endTime, errors, true, debugTask);
1323
return;
1324
}
1325
if (supportsUserTiming) {
1095
- console.timeStamp(
1096
- 'Remaining Effects',
1097
- startTime,
1098
- endTime,
1099
- currentTrack,
1100
- LANES_TRACK_GROUP,
1101
- 'secondary-dark',
1102
- );
1326
+ if (endTime <= startTime) {
1327
+ return;
1328
+ }
1329
+ if (__DEV__ && debugTask) {
1330
+ debugTask.run(
1331
+ // $FlowFixMe[method-unbinding]
1332
+ console.timeStamp.bind(
1333
+ console,
1334
+ 'Remaining Effects',
1335
+ startTime,
1336
+ endTime,
1337
+ currentTrack,
1338
+ LANES_TRACK_GROUP,
1339
+ 'secondary-dark',
1340
+ ),
1341
+ );
1342
+ } else {
1343
+ console.timeStamp(
1344
+ 'Remaining Effects',
1345
+ startTime,
1346
+ endTime,
1347
+ currentTrack,
1348
+ LANES_TRACK_GROUP,
1349
+ 'secondary-dark',
1350
+ );
1351
+ }
1352
}
1353
}