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) {