From 354772952a8228255cc7e8e32906e427e5255c30 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Wed, 20 Apr 2022 10:26:25 -0400 Subject: [PATCH] Land enableSelectiveHydration flag (#24406) This flag is already enabled on all relevant surfaces. We can remove it. --- .../src/events/ReactDOMEventReplaying.js | 93 +++++++++---------- packages/shared/ReactFeatureFlags.js | 1 - .../forks/ReactFeatureFlags.native-fb.js | 1 - .../forks/ReactFeatureFlags.native-oss.js | 1 - .../forks/ReactFeatureFlags.test-renderer.js | 1 - .../ReactFeatureFlags.test-renderer.native.js | 1 - .../ReactFeatureFlags.test-renderer.www.js | 1 - .../shared/forks/ReactFeatureFlags.testing.js | 1 - .../forks/ReactFeatureFlags.testing.www.js | 1 - .../shared/forks/ReactFeatureFlags.www.js | 1 - 10 files changed, 43 insertions(+), 59 deletions(-) diff --git a/packages/react-dom/src/events/ReactDOMEventReplaying.js b/packages/react-dom/src/events/ReactDOMEventReplaying.js index 9de82a99a7be3..a5d669732b4ab 100644 --- a/packages/react-dom/src/events/ReactDOMEventReplaying.js +++ b/packages/react-dom/src/events/ReactDOMEventReplaying.js @@ -14,10 +14,7 @@ import type {EventSystemFlags} from './EventSystemFlags'; import type {FiberRoot} from 'react-reconciler/src/ReactInternalTypes'; import type {EventPriority} from 'react-reconciler/src/ReactEventPriorities'; -import { - enableSelectiveHydration, - enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay, -} from 'shared/ReactFeatureFlags'; +import {enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay} from 'shared/ReactFeatureFlags'; import { unstable_scheduleCallback as scheduleCallback, unstable_NormalPriority as NormalPriority, @@ -204,27 +201,25 @@ export function queueDiscreteEvent( nativeEvent, ); queuedDiscreteEvents.push(queuedEvent); - if (enableSelectiveHydration) { - if (queuedDiscreteEvents.length === 1) { - // If this was the first discrete event, we might be able to - // synchronously unblock it so that preventDefault still works. - while (queuedEvent.blockedOn !== null) { - const fiber = getInstanceFromNode(queuedEvent.blockedOn); - if (fiber === null) { - break; - } - attemptSynchronousHydration(fiber); - if (queuedEvent.blockedOn === null) { - // We got unblocked by hydration. Let's try again. - replayUnblockedEvents(); - // If we're reblocked, on an inner boundary, we might need - // to attempt hydrating that one. - continue; - } else { - // We're still blocked from hydration, we have to give up - // and replay later. - break; - } + if (queuedDiscreteEvents.length === 1) { + // If this was the first discrete event, we might be able to + // synchronously unblock it so that preventDefault still works. + while (queuedEvent.blockedOn !== null) { + const fiber = getInstanceFromNode(queuedEvent.blockedOn); + if (fiber === null) { + break; + } + attemptSynchronousHydration(fiber); + if (queuedEvent.blockedOn === null) { + // We got unblocked by hydration. Let's try again. + replayUnblockedEvents(); + // If we're reblocked, on an inner boundary, we might need + // to attempt hydrating that one. + continue; + } else { + // We're still blocked from hydration, we have to give up + // and replay later. + break; } } } @@ -428,33 +423,31 @@ function attemptExplicitHydrationTarget( } export function queueExplicitHydrationTarget(target: Node): void { - if (enableSelectiveHydration) { - // TODO: This will read the priority if it's dispatched by the React - // event system but not native events. Should read window.event.type, like - // we do for updates (getCurrentEventPriority). - const updatePriority = getCurrentUpdatePriority(); - const queuedTarget: QueuedHydrationTarget = { - blockedOn: null, - target: target, - priority: updatePriority, - }; - let i = 0; - for (; i < queuedExplicitHydrationTargets.length; i++) { - // Stop once we hit the first target with lower priority than - if ( - !isHigherEventPriority( - updatePriority, - queuedExplicitHydrationTargets[i].priority, - ) - ) { - break; - } - } - queuedExplicitHydrationTargets.splice(i, 0, queuedTarget); - if (i === 0) { - attemptExplicitHydrationTarget(queuedTarget); + // TODO: This will read the priority if it's dispatched by the React + // event system but not native events. Should read window.event.type, like + // we do for updates (getCurrentEventPriority). + const updatePriority = getCurrentUpdatePriority(); + const queuedTarget: QueuedHydrationTarget = { + blockedOn: null, + target: target, + priority: updatePriority, + }; + let i = 0; + for (; i < queuedExplicitHydrationTargets.length; i++) { + // Stop once we hit the first target with lower priority than + if ( + !isHigherEventPriority( + updatePriority, + queuedExplicitHydrationTargets[i].priority, + ) + ) { + break; } } + queuedExplicitHydrationTargets.splice(i, 0, queuedTarget); + if (i === 0) { + attemptExplicitHydrationTarget(queuedTarget); + } } function attemptReplayContinuousQueuedEvent( diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index c2a128741d996..8f2872de99f14 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -13,7 +13,6 @@ // Flags that can likely be deleted or landed without consequences // ----------------------------------------------------------------------------- -export const enableSelectiveHydration = true; export const warnAboutDeprecatedLifecycles = true; export const enableComponentStackLocations = true; export const disableSchedulerTimeoutBasedOnReactExpirationTime = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index a70d239582938..4aa7a4187f60f 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -26,7 +26,6 @@ export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = __PROFILE__; -export const enableSelectiveHydration = false; export const enableCache = false; export const enableCacheElement = true; export const enableSchedulerDebugging = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index 5768925fdd0bb..a210ced18e6a9 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -20,7 +20,6 @@ export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = __PROFILE__; -export const enableSelectiveHydration = false; export const enableCache = false; export const enableCacheElement = false; export const disableJavaScriptURLs = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index 6c5c9ffe65967..c4d6d046a3c91 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -20,7 +20,6 @@ export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = false; -export const enableSelectiveHydration = false; export const enableCache = __EXPERIMENTAL__; export const enableCacheElement = __EXPERIMENTAL__; export const disableJavaScriptURLs = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js index dfc904212e61b..aee9188ca8969 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js @@ -20,7 +20,6 @@ export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = false; -export const enableSelectiveHydration = false; export const enableCache = true; export const enableCacheElement = true; export const disableJavaScriptURLs = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index 23228bf8b0ec1..340b180dd4d70 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -20,7 +20,6 @@ export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = false; -export const enableSelectiveHydration = false; export const enableCache = true; export const enableCacheElement = true; export const enableSchedulerDebugging = false; diff --git a/packages/shared/forks/ReactFeatureFlags.testing.js b/packages/shared/forks/ReactFeatureFlags.testing.js index 87e9fd0fe7d6b..3b7013f5bacdf 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.js @@ -20,7 +20,6 @@ export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = false; -export const enableSelectiveHydration = false; export const enableCache = __EXPERIMENTAL__; export const enableCacheElement = __EXPERIMENTAL__; export const disableJavaScriptURLs = false; diff --git a/packages/shared/forks/ReactFeatureFlags.testing.www.js b/packages/shared/forks/ReactFeatureFlags.testing.www.js index fdb4725c47b4c..15e4ac5e6d6e0 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.www.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.www.js @@ -20,7 +20,6 @@ export const enableProfilerCommitHooks = false; export const enableProfilerNestedUpdatePhase = false; export const enableProfilerNestedUpdateScheduledHook = false; export const enableUpdaterTracking = false; -export const enableSelectiveHydration = true; export const enableCache = true; export const enableCacheElement = true; export const disableJavaScriptURLs = true; diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index 8e6b57b25b1b1..0d0fbf1a06265 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -67,7 +67,6 @@ export const disableLegacyContext = __EXPERIMENTAL__; export const warnAboutStringRefs = false; export const warnAboutDefaultPropsOnFunctionComponents = false; export const enableGetInspectorDataForInstanceInProduction = false; -export const enableSelectiveHydration = true; export const enableCache = true; export const enableCacheElement = true;