Skip to content

Commit 5232899

Browse files
committed
[Perf Tracks]: Always log effect that spawned blocking update (#34648)
We've observed some scenarios, where cascading update happens in an effect that was shorter than 0.05ms. In this case, this effect won't be displayed on a timeline, because of the threshold that we are using, but it would be shown in entry properties or in a stack trace. To avoid confusion, we should always log such effects. Validated via manually changing the threshold to 100ms+ and observing that only effects that triggered an update are visible on a timeline. DiffTrain build for [063394c](063394c)
1 parent 0a29f91 commit 5232899

34 files changed

+1008
-734
lines changed

compiled/facebook-www/REVISION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d8a15c49a4bac8fb6730737c34eaf9c74c2f0d7e
1+
063394cf821e5082e834c72ffb9cf6f8575c9b34
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d8a15c49a4bac8fb6730737c34eaf9c74c2f0d7e
1+
063394cf821e5082e834c72ffb9cf6f8575c9b34

compiled/facebook-www/React-dev.classic.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ __DEV__ &&
14581458
exports.useTransition = function () {
14591459
return resolveDispatcher().useTransition();
14601460
};
1461-
exports.version = "19.2.0-www-classic-d8a15c49-20250930";
1461+
exports.version = "19.2.0-www-classic-063394cf-20250930";
14621462
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
14631463
"function" ===
14641464
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-dev.modern.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ __DEV__ &&
14581458
exports.useTransition = function () {
14591459
return resolveDispatcher().useTransition();
14601460
};
1461-
exports.version = "19.2.0-www-modern-d8a15c49-20250930";
1461+
exports.version = "19.2.0-www-modern-063394cf-20250930";
14621462
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
14631463
"function" ===
14641464
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-prod.classic.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,4 +604,4 @@ exports.useSyncExternalStore = function (
604604
exports.useTransition = function () {
605605
return ReactSharedInternals.H.useTransition();
606606
};
607-
exports.version = "19.2.0-www-classic-d8a15c49-20250930";
607+
exports.version = "19.2.0-www-classic-063394cf-20250930";

compiled/facebook-www/React-prod.modern.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,4 +604,4 @@ exports.useSyncExternalStore = function (
604604
exports.useTransition = function () {
605605
return ReactSharedInternals.H.useTransition();
606606
};
607-
exports.version = "19.2.0-www-modern-d8a15c49-20250930";
607+
exports.version = "19.2.0-www-modern-063394cf-20250930";

compiled/facebook-www/React-profiling.classic.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ exports.useSyncExternalStore = function (
608608
exports.useTransition = function () {
609609
return ReactSharedInternals.H.useTransition();
610610
};
611-
exports.version = "19.2.0-www-classic-d8a15c49-20250930";
611+
exports.version = "19.2.0-www-classic-063394cf-20250930";
612612
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
613613
"function" ===
614614
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-profiling.modern.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ exports.useSyncExternalStore = function (
608608
exports.useTransition = function () {
609609
return ReactSharedInternals.H.useTransition();
610610
};
611-
exports.version = "19.2.0-www-modern-d8a15c49-20250930";
611+
exports.version = "19.2.0-www-modern-063394cf-20250930";
612612
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
613613
"function" ===
614614
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/ReactART-dev.classic.js

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3192,7 +3192,8 @@ __DEV__ &&
31923192
null != fiber &&
31933193
(blockingUpdateComponentName = getComponentNameFromFiber(fiber));
31943194
(executionContext & (RenderContext | CommitContext)) !==
3195-
NoContext && (blockingUpdateType = 1);
3195+
NoContext &&
3196+
((componentEffectSpawnedUpdate = !0), (blockingUpdateType = 1));
31963197
if (-1.1 !== blockingEventTime || null !== blockingEventType)
31973198
blockingEventIsRepeat = !1;
31983199
blockingEventTime = -1.1;
@@ -3253,6 +3254,11 @@ __DEV__ &&
32533254
componentEffectErrors = null;
32543255
return prevErrors;
32553256
}
3257+
function pushComponentEffectDidSpawnUpdate() {
3258+
var prev = componentEffectSpawnedUpdate;
3259+
componentEffectSpawnedUpdate = !1;
3260+
return prev;
3261+
}
32563262
function startProfilerTimer(fiber) {
32573263
profilerStartTime = now();
32583264
0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);
@@ -12006,6 +12012,7 @@ __DEV__ &&
1200612012
var prevEffectStart = pushComponentEffectStart(),
1200712013
prevEffectDuration = pushComponentEffectDuration(),
1200812014
prevEffectErrors = pushComponentEffectErrors(),
12015+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(),
1200912016
flags = finishedWork.flags;
1201012017
switch (finishedWork.tag) {
1201112018
case 0:
@@ -12231,7 +12238,7 @@ __DEV__ &&
1223112238
0 !== (finishedWork.mode & 2) &&
1223212239
0 <= componentEffectStartTime &&
1223312240
0 <= componentEffectEndTime &&
12234-
(0.05 < componentEffectDuration &&
12241+
((componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1223512242
logComponentEffect(
1223612243
finishedWork,
1223712244
componentEffectStartTime,
@@ -12256,6 +12263,7 @@ __DEV__ &&
1225612263
popComponentEffectStart(prevEffectStart);
1225712264
popComponentEffectDuration(prevEffectDuration);
1225812265
componentEffectErrors = prevEffectErrors;
12266+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1225912267
}
1226012268
function abortRootTransitions(
1226112269
root,
@@ -12494,7 +12502,8 @@ __DEV__ &&
1249412502
}
1249512503
var prevEffectStart = pushComponentEffectStart(),
1249612504
prevEffectDuration = pushComponentEffectDuration(),
12497-
prevEffectErrors = pushComponentEffectErrors();
12505+
prevEffectErrors = pushComponentEffectErrors(),
12506+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate();
1249812507
switch (deletedFiber.tag) {
1249912508
case 26:
1250012509
case 27:
@@ -12670,7 +12679,7 @@ __DEV__ &&
1267012679
0 !== (deletedFiber.mode & 2) &&
1267112680
0 <= componentEffectStartTime &&
1267212681
0 <= componentEffectEndTime &&
12673-
0.05 < componentEffectDuration &&
12682+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1267412683
logComponentEffect(
1267512684
deletedFiber,
1267612685
componentEffectStartTime,
@@ -12681,6 +12690,7 @@ __DEV__ &&
1268112690
popComponentEffectStart(prevEffectStart);
1268212691
popComponentEffectDuration(prevEffectDuration);
1268312692
componentEffectErrors = prevEffectErrors;
12693+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1268412694
}
1268512695
function getRetryCache(finishedWork) {
1268612696
switch (finishedWork.tag) {
@@ -12785,6 +12795,7 @@ __DEV__ &&
1278512795
var prevEffectStart = pushComponentEffectStart(),
1278612796
prevEffectDuration = pushComponentEffectDuration(),
1278712797
prevEffectErrors = pushComponentEffectErrors(),
12798+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(),
1278812799
current = finishedWork.alternate,
1278912800
flags = finishedWork.flags;
1279012801
switch (finishedWork.tag) {
@@ -13149,7 +13160,7 @@ __DEV__ &&
1314913160
0 !== (finishedWork.mode & 2) &&
1315013161
0 <= componentEffectStartTime &&
1315113162
0 <= componentEffectEndTime &&
13152-
(0.05 < componentEffectDuration &&
13163+
((componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1315313164
logComponentEffect(
1315413165
finishedWork,
1315513166
componentEffectStartTime,
@@ -13174,6 +13185,7 @@ __DEV__ &&
1317413185
popComponentEffectStart(prevEffectStart);
1317513186
popComponentEffectDuration(prevEffectDuration);
1317613187
componentEffectErrors = prevEffectErrors;
13188+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1317713189
}
1317813190
function commitReconciliationEffects(finishedWork) {
1317913191
var flags = finishedWork.flags;
@@ -13280,7 +13292,8 @@ __DEV__ &&
1328013292
function disappearLayoutEffects(finishedWork) {
1328113293
var prevEffectStart = pushComponentEffectStart(),
1328213294
prevEffectDuration = pushComponentEffectDuration(),
13283-
prevEffectErrors = pushComponentEffectErrors();
13295+
prevEffectErrors = pushComponentEffectErrors(),
13296+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate();
1328413297
switch (finishedWork.tag) {
1328513298
case 0:
1328613299
case 11:
@@ -13331,7 +13344,7 @@ __DEV__ &&
1333113344
0 !== (finishedWork.mode & 2) &&
1333213345
0 <= componentEffectStartTime &&
1333313346
0 <= componentEffectEndTime &&
13334-
0.05 < componentEffectDuration &&
13347+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1333513348
logComponentEffect(
1333613349
finishedWork,
1333713350
componentEffectStartTime,
@@ -13342,6 +13355,7 @@ __DEV__ &&
1334213355
popComponentEffectStart(prevEffectStart);
1334313356
popComponentEffectDuration(prevEffectDuration);
1334413357
componentEffectErrors = prevEffectErrors;
13358+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1334513359
}
1334613360
function recursivelyTraverseDisappearLayoutEffects(parentFiber) {
1334713361
for (parentFiber = parentFiber.child; null !== parentFiber; )
@@ -13357,6 +13371,7 @@ __DEV__ &&
1335713371
var prevEffectStart = pushComponentEffectStart(),
1335813372
prevEffectDuration = pushComponentEffectDuration(),
1335913373
prevEffectErrors = pushComponentEffectErrors(),
13374+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(),
1336013375
flags = finishedWork.flags;
1336113376
switch (finishedWork.tag) {
1336213377
case 0:
@@ -13493,7 +13508,7 @@ __DEV__ &&
1349313508
0 !== (finishedWork.mode & 2) &&
1349413509
0 <= componentEffectStartTime &&
1349513510
0 <= componentEffectEndTime &&
13496-
0.05 < componentEffectDuration &&
13511+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1349713512
logComponentEffect(
1349813513
finishedWork,
1349913514
componentEffectStartTime,
@@ -13504,6 +13519,7 @@ __DEV__ &&
1350413519
popComponentEffectStart(prevEffectStart);
1350513520
popComponentEffectDuration(prevEffectDuration);
1350613521
componentEffectErrors = prevEffectErrors;
13522+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1350713523
}
1350813524
function recursivelyTraverseReappearLayoutEffects(
1350913525
finishedRoot,
@@ -13660,6 +13676,7 @@ __DEV__ &&
1366013676
var prevEffectStart = pushComponentEffectStart(),
1366113677
prevEffectDuration = pushComponentEffectDuration(),
1366213678
prevEffectErrors = pushComponentEffectErrors(),
13679+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(),
1366313680
prevDeepEquality = alreadyWarnedForDeepEquality,
1366413681
isViewTransitionEligible = enableViewTransition
1366513682
? (committedLanes & 335544064) === committedLanes
@@ -14051,7 +14068,7 @@ __DEV__ &&
1405114068
);
1405214069
0 <= componentEffectStartTime &&
1405314070
0 <= componentEffectEndTime &&
14054-
(0.05 < componentEffectDuration &&
14071+
((componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1405514072
logComponentEffect(
1405614073
finishedWork,
1405714074
componentEffectStartTime,
@@ -14071,6 +14088,7 @@ __DEV__ &&
1407114088
popComponentEffectStart(prevEffectStart);
1407214089
popComponentEffectDuration(prevEffectDuration);
1407314090
componentEffectErrors = prevEffectErrors;
14091+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1407414092
alreadyWarnedForDeepEquality = prevDeepEquality;
1407514093
}
1407614094
function recursivelyTraverseReconnectPassiveEffects(
@@ -14118,6 +14136,7 @@ __DEV__ &&
1411814136
var prevEffectStart = pushComponentEffectStart(),
1411914137
prevEffectDuration = pushComponentEffectDuration(),
1412014138
prevEffectErrors = pushComponentEffectErrors(),
14139+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(),
1412114140
prevDeepEquality = alreadyWarnedForDeepEquality;
1412214141
enableComponentPerformanceTrack &&
1412314142
includeWorkInProgressEffects &&
@@ -14241,7 +14260,7 @@ __DEV__ &&
1424114260
0 !== (finishedWork.mode & 2) &&
1424214261
0 <= componentEffectStartTime &&
1424314262
0 <= componentEffectEndTime &&
14244-
0.05 < componentEffectDuration &&
14263+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1424514264
logComponentEffect(
1424614265
finishedWork,
1424714266
componentEffectStartTime,
@@ -14252,6 +14271,7 @@ __DEV__ &&
1425214271
popComponentEffectStart(prevEffectStart);
1425314272
popComponentEffectDuration(prevEffectDuration);
1425414273
componentEffectErrors = prevEffectErrors;
14274+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1425514275
alreadyWarnedForDeepEquality = prevDeepEquality;
1425614276
}
1425714277
function recursivelyTraverseAtomicPassiveEffects(
@@ -14446,7 +14466,8 @@ __DEV__ &&
1444614466
function commitPassiveUnmountOnFiber(finishedWork) {
1444714467
var prevEffectStart = pushComponentEffectStart(),
1444814468
prevEffectDuration = pushComponentEffectDuration(),
14449-
prevEffectErrors = pushComponentEffectErrors();
14469+
prevEffectErrors = pushComponentEffectErrors(),
14470+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate();
1445014471
switch (finishedWork.tag) {
1445114472
case 0:
1445214473
case 11:
@@ -14500,7 +14521,7 @@ __DEV__ &&
1450014521
0 !== (finishedWork.mode & 2) &&
1450114522
0 <= componentEffectStartTime &&
1450214523
0 <= componentEffectEndTime &&
14503-
0.05 < componentEffectDuration &&
14524+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1450414525
logComponentEffect(
1450514526
finishedWork,
1450614527
componentEffectStartTime,
@@ -14510,6 +14531,7 @@ __DEV__ &&
1451014531
);
1451114532
popComponentEffectStart(prevEffectStart);
1451214533
popComponentEffectDuration(prevEffectDuration);
14534+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1451314535
componentEffectErrors = prevEffectErrors;
1451414536
}
1451514537
function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {
@@ -14546,7 +14568,8 @@ __DEV__ &&
1454614568
function disconnectPassiveEffect(finishedWork) {
1454714569
var prevEffectStart = pushComponentEffectStart(),
1454814570
prevEffectDuration = pushComponentEffectDuration(),
14549-
prevEffectErrors = pushComponentEffectErrors();
14571+
prevEffectErrors = pushComponentEffectErrors(),
14572+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate();
1455014573
switch (finishedWork.tag) {
1455114574
case 0:
1455214575
case 11:
@@ -14571,7 +14594,7 @@ __DEV__ &&
1457114594
0 !== (finishedWork.mode & 2) &&
1457214595
0 <= componentEffectStartTime &&
1457314596
0 <= componentEffectEndTime &&
14574-
0.05 < componentEffectDuration &&
14597+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1457514598
logComponentEffect(
1457614599
finishedWork,
1457714600
componentEffectStartTime,
@@ -14581,6 +14604,7 @@ __DEV__ &&
1458114604
);
1458214605
popComponentEffectStart(prevEffectStart);
1458314606
popComponentEffectDuration(prevEffectDuration);
14607+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1458414608
componentEffectErrors = prevEffectErrors;
1458514609
}
1458614610
function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
@@ -14593,7 +14617,8 @@ __DEV__ &&
1459314617
nearestMountedAncestor = nearestMountedAncestor$jscomp$0,
1459414618
prevEffectStart = pushComponentEffectStart(),
1459514619
prevEffectDuration = pushComponentEffectDuration(),
14596-
prevEffectErrors = pushComponentEffectErrors();
14620+
prevEffectErrors = pushComponentEffectErrors(),
14621+
prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate();
1459714622
switch (current.tag) {
1459814623
case 0:
1459914624
case 11:
@@ -14675,7 +14700,7 @@ __DEV__ &&
1467514700
0 !== (current.mode & 2) &&
1467614701
0 <= componentEffectStartTime &&
1467714702
0 <= componentEffectEndTime &&
14678-
0.05 < componentEffectDuration &&
14703+
(componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) &&
1467914704
logComponentEffect(
1468014705
current,
1468114706
componentEffectStartTime,
@@ -14685,6 +14710,7 @@ __DEV__ &&
1468514710
);
1468614711
popComponentEffectStart(prevEffectStart);
1468714712
popComponentEffectDuration(prevEffectDuration);
14713+
componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate;
1468814714
componentEffectErrors = prevEffectErrors;
1468914715
current = fiber.child;
1469014716
if (null !== current) (current.return = fiber), (nextEffect = current);
@@ -18274,6 +18300,7 @@ __DEV__ &&
1827418300
componentEffectStartTime = -1.1,
1827518301
componentEffectEndTime = -1.1,
1827618302
componentEffectErrors = null,
18303+
componentEffectSpawnedUpdate = !1,
1827718304
blockingClampTime = -0,
1827818305
blockingUpdateTime = -1.1,
1827918306
blockingUpdateTask = null,
@@ -20254,10 +20281,10 @@ __DEV__ &&
2025420281
(function () {
2025520282
var internals = {
2025620283
bundleType: 1,
20257-
version: "19.2.0-www-classic-d8a15c49-20250930",
20284+
version: "19.2.0-www-classic-063394cf-20250930",
2025820285
rendererPackageName: "react-art",
2025920286
currentDispatcherRef: ReactSharedInternals,
20260-
reconcilerVersion: "19.2.0-www-classic-d8a15c49-20250930"
20287+
reconcilerVersion: "19.2.0-www-classic-063394cf-20250930"
2026120288
};
2026220289
internals.overrideHookState = overrideHookState;
2026320290
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -20292,7 +20319,7 @@ __DEV__ &&
2029220319
exports.Shape = Shape;
2029320320
exports.Surface = Surface;
2029420321
exports.Text = Text;
20295-
exports.version = "19.2.0-www-classic-d8a15c49-20250930";
20322+
exports.version = "19.2.0-www-classic-063394cf-20250930";
2029620323
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
2029720324
"function" ===
2029820325
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

0 commit comments

Comments
 (0)