@@ -370,7 +370,6 @@ let shouldFireAfterActiveInstanceBlur: boolean = false;
370
370
371
371
// Used to avoid traversing the return path to find the nearest Profiler ancestor during commit.
372
372
let nearestProfilerOnStack: Fiber | null = null;
373
- export let penultimateProfilerOnStack: Fiber | null = null;
374
373
375
374
export function getWorkInProgressRoot(): FiberRoot | null {
376
375
return workInProgressRoot ;
@@ -2367,11 +2366,10 @@ function commitLayoutEffects(
2367
2366
) {
2368
2367
let fiber = firstChild ;
2369
2368
while ( fiber !== null ) {
2370
- let prevPenultimateProfiler = null ;
2369
+ let prevProfilerOnStack = null ;
2371
2370
if ( enableProfilerTimer && enableProfilerCommitHooks ) {
2372
2371
if ( fiber . tag === Profiler ) {
2373
- prevPenultimateProfiler = penultimateProfilerOnStack ;
2374
- penultimateProfilerOnStack = nearestProfilerOnStack ;
2372
+ prevProfilerOnStack = nearestProfilerOnStack ;
2375
2373
nearestProfilerOnStack = fiber ;
2376
2374
}
2377
2375
}
@@ -2408,8 +2406,13 @@ function commitLayoutEffects(
2408
2406
2409
2407
if ( enableProfilerTimer && enableProfilerCommitHooks ) {
2410
2408
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 += fiber . stateNode . effectDuration ;
2413
+ }
2414
+
2415
+ nearestProfilerOnStack = prevProfilerOnStack ;
2413
2416
}
2414
2417
}
2415
2418
@@ -2474,11 +2477,10 @@ export function flushPassiveEffects(): boolean {
2474
2477
function flushPassiveMountEffects ( root , firstChild : Fiber ) : void {
2475
2478
let fiber = firstChild ;
2476
2479
while ( fiber !== null ) {
2477
- let prevPenultimateProfiler = null ;
2480
+ let prevProfilerOnStack = null ;
2478
2481
if ( enableProfilerTimer && enableProfilerCommitHooks ) {
2479
2482
if ( fiber . tag === Profiler ) {
2480
- prevPenultimateProfiler = penultimateProfilerOnStack ;
2481
- penultimateProfilerOnStack = nearestProfilerOnStack ;
2483
+ prevProfilerOnStack = nearestProfilerOnStack ;
2482
2484
nearestProfilerOnStack = fiber ;
2483
2485
}
2484
2486
}
@@ -2515,8 +2517,13 @@ function flushPassiveMountEffects(root, firstChild: Fiber): void {
2515
2517
2516
2518
if ( enableProfilerTimer && enableProfilerCommitHooks ) {
2517
2519
if ( fiber . tag === Profiler ) {
2518
- nearestProfilerOnStack = penultimateProfilerOnStack ;
2519
- penultimateProfilerOnStack = prevPenultimateProfiler ;
2520
+ // Bubble times to the next nearest ancestor Profiler.
2521
+ // After we process that Profiler, we'll bubble further up.
2522
+ if ( prevProfilerOnStack !== null ) {
2523
+ prevProfilerOnStack . stateNode . passiveEffectDuration += fiber . stateNode . passiveEffectDuration ;
2524
+ }
2525
+
2526
+ nearestProfilerOnStack = prevProfilerOnStack ;
2520
2527
}
2521
2528
}
2522
2529
0 commit comments