@samitouri / QOS-React / commits / bbc2d596fa

Traverse down an updated tree even if it has no passive effects in profiling mode (#34667)

We need this to be able to log the renders that happened inside. This is the same thing we do here but for the offscreen special cases: https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberCommitWork.js#L3452-L3457

Sebastian Markbåge committed Oct 1, 2025 at 13:45 UTC bbc2d596fa48b64d359b96e167403693caaaabd9
1 file changed +20 -3
packages/react-reconciler/src/ReactFiberCommitWork.js
+20 -3
@@ -3945,7 +3945,12 @@ function commitPassiveMountOnFiber(
3945 instance._visibility |= OffscreenPassiveEffectsConnected;
3946
3947 const includeWorkInProgressEffects =
3948 - (finishedWork.subtreeFlags & PassiveMask) !== NoFlags;
3948 + (finishedWork.subtreeFlags & PassiveMask) !== NoFlags ||
3949 + (enableProfilerTimer &&
3950 + enableComponentPerformanceTrack &&
3951 + finishedWork.actualDuration !== 0 &&
3952 + (finishedWork.alternate === null ||
3953 + finishedWork.alternate.child !== finishedWork.child));
3954 recursivelyTraverseReconnectPassiveEffects(
3955 finishedRoot,
3956 finishedWork,
@@ -4113,7 +4118,12 @@ function recursivelyTraverseReconnectPassiveEffects(
4118 // node was reused.
4119 const childShouldIncludeWorkInProgressEffects =
4120 includeWorkInProgressEffects &&
4116 - (parentFiber.subtreeFlags & PassiveMask) !== NoFlags;
4121 + ((parentFiber.subtreeFlags & PassiveMask) !== NoFlags ||
4122 + (enableProfilerTimer &&
4123 + enableComponentPerformanceTrack &&
4124 + parentFiber.actualDuration !== 0 &&
4125 + (parentFiber.alternate === null ||
4126 + parentFiber.alternate.child !== parentFiber.child)));
4127
4128 // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)
4129 let child = parentFiber.child;
@@ -4379,7 +4389,14 @@ function recursivelyTraverseAtomicPassiveEffects(
4389 // pre-rendering. We call this function when traversing a hidden tree whose
4390 // regular effects are currently disconnected.
4391 // TODO: Add special flag for atomic effects
4382 - if (parentFiber.subtreeFlags & PassiveMask) {
4392 + if (
4393 + parentFiber.subtreeFlags & PassiveMask ||
4394 + (enableProfilerTimer &&
4395 + enableComponentPerformanceTrack &&
4396 + parentFiber.actualDuration !== 0 &&
4397 + (parentFiber.alternate === null ||
4398 + parentFiber.alternate.child !== parentFiber.child))
4399 + ) {
4400 let child = parentFiber.child;
4401 while (child !== null) {
4402 if (enableProfilerTimer && enableComponentPerformanceTrack) {