From bbc2d596fa48b64d359b96e167403693caaaabd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Markb=C3=A5ge?= Date: Wed, 1 Oct 2025 13:45:37 -0400 Subject: [PATCH] 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 --- .../src/ReactFiberCommitWork.js | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/react-reconciler/src/ReactFiberCommitWork.js b/packages/react-reconciler/src/ReactFiberCommitWork.js index a39ce6d736..c98edc7a0b 100644 --- a/packages/react-reconciler/src/ReactFiberCommitWork.js +++ b/packages/react-reconciler/src/ReactFiberCommitWork.js @@ -3945,7 +3945,12 @@ function commitPassiveMountOnFiber( instance._visibility |= OffscreenPassiveEffectsConnected; const includeWorkInProgressEffects = - (finishedWork.subtreeFlags & PassiveMask) !== NoFlags; + (finishedWork.subtreeFlags & PassiveMask) !== NoFlags || + (enableProfilerTimer && + enableComponentPerformanceTrack && + finishedWork.actualDuration !== 0 && + (finishedWork.alternate === null || + finishedWork.alternate.child !== finishedWork.child)); recursivelyTraverseReconnectPassiveEffects( finishedRoot, finishedWork, @@ -4113,7 +4118,12 @@ function recursivelyTraverseReconnectPassiveEffects( // node was reused. const childShouldIncludeWorkInProgressEffects = includeWorkInProgressEffects && - (parentFiber.subtreeFlags & PassiveMask) !== NoFlags; + ((parentFiber.subtreeFlags & PassiveMask) !== NoFlags || + (enableProfilerTimer && + enableComponentPerformanceTrack && + parentFiber.actualDuration !== 0 && + (parentFiber.alternate === null || + parentFiber.alternate.child !== parentFiber.child))); // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic) let child = parentFiber.child; @@ -4379,7 +4389,14 @@ function recursivelyTraverseAtomicPassiveEffects( // pre-rendering. We call this function when traversing a hidden tree whose // regular effects are currently disconnected. // TODO: Add special flag for atomic effects - if (parentFiber.subtreeFlags & PassiveMask) { + if ( + parentFiber.subtreeFlags & PassiveMask || + (enableProfilerTimer && + enableComponentPerformanceTrack && + parentFiber.actualDuration !== 0 && + (parentFiber.alternate === null || + parentFiber.alternate.child !== parentFiber.child)) + ) { let child = parentFiber.child; while (child !== null) { if (enableProfilerTimer && enableComponentPerformanceTrack) {