Skip to content

Commit ffbfaa0

Browse files
committed
old
1 parent fc8e91e commit ffbfaa0

5 files changed

Lines changed: 85 additions & 22 deletions

File tree

packages/react-reconciler/src/ReactFiber.old.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,7 @@ export function createFiberFromTracingMarker(
771771
const tracingMarkerInstance: TracingMarkerInstance = {
772772
transitions: null,
773773
pendingSuspenseBoundaries: null,
774+
hasUpdate: false,
774775
};
775776
fiber.stateNode = tracingMarkerInstance;
776777
return fiber;

packages/react-reconciler/src/ReactFiberBeginWork.old.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,7 @@ function updateTracingMarkerComponent(
909909
const markerInstance: TracingMarkerInstance = {
910910
transitions: new Set(currentTransitions),
911911
pendingSuspenseBoundaries: new Map(),
912+
hasUpdate: false,
912913
};
913914
workInProgress.stateNode = markerInstance;
914915
}

packages/react-reconciler/src/ReactFiberCommitWork.old.js

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ import {
138138
enqueuePendingPassiveProfilerEffect,
139139
restorePendingUpdaters,
140140
addTransitionStartCallbackToPendingTransition,
141+
addTransitionProgressCallbackToPendingTransition,
141142
addTransitionCompleteCallbackToPendingTransition,
142143
addMarkerCompleteCallbackToPendingTransition,
143144
setIsRunningInsertionEffect,
@@ -1110,20 +1111,32 @@ function commitTransitionProgress(offscreenFiber: Fiber) {
11101111
// The suspense boundaries was just hidden. Add the boundary
11111112
// to the pending boundary set if it's there
11121113
if (pendingMarkers !== null) {
1113-
pendingMarkers.forEach(pendingBoundaries => {
1114-
pendingBoundaries.set(offscreenInstance, {
1115-
name,
1116-
});
1114+
pendingMarkers.forEach(markerInstance => {
1115+
const pendingBoundaries = markerInstance.pendingSuspenseBoundaries;
1116+
if (
1117+
pendingBoundaries !== null &&
1118+
!pendingBoundaries.has(offscreenInstance)
1119+
) {
1120+
pendingBoundaries.set(offscreenInstance, {
1121+
name,
1122+
});
1123+
markerInstance.hasUpdate = true;
1124+
}
11171125
});
11181126
}
11191127
} else if (wasHidden && !isHidden) {
11201128
// The suspense boundary went from hidden to visible. Remove
11211129
// the boundary from the pending suspense boundaries set
11221130
// if it's there
11231131
if (pendingMarkers !== null) {
1124-
pendingMarkers.forEach(pendingBoundaries => {
1125-
if (pendingBoundaries.has(offscreenInstance)) {
1132+
pendingMarkers.forEach(markerInstance => {
1133+
const pendingBoundaries = markerInstance.pendingSuspenseBoundaries;
1134+
if (
1135+
pendingBoundaries !== null &&
1136+
pendingBoundaries.has(offscreenInstance)
1137+
) {
11261138
pendingBoundaries.delete(offscreenInstance);
1139+
markerInstance.hasUpdate = true;
11271140
}
11281141
});
11291142
}
@@ -2822,17 +2835,20 @@ function commitPassiveMountOnFiber(
28222835
clearTransitionsForLanes(finishedRoot, committedLanes);
28232836
}
28242837

2825-
incompleteTransitions.forEach(
2826-
({pendingSuspenseBoundaries}, transition) => {
2827-
if (
2828-
pendingSuspenseBoundaries === null ||
2829-
pendingSuspenseBoundaries.size === 0
2830-
) {
2831-
addTransitionCompleteCallbackToPendingTransition(transition);
2832-
incompleteTransitions.delete(transition);
2833-
}
2834-
},
2835-
);
2838+
incompleteTransitions.forEach((markerInstance, transition) => {
2839+
const pendingBoundaries = markerInstance.pendingSuspenseBoundaries;
2840+
if (markerInstance.hasUpdate) {
2841+
addTransitionProgressCallbackToPendingTransition({
2842+
transition,
2843+
pending: pendingBoundaries || [],
2844+
});
2845+
markerInstance.hasUpdate = false;
2846+
}
2847+
if (pendingBoundaries === null || pendingBoundaries.size === 0) {
2848+
addTransitionCompleteCallbackToPendingTransition(transition);
2849+
incompleteTransitions.delete(transition);
2850+
}
2851+
});
28362852

28372853
clearTransitionsForLanes(finishedRoot, committedLanes);
28382854
}
@@ -2909,9 +2925,7 @@ function commitPassiveMountOnFiber(
29092925
instance.pendingMarkers = new Set();
29102926
}
29112927

2912-
instance.pendingMarkers.add(
2913-
markerInstance.pendingSuspenseBoundaries,
2914-
);
2928+
instance.pendingMarkers.add(markerInstance);
29152929
}
29162930
});
29172931
}

packages/react-reconciler/src/ReactFiberTracingMarkerComponent.old.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,14 @@ export type MarkerTransition = {
2222
name: string,
2323
};
2424

25+
export type TransitionProgress = {
26+
transition: Transition,
27+
pending: PendingSuspenseBoundaries,
28+
};
29+
2530
export type PendingTransitionCallbacks = {
2631
transitionStart: Array<Transition> | null,
32+
transitionProgress: Array<TransitionProgress> | null,
2733
transitionComplete: Array<Transition> | null,
2834
markerComplete: Array<MarkerTransition> | null,
2935
};
@@ -42,6 +48,7 @@ export type BatchConfigTransition = {
4248
export type TracingMarkerInstance = {|
4349
pendingSuspenseBoundaries: PendingSuspenseBoundaries | null,
4450
transitions: Set<Transition> | null,
51+
hasUpdate: boolean,
4552
|};
4653

4754
export type PendingSuspenseBoundaries = Map<OffscreenInstance, SuspenseInfo>;
@@ -76,6 +83,19 @@ export function processTransitionCallbacks(
7683
});
7784
}
7885

86+
const transitionProgress = pendingTransitions.transitionProgress;
87+
const onTransitionProgress = callbacks.onTransitionProgress;
88+
if (onTransitionProgress != null && transitionProgress !== null) {
89+
transitionProgress.forEach(({transition, pending}) => {
90+
onTransitionProgress(
91+
transition.name,
92+
transition.startTime,
93+
endTime,
94+
Array.from(pending.values()),
95+
);
96+
});
97+
}
98+
7999
const transitionComplete = pendingTransitions.transitionComplete;
80100
if (transitionComplete !== null) {
81101
transitionComplete.forEach(transition => {
@@ -117,10 +137,12 @@ export function pushRootMarkerInstance(workInProgress: Fiber): void {
117137
if (transitions !== null) {
118138
transitions.forEach(transition => {
119139
if (!root.incompleteTransitions.has(transition)) {
120-
root.incompleteTransitions.set(transition, {
140+
const markerInstance: TracingMarkerInstance = {
121141
transitions: new Set([transition]),
122142
pendingSuspenseBoundaries: null,
123-
});
143+
hasUpdate: true,
144+
};
145+
root.incompleteTransitions.set(transition, markerInstance);
124146
}
125147
});
126148
}

packages/react-reconciler/src/ReactFiberWorkLoop.old.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import type {EventPriority} from './ReactEventPriorities.old';
1818
import type {
1919
PendingTransitionCallbacks,
2020
MarkerTransition,
21+
TransitionProgress,
2122
Transition,
2223
} from './ReactFiberTracingMarkerComponent.old';
2324

@@ -349,6 +350,7 @@ export function addTransitionStartCallbackToPendingTransition(
349350
if (currentPendingTransitionCallbacks === null) {
350351
currentPendingTransitionCallbacks = {
351352
transitionStart: [],
353+
transitionProgress: null,
352354
transitionComplete: null,
353355
markerComplete: null,
354356
};
@@ -369,6 +371,7 @@ export function addMarkerCompleteCallbackToPendingTransition(
369371
if (currentPendingTransitionCallbacks === null) {
370372
currentPendingTransitionCallbacks = {
371373
transitionStart: null,
374+
transitionProgress: null,
372375
transitionComplete: null,
373376
markerComplete: [],
374377
};
@@ -382,13 +385,35 @@ export function addMarkerCompleteCallbackToPendingTransition(
382385
}
383386
}
384387

388+
export function addTransitionProgressCallbackToPendingTransition(
389+
transition: TransitionProgress,
390+
) {
391+
if (enableTransitionTracing) {
392+
if (currentPendingTransitionCallbacks === null) {
393+
currentPendingTransitionCallbacks = {
394+
transitionStart: null,
395+
transitionProgress: [],
396+
transitionComplete: null,
397+
markerComplete: null,
398+
};
399+
}
400+
401+
if (currentPendingTransitionCallbacks.transitionProgress === null) {
402+
currentPendingTransitionCallbacks.transitionProgress = [];
403+
}
404+
405+
currentPendingTransitionCallbacks.transitionProgress.push(transition);
406+
}
407+
}
408+
385409
export function addTransitionCompleteCallbackToPendingTransition(
386410
transition: Transition,
387411
) {
388412
if (enableTransitionTracing) {
389413
if (currentPendingTransitionCallbacks === null) {
390414
currentPendingTransitionCallbacks = {
391415
transitionStart: null,
416+
transitionProgress: null,
392417
transitionComplete: [],
393418
markerComplete: null,
394419
};

0 commit comments

Comments
 (0)