@@ -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,14 @@ 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 +=
2413
+ fiber . stateNode . effectDuration ;
2414
+ }
2415
+
2416
+ nearestProfilerOnStack = prevProfilerOnStack ;
2413
2417
}
2414
2418
}
2415
2419
@@ -2474,11 +2478,10 @@ export function flushPassiveEffects(): boolean {
2474
2478
function flushPassiveMountEffects ( root , firstChild : Fiber ) : void {
2475
2479
let fiber = firstChild ;
2476
2480
while ( fiber !== null ) {
2477
- let prevPenultimateProfiler = null ;
2481
+ let prevProfilerOnStack = null ;
2478
2482
if ( enableProfilerTimer && enableProfilerCommitHooks ) {
2479
2483
if ( fiber . tag === Profiler ) {
2480
- prevPenultimateProfiler = penultimateProfilerOnStack ;
2481
- penultimateProfilerOnStack = nearestProfilerOnStack ;
2484
+ prevProfilerOnStack = nearestProfilerOnStack ;
2482
2485
nearestProfilerOnStack = fiber ;
2483
2486
}
2484
2487
}
@@ -2515,8 +2518,14 @@ function flushPassiveMountEffects(root, firstChild: Fiber): void {
2515
2518
2516
2519
if ( enableProfilerTimer && enableProfilerCommitHooks ) {
2517
2520
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 ;
2520
2529
}
2521
2530
}
2522
2531
0 commit comments