@@ -370,7 +370,6 @@ let shouldFireAfterActiveInstanceBlur: boolean = false;
370370
371371// Used to avoid traversing the return path to find the nearest Profiler ancestor during commit.
372372let nearestProfilerOnStack: Fiber | null = null;
373- export let penultimateProfilerOnStack: Fiber | null = null;
374373
375374export function getWorkInProgressRoot(): FiberRoot | null {
376375 return workInProgressRoot ;
@@ -2367,11 +2366,10 @@ function commitLayoutEffects(
23672366) {
23682367 let fiber = firstChild ;
23692368 while ( fiber !== null ) {
2370- let prevPenultimateProfiler = null ;
2369+ let prevProfilerOnStack = null ;
23712370 if ( enableProfilerTimer && enableProfilerCommitHooks ) {
23722371 if ( fiber . tag === Profiler ) {
2373- prevPenultimateProfiler = penultimateProfilerOnStack ;
2374- penultimateProfilerOnStack = nearestProfilerOnStack ;
2372+ prevProfilerOnStack = nearestProfilerOnStack ;
23752373 nearestProfilerOnStack = fiber ;
23762374 }
23772375 }
@@ -2408,8 +2406,14 @@ function commitLayoutEffects(
24082406
24092407 if ( enableProfilerTimer && enableProfilerCommitHooks ) {
24102408 if ( fiber . tag === Profiler ) {
2411- nearestProfilerOnStack = penultimateProfilerOnStack ;
2412- penultimateProfilerOnStack = prevPenultimateProfiler ;
2409+ // Propagate layout effect durations to the next nearest Profiler ancestor.
2410+ // Do not reset these values until the next render so DevTools has a chance to read them first.
2411+ if ( prevProfilerOnStack !== null ) {
2412+ prevProfilerOnStack . stateNode . effectDuration +=
2413+ fiber . stateNode . effectDuration ;
2414+ }
2415+
2416+ nearestProfilerOnStack = prevProfilerOnStack ;
24132417 }
24142418 }
24152419
@@ -2474,11 +2478,10 @@ export function flushPassiveEffects(): boolean {
24742478function flushPassiveMountEffects ( root , firstChild : Fiber ) : void {
24752479 let fiber = firstChild ;
24762480 while ( fiber !== null ) {
2477- let prevPenultimateProfiler = null ;
2481+ let prevProfilerOnStack = null ;
24782482 if ( enableProfilerTimer && enableProfilerCommitHooks ) {
24792483 if ( fiber . tag === Profiler ) {
2480- prevPenultimateProfiler = penultimateProfilerOnStack ;
2481- penultimateProfilerOnStack = nearestProfilerOnStack ;
2484+ prevProfilerOnStack = nearestProfilerOnStack ;
24822485 nearestProfilerOnStack = fiber ;
24832486 }
24842487 }
@@ -2515,8 +2518,14 @@ function flushPassiveMountEffects(root, firstChild: Fiber): void {
25152518
25162519 if ( enableProfilerTimer && enableProfilerCommitHooks ) {
25172520 if ( fiber . tag === Profiler ) {
2518- nearestProfilerOnStack = penultimateProfilerOnStack ;
2519- penultimateProfilerOnStack = prevPenultimateProfiler ;
2521+ // Bubble times to the next nearest ancestor Profiler.
2522+ // After we process that Profiler, we'll bubble further up.
2523+ if ( prevProfilerOnStack !== null ) {
2524+ prevProfilerOnStack . stateNode . passiveEffectDuration +=
2525+ fiber . stateNode . passiveEffectDuration ;
2526+ }
2527+
2528+ nearestProfilerOnStack = prevProfilerOnStack ;
25202529 }
25212530 }
25222531
0 commit comments