69
logBlockingStart,
70
logTransitionStart,
71
logRenderPhase,
72
+ logInterruptedRenderPhase,
73
+ logSuspendedRenderPhase,
74
+ logErroredRenderPhase,
75
+ logInconsistentRender,
76
logSuspenseThrottlePhase,
77
logSuspendedCommitPhase,
78
logCommitPhase,
259
startProfilerTimer,
260
stopProfilerTimerIfRunningAndRecordDuration,
261
stopProfilerTimerIfRunningAndRecordIncompleteDuration,
262
+ markUpdateAsRepeat,
263
} from './ReactProfilerTimer';
264
import {setCurrentTrackFromLanes} from './ReactFiberPerformanceTrack';
265
960
renderWasConcurrent &&
961
!isRenderConsistentWithExternalStores(finishedWork)
962
) {
963
+ if (enableProfilerTimer && enableComponentPerformanceTrack) {
964
+ setCurrentTrackFromLanes(lanes);
965
+ const renderEndTime = now();
966
+ logInconsistentRender(renderStartTime, renderEndTime);
967
+ finalizeRender(lanes, renderEndTime);
968
+ markUpdateAsRepeat(lanes);
969
+ }
970
// A store was mutated in an interleaved event. Render again,
971
// synchronously, to block further mutations.
972
exitStatus = renderRootSync(root, lanes, false);
988
lanesThatJustErrored,
989
);
990
if (errorRetryLanes !== NoLanes) {
991
+ if (enableProfilerTimer && enableComponentPerformanceTrack) {
992
+ setCurrentTrackFromLanes(lanes);
993
+ const renderEndTime = now();
994
+ logErroredRenderPhase(renderStartTime, renderEndTime);
995
+ finalizeRender(lanes, renderEndTime);
996
+ markUpdateAsRepeat(lanes);
997
+ }
998
lanes = errorRetryLanes;
999
exitStatus = recoverFromConcurrentError(
1000
root,
1018
}
1019
}
1020
if (exitStatus === RootFatalErrored) {
1021
+ if (enableProfilerTimer && enableComponentPerformanceTrack) {
1022
+ setCurrentTrackFromLanes(lanes);
1023
+ const renderEndTime = now();
1024
+ logErroredRenderPhase(renderStartTime, renderEndTime);
1025
+ finalizeRender(lanes, renderEndTime);
1026
+ }
1027
prepareFreshStack(root, NoLanes);
1028
// Since this is a fatal error, we're going to pretend we attempted
1029
// the entire tree, to avoid scheduling a prerender.
1161
// placeholder and without scheduling a timeout. Delay indefinitely
1162
// until we receive more data.
1163
if (enableProfilerTimer && enableComponentPerformanceTrack) {
1164
+ setCurrentTrackFromLanes(lanes);
1165
+ logSuspendedRenderPhase(renderStartTime, renderEndTime);
1166
finalizeRender(lanes, renderEndTime);
1167
}
1168
const didAttemptEntireTree = !workInProgressRootDidSkipSuspendedSiblings;
1207
workInProgressDeferredLane,
1208
workInProgressRootInterleavedUpdatedLanes,
1209
workInProgressSuspendedRetryLanes,
1210
+ exitStatus,
1211
IMMEDIATE_COMMIT,
1212
renderStartTime,
1213
renderEndTime,
1258
workInProgressRootInterleavedUpdatedLanes,
1259
workInProgressSuspendedRetryLanes,
1260
workInProgressRootDidSkipSuspendedSiblings,
1261
+ exitStatus,
1262
THROTTLED_COMMIT,
1263
renderStartTime,
1264
renderEndTime,
1279
workInProgressRootInterleavedUpdatedLanes,
1280
workInProgressSuspendedRetryLanes,
1281
workInProgressRootDidSkipSuspendedSiblings,
1282
+ exitStatus,
1283
IMMEDIATE_COMMIT,
1284
renderStartTime,
1285
renderEndTime,
1298
updatedLanes: Lanes,
1299
suspendedRetryLanes: Lanes,
1300
didSkipSuspendedSiblings: boolean,
1301
+ exitStatus: RootExitStatus,
1302
suspendedCommitReason: SuspendedCommitReason, // Profiling-only
1303
completedRenderStartTime: number, // Profiling-only
1304
completedRenderEndTime: number, // Profiling-only
1342
spawnedLane,
1343
updatedLanes,
1344
suspendedRetryLanes,
1345
+ exitStatus,
1346
SUSPENDED_COMMIT,
1347
completedRenderStartTime,
1348
completedRenderEndTime,
1363
spawnedLane,
1364
updatedLanes,
1365
suspendedRetryLanes,
1366
+ exitStatus,
1367
suspendedCommitReason,
1368
completedRenderStartTime,
1369
completedRenderEndTime,
1682
1683
function prepareFreshStack(root: FiberRoot, lanes: Lanes): Fiber {
1684
if (enableProfilerTimer && enableComponentPerformanceTrack) {
1685
+ const previousRenderStartTime = renderStartTime;
1686
// Starting a new render. Log the end of any previous renders and the
1687
// blocked time before the render started.
1688
recordRenderTime();
1689
// If this was a restart, e.g. due to an interrupting update, then there's no space
1690
// in the track to log the cause since we'll have rendered all the way up until the
1691
// restart so we need to clamp that.
1658
- finalizeRender(workInProgressRootRenderLanes, renderStartTime);
1692
+ if (
1693
+ workInProgressRootRenderLanes !== NoLanes &&
1694
+ previousRenderStartTime > 0
1695
+ ) {
1696
+ setCurrentTrackFromLanes(workInProgressRootRenderLanes);
1697
+ logInterruptedRenderPhase(previousRenderStartTime, renderStartTime);
1698
+ finalizeRender(workInProgressRootRenderLanes, renderStartTime);
1699
+ }
1700
1701
if (includesSyncLane(lanes) || includesBlockingLane(lanes)) {
1702
logBlockingStart(
3024
spawnedLane: Lane,
3025
updatedLanes: Lanes,
3026
suspendedRetryLanes: Lanes,
3027
+ exitStatus: RootExitStatus,
3028
suspendedCommitReason: SuspendedCommitReason, // Profiling-only
3029
completedRenderStartTime: number, // Profiling-only
3030
completedRenderEndTime: number, // Profiling-only
3045
spawnedLane,
3046
updatedLanes,
3047
suspendedRetryLanes,
3048
+ exitStatus,
3049
suspendedCommitReason,
3050
completedRenderStartTime,
3051
completedRenderEndTime,
3065
spawnedLane: Lane,
3066
updatedLanes: Lanes,
3067
suspendedRetryLanes: Lanes,
3068
+ exitStatus: RootExitStatus, // Profiling-only
3069
suspendedCommitReason: SuspendedCommitReason, // Profiling-only
3070
completedRenderStartTime: number, // Profiling-only
3071
completedRenderEndTime: number, // Profiling-only
3091
if (enableProfilerTimer && enableComponentPerformanceTrack) {
3092
// Log the previous render phase once we commit. I.e. we weren't interrupted.
3093
setCurrentTrackFromLanes(lanes);
3050
- logRenderPhase(completedRenderStartTime, completedRenderEndTime);
3094
+ if (exitStatus === RootErrored) {
3095
+ logErroredRenderPhase(completedRenderStartTime, completedRenderEndTime);
3096
+ } else {
3097
+ logRenderPhase(completedRenderStartTime, completedRenderEndTime);
3098
+ }
3099
}
3100
3101
if (__DEV__) {
3457
3458
if (enableProfilerTimer && enableComponentPerformanceTrack) {
3459
if (!rootDidHavePassiveEffects) {
3412
- finalizeRender(lanes, now());
3460
+ finalizeRender(lanes, commitEndTime);
3461
}
3462
}
3463