@samitouri / QOS-React-1 / commits / 6ca7fbe884

[Fiber] Gate Update flag on BeforeMutationMask on flags (#31921)

We're currently visiting the snapshot phase for every `Update` flag even though we rarely have to do anything in the Snapshot phase. The only flags that seem to use these wider visits is `enableCreateEventHandleAPI` and `enableUseEffectEventHook` but really neither of those should do that neither. They should schedule explicit Snapshot phases if needed.

Sebastian Markbåge committed Jan 2, 2025 at 14:34 UTC 6ca7fbe884d17ef6c18d143421cc3e232bbba516
1 file changed +11 -6
packages/react-reconciler/src/ReactFiberFlags.js
+11 -6
@@ -7,7 +7,10 @@
7 * @flow
8 */
9
10 -import {enableCreateEventHandleAPI} from 'shared/ReactFeatureFlags';
10 +import {
11 + enableCreateEventHandleAPI,
12 + enableUseEffectEventHook,
13 +} from 'shared/ReactFeatureFlags';
14
15 export type Flags = number;
16
@@ -77,17 +80,19 @@ export const MountPassiveDev = /* */ 0b1000000000000000000000000000
80 // don't contain effects, by checking subtreeFlags.
81
82 export const BeforeMutationMask: number =
80 - // TODO: Remove Update flag from before mutation phase by re-landing Visibility
81 - // flag logic (see #20043)
82 - Update |
83 Snapshot |
84 (enableCreateEventHandleAPI
85 ? // createEventHandle needs to visit deleted and hidden trees to
86 // fire beforeblur
87 // TODO: Only need to visit Deletions during BeforeMutation phase if an
88 // element is focused.
89 - ChildDeletion | Visibility
90 - : 0);
89 + Update | ChildDeletion | Visibility
90 + : enableUseEffectEventHook
91 + ? // TODO: The useEffectEvent hook uses the snapshot phase for clean up but it
92 + // really should use the mutation phase for this or at least schedule an
93 + // explicit Snapshot phase flag for this.
94 + Update
95 + : 0);
96
97 export const MutationMask =
98 Placement |