diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js index d5a1a2e2ca..d8dd1c74f3 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js @@ -149,6 +149,7 @@ import { Mutation as MutationSubtreeTag, Layout as LayoutSubtreeTag, Passive as PassiveSubtreeTag, + PassiveStatic as PassiveStaticSubtreeTag, } from './ReactSubtreeTags'; import { NoLanePriority, @@ -1901,6 +1902,9 @@ function resetChildLanes(completedWork: Fiber) { if ((effectTag & PassiveMask) !== NoEffect) { subtreeTag |= PassiveSubtreeTag; } + if ((effectTag & PassiveStatic) !== NoEffect) { + subtreeTag |= PassiveStaticSubtreeTag; + } // When a fiber is cloned, its actualDuration is reset to 0. This value will // only be updated if work is done on the fiber (i.e. it doesn't bailout). @@ -1951,6 +1955,9 @@ function resetChildLanes(completedWork: Fiber) { if ((effectTag & PassiveMask) !== NoEffect) { subtreeTag |= PassiveSubtreeTag; } + if ((effectTag & PassiveStatic) !== NoEffect) { + subtreeTag |= PassiveStaticSubtreeTag; + } child = child.sibling; } @@ -2784,8 +2791,9 @@ function flushPassiveUnmountEffects(firstChild: Fiber): void { for (let i = 0; i < deletions.length; i++) { const fiberToDelete = deletions[i]; // If this fiber (or anything below it) has passive effects then traverse the subtree. - const primaryEffectTag = fiberToDelete.effectTag & PassiveMask; - const primarySubtreeTag = fiberToDelete.subtreeTag & PassiveSubtreeTag; + const primaryEffectTag = fiberToDelete.effectTag & PassiveStatic; + const primarySubtreeTag = + fiberToDelete.subtreeTag & PassiveStaticSubtreeTag; if ( primarySubtreeTag !== NoSubtreeTag || primaryEffectTag !== NoEffect @@ -2837,7 +2845,7 @@ function flushPassiveUnmountEffectsInsideOfDeletedTree( // Note that this requires checking subtreeTag of the current Fiber, // rather than the subtreeTag/effectsTag of the first child, // since that would not cover passive effects in siblings. - const primarySubtreeTag = fiber.subtreeTag & PassiveSubtreeTag; + const primarySubtreeTag = fiber.subtreeTag & PassiveStaticSubtreeTag; if (primarySubtreeTag !== NoSubtreeTag) { flushPassiveUnmountEffectsInsideOfDeletedTree(child); } diff --git a/packages/react-reconciler/src/ReactSideEffectTags.js b/packages/react-reconciler/src/ReactSideEffectTags.js index 2af6d5369a..7a1aaf5bea 100644 --- a/packages/react-reconciler/src/ReactSideEffectTags.js +++ b/packages/react-reconciler/src/ReactSideEffectTags.js @@ -51,7 +51,7 @@ export const PassiveStatic = /* */ 0b1000000000000000; export const BeforeMutationMask = /* */ 0b0000001100001010; export const MutationMask = /* */ 0b0000010010011110; export const LayoutMask = /* */ 0b0000000010100100; -export const PassiveMask = /* */ 0b1000001000001000; +export const PassiveMask = /* */ 0b0000001000001000; // Union of tags that don't get reset on clones. // This allows certain concepts to persist without recalculting them, diff --git a/packages/react-reconciler/src/ReactSubtreeTags.js b/packages/react-reconciler/src/ReactSubtreeTags.js index 536d9e074b..6223fe8bca 100644 --- a/packages/react-reconciler/src/ReactSubtreeTags.js +++ b/packages/react-reconciler/src/ReactSubtreeTags.js @@ -9,8 +9,9 @@ export type SubtreeTag = number; -export const NoEffect = /* */ 0b0000; -export const BeforeMutation = /* */ 0b0001; -export const Mutation = /* */ 0b0010; -export const Layout = /* */ 0b0100; -export const Passive = /* */ 0b1000; +export const NoEffect = /* */ 0b00000; +export const BeforeMutation = /* */ 0b00001; +export const Mutation = /* */ 0b00010; +export const Layout = /* */ 0b00100; +export const Passive = /* */ 0b01000; +export const PassiveStatic = /* */ 0b10000; diff --git a/packages/react-reconciler/src/__tests__/SchedulingProfiler-test.internal.js b/packages/react-reconciler/src/__tests__/SchedulingProfiler-test.internal.js index 4a184a8157..3afc4bfb54 100644 --- a/packages/react-reconciler/src/__tests__/SchedulingProfiler-test.internal.js +++ b/packages/react-reconciler/src/__tests__/SchedulingProfiler-test.internal.js @@ -526,8 +526,6 @@ describe('SchedulingProfiler', () => { '--layout-effects-start-1024', '--layout-effects-stop', '--commit-stop', - '--passive-effects-start-1024', - '--passive-effects-stop', ]); } });