From 25a7eda8706083cc1ca75f46ddc6f94dcf9932c6 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 16 Jun 2026 10:08:55 -0700 Subject: [PATCH] Remove offscreen image request downgrading feature flag (#57226) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Pull Request resolved: https://github.com/react/react-native/pull/57226 This removes the experimental `enableImageRequestDowngradingForNonVisibleImages` feature flag and backs out the behavior it gated. When enabled, `ImageShadowNode` downgraded image requests to prefetch priority for images that layout determined did not intersect the viewport — threading an `ImageRequestPriority` through `ImageRequestParams` and the Apple image managers, and propagating per-node viewport frames during Yoga layout via `experimental_layoutOrigin`/`experimental_layoutFrame` on `LayoutContext`. The flag defaulted to off and was never enabled in a release, and the gated behavior did not deliver the expected improvement, so the feature is removed entirely: `` once again always requests at immediate priority. This deletes the feature flag, the `ImageRequestPriority` enum and the `ImageRequestParams::priority` field, the priority parameter on `RCTImageManager`/`RCTSyncImageManager`/`RCTImageManagerProtocol`, the `experimental_layout*` `LayoutContext` fields and their Yoga propagation, the iOS request-priority debug overlay, and the associated Fantom test scaffolding. The generated feature-flag sources and the C++ API snapshots are regenerated accordingly. Changelog: [Internal] Reviewed By: javache Differential Revision: D108411690 --- .../__tests__/Image-requestPriority-itest.js | 455 ------------------ .../Image/RCTImageComponentView.mm | 76 --- .../featureflags/ReactNativeFeatureFlags.kt | 8 +- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 +- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +- .../ReactNativeFeatureFlagsDefaults.kt | 4 +- .../ReactNativeFeatureFlagsLocalAccessor.kt | 13 +- .../ReactNativeFeatureFlagsProvider.kt | 4 +- .../JReactNativeFeatureFlagsCxxInterop.cpp | 16 +- .../JReactNativeFeatureFlagsCxxInterop.h | 5 +- .../featureflags/ReactNativeFeatureFlags.cpp | 6 +- .../featureflags/ReactNativeFeatureFlags.h | 7 +- .../ReactNativeFeatureFlagsAccessor.cpp | 134 +++--- .../ReactNativeFeatureFlagsAccessor.h | 6 +- .../ReactNativeFeatureFlagsDefaults.h | 6 +- .../ReactNativeFeatureFlagsDynamicProvider.h | 11 +- .../ReactNativeFeatureFlagsProvider.h | 3 +- .../NativeReactNativeFeatureFlags.cpp | 7 +- .../NativeReactNativeFeatureFlags.h | 4 +- .../components/image/ImageShadowNode.cpp | 55 +-- .../components/image/ImageShadowNode.h | 2 +- .../view/YogaLayoutableShadowNode.cpp | 23 +- .../react/renderer/core/LayoutContext.h | 13 - .../imagemanager/ImageRequestParams.h | 2 - .../imagemanager/ImageRequestParams.h | 8 +- .../renderer/imagemanager/ImageManager.mm | 4 +- .../imagemanager/ImageRequestParams.h | 7 +- .../renderer/imagemanager/RCTImageManager.h | 3 +- .../renderer/imagemanager/RCTImageManager.mm | 6 +- .../imagemanager/RCTImageManagerProtocol.h | 3 +- .../RCTImagePrimitivesConversions.h | 13 - .../imagemanager/RCTSyncImageManager.h | 3 +- .../imagemanager/RCTSyncImageManager.mm | 6 +- .../react/renderer/imagemanager/primitives.h | 5 - .../ReactNativeFeatureFlags.config.js | 11 - .../featureflags/ReactNativeFeatureFlags.js | 7 +- .../specs/NativeReactNativeFeatureFlags.js | 3 +- .../testing/fantom/specs/NativeFantom.js | 3 - .../tester/src/FantomImageManager.h | 78 --- .../tester/src/NativeFantom.cpp | 18 - .../tester/src/NativeFantom.h | 3 - .../tester/src/TesterAppDelegate.cpp | 4 - .../tester/src/TesterMountingManager.cpp | 1 - .../tester/src/TesterMountingManager.h | 2 - .../api-snapshots/ReactAndroidDebugCxx.api | 6 - .../api-snapshots/ReactAndroidNewarchCxx.api | 6 - .../api-snapshots/ReactAndroidReleaseCxx.api | 6 - .../api-snapshots/ReactAppleDebugCxx.api | 14 +- .../api-snapshots/ReactAppleNewarchCxx.api | 14 +- .../api-snapshots/ReactAppleReleaseCxx.api | 14 +- .../api-snapshots/ReactCommonDebugCxx.api | 5 - .../api-snapshots/ReactCommonNewarchCxx.api | 5 - .../api-snapshots/ReactCommonReleaseCxx.api | 5 - 53 files changed, 105 insertions(+), 1034 deletions(-) delete mode 100644 packages/react-native/Libraries/Image/__tests__/Image-requestPriority-itest.js delete mode 100644 private/react-native-fantom/tester/src/FantomImageManager.h diff --git a/packages/react-native/Libraries/Image/__tests__/Image-requestPriority-itest.js b/packages/react-native/Libraries/Image/__tests__/Image-requestPriority-itest.js deleted file mode 100644 index ae6a64f0977c..000000000000 --- a/packages/react-native/Libraries/Image/__tests__/Image-requestPriority-itest.js +++ /dev/null @@ -1,455 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @fantom_flags enableImageRequestDowngradingForNonVisibleImages:true - * @flow strict-local - * @format - */ - -import '@react-native/fantom/src/setUpDefaultReactNativeEnvironment'; - -import type {RootConfig} from '@react-native/fantom'; - -import * as Fantom from '@react-native/fantom'; -import * as React from 'react'; -import {Image, ScrollView, View} from 'react-native'; -import NativeFantom from 'react-native/src/private/testing/fantom/specs/NativeFantom'; - -const IMAGE_SOURCE = {uri: 'https://reactnative.dev/img/tiny_logo.png'}; -const UPDATED_IMAGE_SOURCE = { - uri: 'https://reactnative.dev/img/header_logo.svg', -}; - -type ImageRequestPriority = 'immediate' | 'prefetch'; - -function expectLatestImageRequestPriority( - element: React.MixedElement, - expectedPriority: ImageRequestPriority, - rootConfig?: RootConfig, -) { - const root = Fantom.createRoot({ - viewportWidth: 100, - viewportHeight: 100, - ...rootConfig, - }); - - Fantom.runTask(() => { - root.render(element); - }); - - expect(NativeFantom.getImageRequestCount(IMAGE_SOURCE.uri)).toBe(1); - expect(NativeFantom.getImageRequestPriority(IMAGE_SOURCE.uri)).toBe( - expectedPriority, - ); -} - -describe(' request priority', () => { - beforeEach(() => { - NativeFantom.clearImageRequests(); - }); - - afterEach(() => { - NativeFantom.clearImageRequests(); - }); - - it('requests visible images at immediate priority', () => { - expectLatestImageRequestPriority( - , - 'immediate', - ); - }); - - it('requests images below the viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - ); - }); - - it('requests images above the viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - ); - }); - - it('requests images left of the viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - ); - }); - - it('requests images right of the viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - ); - }); - - it('requests edge-touching images at prefetch priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - ); - }); - - it('requests one-pixel-overlapping images at immediate priority', () => { - expectLatestImageRequestPriority( - , - 'immediate', - ); - }); - - it('uses nested layout offsets when calculating priority', () => { - expectLatestImageRequestPriority( - - - , - 'prefetch', - ); - }); - - it('uses viewport offsets when calculating priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - { - viewportOffsetY: 25, - }, - ); - }); - - it('uses ScrollView content offsets when calculating priority', () => { - expectLatestImageRequestPriority( - - - , - 'immediate', - ); - }); - - it('requests images above the ScrollView viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - - - , - 'prefetch', - ); - }); - - it('requests images below the ScrollView viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - - - , - 'prefetch', - ); - }); - - it('uses smaller ScrollView content offsets when calculating priority', () => { - expectLatestImageRequestPriority( - - - , - 'immediate', - ); - }); - - it('uses horizontal ScrollView content offsets when calculating priority', () => { - expectLatestImageRequestPriority( - - - , - 'immediate', - ); - }); - - it('requests images left of a horizontal ScrollView viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - - - , - 'prefetch', - ); - }); - - it('requests images right of a horizontal ScrollView viewport at prefetch priority', () => { - expectLatestImageRequestPriority( - - - , - 'prefetch', - ); - }); - - it('uses image transforms when calculating priority', () => { - expectLatestImageRequestPriority( - , - 'immediate', - ); - }); - - it('uses image transforms that move images out of the viewport when calculating priority', () => { - expectLatestImageRequestPriority( - , - 'prefetch', - ); - }); - - it('uses image scale transforms when calculating priority', () => { - expectLatestImageRequestPriority( - , - 'immediate', - ); - }); - - it('uses ancestor transforms when calculating priority', () => { - expectLatestImageRequestPriority( - - - , - 'immediate', - ); - }); - - it('uses ancestor transforms that move images out of the viewport when calculating priority', () => { - expectLatestImageRequestPriority( - - - , - 'prefetch', - ); - }); - - it('updates priority when layout moves an image onscreen', () => { - const root = Fantom.createRoot({ - viewportWidth: 100, - viewportHeight: 100, - }); - - Fantom.runTask(() => { - root.render( - , - ); - }); - - expect(NativeFantom.getImageRequestCount(IMAGE_SOURCE.uri)).toBe(1); - expect(NativeFantom.getImageRequestPriority(IMAGE_SOURCE.uri)).toBe( - 'prefetch', - ); - - Fantom.runTask(() => { - root.render( - , - ); - }); - - expect(NativeFantom.getImageRequestCount(IMAGE_SOURCE.uri)).toBe(2); - expect(NativeFantom.getImageRequestPriority(IMAGE_SOURCE.uri)).toBe( - 'immediate', - ); - }); - - it('keeps offscreen priority when the source changes without a layout change', () => { - const root = Fantom.createRoot({ - viewportWidth: 100, - viewportHeight: 100, - }); - - const offscreenStyle = { - height: 50, - left: 0, - position: 'absolute', - top: 150, - width: 50, - } as const; - - Fantom.runTask(() => { - root.render(); - }); - - expect(NativeFantom.getImageRequestCount(IMAGE_SOURCE.uri)).toBe(1); - expect(NativeFantom.getImageRequestPriority(IMAGE_SOURCE.uri)).toBe( - 'prefetch', - ); - - NativeFantom.clearImageRequests(); - - Fantom.runTask(() => { - root.render( - , - ); - }); - - expect(NativeFantom.getImageRequestCount(UPDATED_IMAGE_SOURCE.uri)).toBe(1); - expect(NativeFantom.getImageRequestPriority(UPDATED_IMAGE_SOURCE.uri)).toBe( - 'prefetch', - ); - }); -}); diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm index 8f60235ca3b6..99104f0ec8fc 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm @@ -11,7 +11,6 @@ #import #import #import -#import #import #import #import @@ -20,40 +19,9 @@ using namespace facebook::react; -static NSString *const RCTImageRequestPriorityDebugOverlayEnabledEnvironmentVariable = - @"RCT_IMAGE_REQUEST_PRIORITY_DEBUG_OVERLAY"; - -static BOOL RCTImageRequestPriorityDebugOverlayEnabled() -{ - if (ReactNativeFeatureFlags::enableImageRequestDowngradingForNonVisibleImages()) { - static BOOL enabled = NO; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSDictionary *environment = [[NSProcessInfo processInfo] environment]; - enabled = [environment[RCTImageRequestPriorityDebugOverlayEnabledEnvironmentVariable] boolValue]; - }); - return enabled; - } else { - return NO; - } -} - -static NSString *RCTImageRequestPriorityDebugLabel(ImageRequestPriority priority) -{ - switch (priority) { - case ImageRequestPriority::Immediate: - return @"immediate"; - case ImageRequestPriority::Prefetch: - return @"offscreen"; - default: - return @"unknown"; - } -} - @implementation RCTImageComponentView { ImageShadowNode::ConcreteState::Shared _state; std::shared_ptr _imageResponseObserverProxy; - UILabel *_requestPriorityLabel; } - (instancetype)initWithFrame:(CGRect)frame @@ -117,7 +85,6 @@ - (void)updateState:(const State::Shared &)state oldState:(const State::Shared & auto newImageState = std::static_pointer_cast(state); [self _setStateAndResubscribeImageResponseObserver:newImageState]; - [self _updateRequestPriorityLabelWithState:newImageState]; bool havePreviousData = oldImageState && oldImageState->getData().getImageSource() != ImageSource{}; @@ -148,53 +115,10 @@ - (void)_setStateAndResubscribeImageResponseObserver:(const ImageShadowNode::Con } } -- (UILabel *)_requestPriorityLabel -{ - if (!_requestPriorityLabel) { - _requestPriorityLabel = [UILabel new]; - _requestPriorityLabel.accessibilityElementsHidden = YES; - _requestPriorityLabel.backgroundColor = [UIColor colorWithWhite:0 alpha:0.65]; - _requestPriorityLabel.clipsToBounds = YES; - _requestPriorityLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightSemibold]; - _requestPriorityLabel.hidden = YES; - _requestPriorityLabel.isAccessibilityElement = NO; - _requestPriorityLabel.layer.cornerRadius = 3; - _requestPriorityLabel.textAlignment = NSTextAlignmentCenter; - _requestPriorityLabel.textColor = UIColor.whiteColor; - [_imageView addSubview:_requestPriorityLabel]; - } - - return _requestPriorityLabel; -} - -- (void)_updateRequestPriorityLabelWithState:(const ImageShadowNode::ConcreteState::Shared &)state -{ - if (!state || !RCTImageRequestPriorityDebugOverlayEnabled()) { - if (_requestPriorityLabel) { - _requestPriorityLabel.hidden = YES; - _requestPriorityLabel.text = nil; - } - return; - } - - UILabel *requestPriorityLabel = [self _requestPriorityLabel]; - requestPriorityLabel.text = RCTImageRequestPriorityDebugLabel(state->getData().getImageRequestParams().priority); - [requestPriorityLabel sizeToFit]; - - CGRect frame = requestPriorityLabel.frame; - frame.origin = CGPointMake(2, 2); - frame.size.width += 8; - frame.size.height += 4; - requestPriorityLabel.frame = frame; - requestPriorityLabel.hidden = NO; - [_imageView bringSubviewToFront:requestPriorityLabel]; -} - - (void)prepareForRecycle { [super prepareForRecycle]; [self _setStateAndResubscribeImageResponseObserver:nullptr]; - [self _updateRequestPriorityLabelWithState:nullptr]; _imageView.image = nil; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index 997717fe9055..868600367575 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<00bb39539f4fc2dc0ad85a346bdee22b>> */ /** @@ -192,12 +192,6 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun enableImagePrefetchingAndroid(): Boolean = accessor.enableImagePrefetchingAndroid() - /** - * When enabled, ImageShadowNode downgrades image requests to prefetch priority when layout determines that the image does not intersect the viewport. - */ - @JvmStatic - public fun enableImageRequestDowngradingForNonVisibleImages(): Boolean = accessor.enableImageRequestDowngradingForNonVisibleImages() - /** * Dispatches state updates for content offset changes synchronously on the main thread. */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index d6cfca387018..a6e2a21f33c6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<5bf52aa57fc011858db9f632930bb8fb>> + * @generated SignedSource<<731e92ecac8dbdf0a4b204b763a2c8c7>> */ /** @@ -47,7 +47,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null private var enableIOSViewClipToPaddingBoxCache: Boolean? = null private var enableImagePrefetchingAndroidCache: Boolean? = null - private var enableImageRequestDowngradingForNonVisibleImagesCache: Boolean? = null private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null private var enableImperativeFocusCache: Boolean? = null private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null @@ -349,15 +348,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces return cached } - override fun enableImageRequestDowngradingForNonVisibleImages(): Boolean { - var cached = enableImageRequestDowngradingForNonVisibleImagesCache - if (cached == null) { - cached = ReactNativeFeatureFlagsCxxInterop.enableImageRequestDowngradingForNonVisibleImages() - enableImageRequestDowngradingForNonVisibleImagesCache = cached - } - return cached - } - override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean { var cached = enableImmediateUpdateModeForContentOffsetChangesCache if (cached == null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index f43d355cfb17..59fa21d68da9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<4c03e1b03360e7703ffd1d7aa0afc277>> + * @generated SignedSource<<4d0952ded695aec4a52b7b581ad19979>> */ /** @@ -82,8 +82,6 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun enableImagePrefetchingAndroid(): Boolean - @DoNotStrip @JvmStatic public external fun enableImageRequestDowngradingForNonVisibleImages(): Boolean - @DoNotStrip @JvmStatic public external fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean @DoNotStrip @JvmStatic public external fun enableImperativeFocus(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 54ff24362e67..3042b175d7b4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<98ed9f6f027f919cd31cd1e890750684>> + * @generated SignedSource<<4227353cb809dac40fe70d83154ba2bc>> */ /** @@ -77,8 +77,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun enableImagePrefetchingAndroid(): Boolean = false - override fun enableImageRequestDowngradingForNonVisibleImages(): Boolean = false - override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean = false override fun enableImperativeFocus(): Boolean = false diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index 8dbf083ab9b7..114ad7a526ea 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<156af11c13257170355284118e400435>> */ /** @@ -51,7 +51,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null private var enableIOSViewClipToPaddingBoxCache: Boolean? = null private var enableImagePrefetchingAndroidCache: Boolean? = null - private var enableImageRequestDowngradingForNonVisibleImagesCache: Boolean? = null private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null private var enableImperativeFocusCache: Boolean? = null private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null @@ -380,16 +379,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc return cached } - override fun enableImageRequestDowngradingForNonVisibleImages(): Boolean { - var cached = enableImageRequestDowngradingForNonVisibleImagesCache - if (cached == null) { - cached = currentProvider.enableImageRequestDowngradingForNonVisibleImages() - accessedFeatureFlags.add("enableImageRequestDowngradingForNonVisibleImages") - enableImageRequestDowngradingForNonVisibleImagesCache = cached - } - return cached - } - override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean { var cached = enableImmediateUpdateModeForContentOffsetChangesCache if (cached == null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index 8855e869f5b5..8908aaf3a057 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<4f18bde7c0680691cd6fceb63c41ad65>> + * @generated SignedSource<> */ /** @@ -77,8 +77,6 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun enableImagePrefetchingAndroid(): Boolean - @DoNotStrip public fun enableImageRequestDowngradingForNonVisibleImages(): Boolean - @DoNotStrip public fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean @DoNotStrip public fun enableImperativeFocus(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index bf7907626ecb..d99ee6ee4f35 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<13e7b6ef510a97b4210de914a015ae11>> + * @generated SignedSource<<671da9c60f7c7331ece553327ee3ab33>> */ /** @@ -201,12 +201,6 @@ class ReactNativeFeatureFlagsJavaProvider return method(javaProvider_); } - bool enableImageRequestDowngradingForNonVisibleImages() override { - static const auto method = - getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableImageRequestDowngradingForNonVisibleImages"); - return method(javaProvider_); - } - bool enableImmediateUpdateModeForContentOffsetChanges() override { static const auto method = getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableImmediateUpdateModeForContentOffsetChanges"); @@ -688,11 +682,6 @@ bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid( return ReactNativeFeatureFlags::enableImagePrefetchingAndroid(); } -bool JReactNativeFeatureFlagsCxxInterop::enableImageRequestDowngradingForNonVisibleImages( - facebook::jni::alias_ref /*unused*/) { - return ReactNativeFeatureFlags::enableImageRequestDowngradingForNonVisibleImages(); -} - bool JReactNativeFeatureFlagsCxxInterop::enableImmediateUpdateModeForContentOffsetChanges( facebook::jni::alias_ref /*unused*/) { return ReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges(); @@ -1090,9 +1079,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "enableImagePrefetchingAndroid", JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid), - makeNativeMethod( - "enableImageRequestDowngradingForNonVisibleImages", - JReactNativeFeatureFlagsCxxInterop::enableImageRequestDowngradingForNonVisibleImages), makeNativeMethod( "enableImmediateUpdateModeForContentOffsetChanges", JReactNativeFeatureFlagsCxxInterop::enableImmediateUpdateModeForContentOffsetChanges), diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index a8a0831561ab..a6feb96ac72f 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<4234522fd98acef7836d8050d0e7c82d>> + * @generated SignedSource<> */ /** @@ -111,9 +111,6 @@ class JReactNativeFeatureFlagsCxxInterop static bool enableImagePrefetchingAndroid( facebook::jni::alias_ref); - static bool enableImageRequestDowngradingForNonVisibleImages( - facebook::jni::alias_ref); - static bool enableImmediateUpdateModeForContentOffsetChanges( facebook::jni::alias_ref); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index a0227722197a..afd20ad674bc 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<0bafa89fa8781cb3c7aebf5d0bb8678e>> + * @generated SignedSource<<57f84b7025cf1fc77f5f99dfc4653fb4>> */ /** @@ -134,10 +134,6 @@ bool ReactNativeFeatureFlags::enableImagePrefetchingAndroid() { return getAccessor().enableImagePrefetchingAndroid(); } -bool ReactNativeFeatureFlags::enableImageRequestDowngradingForNonVisibleImages() { - return getAccessor().enableImageRequestDowngradingForNonVisibleImages(); -} - bool ReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges() { return getAccessor().enableImmediateUpdateModeForContentOffsetChanges(); } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index f00873e7700b..8761e43346ba 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<3fca574dc84a346c113e479d0583537c>> + * @generated SignedSource<> */ /** @@ -174,11 +174,6 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static bool enableImagePrefetchingAndroid(); - /** - * When enabled, ImageShadowNode downgrades image requests to prefetch priority when layout determines that the image does not intersect the viewport. - */ - RN_EXPORT static bool enableImageRequestDowngradingForNonVisibleImages(); - /** * Dispatches state updates for content offset changes synchronously on the main thread. */ diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index 5d234f7446f7..f0c2e39839b4 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<1ee65c6b449518e6ae582aa61effa2e3>> + * @generated SignedSource<<3effa01ecbf45e028b9268195920178b>> */ /** @@ -515,24 +515,6 @@ bool ReactNativeFeatureFlagsAccessor::enableImagePrefetchingAndroid() { return flagValue.value(); } -bool ReactNativeFeatureFlagsAccessor::enableImageRequestDowngradingForNonVisibleImages() { - auto flagValue = enableImageRequestDowngradingForNonVisibleImages_.load(); - - if (!flagValue.has_value()) { - // This block is not exclusive but it is not necessary. - // If multiple threads try to initialize the feature flag, we would only - // be accessing the provider multiple times but the end state of this - // instance and the returned flag value would be the same. - - markFlagAsAccessed(27, "enableImageRequestDowngradingForNonVisibleImages"); - - flagValue = currentProvider_->enableImageRequestDowngradingForNonVisibleImages(); - enableImageRequestDowngradingForNonVisibleImages_ = flagValue; - } - - return flagValue.value(); -} - bool ReactNativeFeatureFlagsAccessor::enableImmediateUpdateModeForContentOffsetChanges() { auto flagValue = enableImmediateUpdateModeForContentOffsetChanges_.load(); @@ -542,7 +524,7 @@ bool ReactNativeFeatureFlagsAccessor::enableImmediateUpdateModeForContentOffsetC // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(28, "enableImmediateUpdateModeForContentOffsetChanges"); + markFlagAsAccessed(27, "enableImmediateUpdateModeForContentOffsetChanges"); flagValue = currentProvider_->enableImmediateUpdateModeForContentOffsetChanges(); enableImmediateUpdateModeForContentOffsetChanges_ = flagValue; @@ -560,7 +542,7 @@ bool ReactNativeFeatureFlagsAccessor::enableImperativeFocus() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(29, "enableImperativeFocus"); + markFlagAsAccessed(28, "enableImperativeFocus"); flagValue = currentProvider_->enableImperativeFocus(); enableImperativeFocus_ = flagValue; @@ -578,7 +560,7 @@ bool ReactNativeFeatureFlagsAccessor::enableInteropViewManagerClassLookUpOptimiz // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(30, "enableInteropViewManagerClassLookUpOptimizationIOS"); + markFlagAsAccessed(29, "enableInteropViewManagerClassLookUpOptimizationIOS"); flagValue = currentProvider_->enableInteropViewManagerClassLookUpOptimizationIOS(); enableInteropViewManagerClassLookUpOptimizationIOS_ = flagValue; @@ -596,7 +578,7 @@ bool ReactNativeFeatureFlagsAccessor::enableIntersectionObserverByDefault() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(31, "enableIntersectionObserverByDefault"); + markFlagAsAccessed(30, "enableIntersectionObserverByDefault"); flagValue = currentProvider_->enableIntersectionObserverByDefault(); enableIntersectionObserverByDefault_ = flagValue; @@ -614,7 +596,7 @@ bool ReactNativeFeatureFlagsAccessor::enableKeyEvents() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(32, "enableKeyEvents"); + markFlagAsAccessed(31, "enableKeyEvents"); flagValue = currentProvider_->enableKeyEvents(); enableKeyEvents_ = flagValue; @@ -632,7 +614,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(33, "enableLayoutAnimationsOnAndroid"); + markFlagAsAccessed(32, "enableLayoutAnimationsOnAndroid"); flagValue = currentProvider_->enableLayoutAnimationsOnAndroid(); enableLayoutAnimationsOnAndroid_ = flagValue; @@ -650,7 +632,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnIOS() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(34, "enableLayoutAnimationsOnIOS"); + markFlagAsAccessed(33, "enableLayoutAnimationsOnIOS"); flagValue = currentProvider_->enableLayoutAnimationsOnIOS(); enableLayoutAnimationsOnIOS_ = flagValue; @@ -668,7 +650,7 @@ bool ReactNativeFeatureFlagsAccessor::enableModuleArgumentNSNullConversionIOS() // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(35, "enableModuleArgumentNSNullConversionIOS"); + markFlagAsAccessed(34, "enableModuleArgumentNSNullConversionIOS"); flagValue = currentProvider_->enableModuleArgumentNSNullConversionIOS(); enableModuleArgumentNSNullConversionIOS_ = flagValue; @@ -686,7 +668,7 @@ bool ReactNativeFeatureFlagsAccessor::enableMutationObserverByDefault() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(36, "enableMutationObserverByDefault"); + markFlagAsAccessed(35, "enableMutationObserverByDefault"); flagValue = currentProvider_->enableMutationObserverByDefault(); enableMutationObserverByDefault_ = flagValue; @@ -704,7 +686,7 @@ bool ReactNativeFeatureFlagsAccessor::enableNativeCSSParsing() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(37, "enableNativeCSSParsing"); + markFlagAsAccessed(36, "enableNativeCSSParsing"); flagValue = currentProvider_->enableNativeCSSParsing(); enableNativeCSSParsing_ = flagValue; @@ -722,7 +704,7 @@ bool ReactNativeFeatureFlagsAccessor::enableNetworkEventReporting() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(38, "enableNetworkEventReporting"); + markFlagAsAccessed(37, "enableNetworkEventReporting"); flagValue = currentProvider_->enableNetworkEventReporting(); enableNetworkEventReporting_ = flagValue; @@ -740,7 +722,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePreparedTextLayout() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(39, "enablePreparedTextLayout"); + markFlagAsAccessed(38, "enablePreparedTextLayout"); flagValue = currentProvider_->enablePreparedTextLayout(); enablePreparedTextLayout_ = flagValue; @@ -758,7 +740,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePropsUpdateReconciliationAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(40, "enablePropsUpdateReconciliationAndroid"); + markFlagAsAccessed(39, "enablePropsUpdateReconciliationAndroid"); flagValue = currentProvider_->enablePropsUpdateReconciliationAndroid(); enablePropsUpdateReconciliationAndroid_ = flagValue; @@ -776,7 +758,7 @@ bool ReactNativeFeatureFlagsAccessor::enableRuntimeSchedulerQueueClearingOnError // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(41, "enableRuntimeSchedulerQueueClearingOnError"); + markFlagAsAccessed(40, "enableRuntimeSchedulerQueueClearingOnError"); flagValue = currentProvider_->enableRuntimeSchedulerQueueClearingOnError(); enableRuntimeSchedulerQueueClearingOnError_ = flagValue; @@ -794,7 +776,7 @@ bool ReactNativeFeatureFlagsAccessor::enableSchedulerDelegateInvalidation() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(42, "enableSchedulerDelegateInvalidation"); + markFlagAsAccessed(41, "enableSchedulerDelegateInvalidation"); flagValue = currentProvider_->enableSchedulerDelegateInvalidation(); enableSchedulerDelegateInvalidation_ = flagValue; @@ -812,7 +794,7 @@ bool ReactNativeFeatureFlagsAccessor::enableSwiftUIBasedFilters() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(43, "enableSwiftUIBasedFilters"); + markFlagAsAccessed(42, "enableSwiftUIBasedFilters"); flagValue = currentProvider_->enableSwiftUIBasedFilters(); enableSwiftUIBasedFilters_ = flagValue; @@ -830,7 +812,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewCulling() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(44, "enableViewCulling"); + markFlagAsAccessed(43, "enableViewCulling"); flagValue = currentProvider_->enableViewCulling(); enableViewCulling_ = flagValue; @@ -848,7 +830,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecycling() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(45, "enableViewRecycling"); + markFlagAsAccessed(44, "enableViewRecycling"); flagValue = currentProvider_->enableViewRecycling(); enableViewRecycling_ = flagValue; @@ -866,7 +848,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecyclingForImage() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(46, "enableViewRecyclingForImage"); + markFlagAsAccessed(45, "enableViewRecyclingForImage"); flagValue = currentProvider_->enableViewRecyclingForImage(); enableViewRecyclingForImage_ = flagValue; @@ -884,7 +866,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecyclingForScrollView() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(47, "enableViewRecyclingForScrollView"); + markFlagAsAccessed(46, "enableViewRecyclingForScrollView"); flagValue = currentProvider_->enableViewRecyclingForScrollView(); enableViewRecyclingForScrollView_ = flagValue; @@ -902,7 +884,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecyclingForText() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(48, "enableViewRecyclingForText"); + markFlagAsAccessed(47, "enableViewRecyclingForText"); flagValue = currentProvider_->enableViewRecyclingForText(); enableViewRecyclingForText_ = flagValue; @@ -920,7 +902,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecyclingForView() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(49, "enableViewRecyclingForView"); + markFlagAsAccessed(48, "enableViewRecyclingForView"); flagValue = currentProvider_->enableViewRecyclingForView(); enableViewRecyclingForView_ = flagValue; @@ -938,7 +920,7 @@ bool ReactNativeFeatureFlagsAccessor::enableVirtualViewContainerStateExperimenta // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(50, "enableVirtualViewContainerStateExperimental"); + markFlagAsAccessed(49, "enableVirtualViewContainerStateExperimental"); flagValue = currentProvider_->enableVirtualViewContainerStateExperimental(); enableVirtualViewContainerStateExperimental_ = flagValue; @@ -956,7 +938,7 @@ bool ReactNativeFeatureFlagsAccessor::fixDifferentiatorParentTagForUnflattenCase // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(51, "fixDifferentiatorParentTagForUnflattenCase"); + markFlagAsAccessed(50, "fixDifferentiatorParentTagForUnflattenCase"); flagValue = currentProvider_->fixDifferentiatorParentTagForUnflattenCase(); fixDifferentiatorParentTagForUnflattenCase_ = flagValue; @@ -974,7 +956,7 @@ bool ReactNativeFeatureFlagsAccessor::fixMappingOfEventPrioritiesBetweenFabricAn // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(52, "fixMappingOfEventPrioritiesBetweenFabricAndReact"); + markFlagAsAccessed(51, "fixMappingOfEventPrioritiesBetweenFabricAndReact"); flagValue = currentProvider_->fixMappingOfEventPrioritiesBetweenFabricAndReact(); fixMappingOfEventPrioritiesBetweenFabricAndReact_ = flagValue; @@ -992,7 +974,7 @@ bool ReactNativeFeatureFlagsAccessor::fixYogaFlexBasisFitContentInMainAxis() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(53, "fixYogaFlexBasisFitContentInMainAxis"); + markFlagAsAccessed(52, "fixYogaFlexBasisFitContentInMainAxis"); flagValue = currentProvider_->fixYogaFlexBasisFitContentInMainAxis(); fixYogaFlexBasisFitContentInMainAxis_ = flagValue; @@ -1010,7 +992,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxAssertSingleHostState() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(54, "fuseboxAssertSingleHostState"); + markFlagAsAccessed(53, "fuseboxAssertSingleHostState"); flagValue = currentProvider_->fuseboxAssertSingleHostState(); fuseboxAssertSingleHostState_ = flagValue; @@ -1028,7 +1010,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledRelease() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(55, "fuseboxEnabledRelease"); + markFlagAsAccessed(54, "fuseboxEnabledRelease"); flagValue = currentProvider_->fuseboxEnabledRelease(); fuseboxEnabledRelease_ = flagValue; @@ -1046,7 +1028,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxFrameRecordingEnabled() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(56, "fuseboxFrameRecordingEnabled"); + markFlagAsAccessed(55, "fuseboxFrameRecordingEnabled"); flagValue = currentProvider_->fuseboxFrameRecordingEnabled(); fuseboxFrameRecordingEnabled_ = flagValue; @@ -1064,7 +1046,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxNetworkInspectionEnabled() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(57, "fuseboxNetworkInspectionEnabled"); + markFlagAsAccessed(56, "fuseboxNetworkInspectionEnabled"); flagValue = currentProvider_->fuseboxNetworkInspectionEnabled(); fuseboxNetworkInspectionEnabled_ = flagValue; @@ -1082,7 +1064,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxScreenshotCaptureEnabled() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(58, "fuseboxScreenshotCaptureEnabled"); + markFlagAsAccessed(57, "fuseboxScreenshotCaptureEnabled"); flagValue = currentProvider_->fuseboxScreenshotCaptureEnabled(); fuseboxScreenshotCaptureEnabled_ = flagValue; @@ -1100,7 +1082,7 @@ bool ReactNativeFeatureFlagsAccessor::optimizedAnimatedPropUpdates() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(59, "optimizedAnimatedPropUpdates"); + markFlagAsAccessed(58, "optimizedAnimatedPropUpdates"); flagValue = currentProvider_->optimizedAnimatedPropUpdates(); optimizedAnimatedPropUpdates_ = flagValue; @@ -1118,7 +1100,7 @@ bool ReactNativeFeatureFlagsAccessor::overrideBySynchronousMountPropsAtMountingA // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(60, "overrideBySynchronousMountPropsAtMountingAndroid"); + markFlagAsAccessed(59, "overrideBySynchronousMountPropsAtMountingAndroid"); flagValue = currentProvider_->overrideBySynchronousMountPropsAtMountingAndroid(); overrideBySynchronousMountPropsAtMountingAndroid_ = flagValue; @@ -1136,7 +1118,7 @@ bool ReactNativeFeatureFlagsAccessor::perfIssuesEnabled() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(61, "perfIssuesEnabled"); + markFlagAsAccessed(60, "perfIssuesEnabled"); flagValue = currentProvider_->perfIssuesEnabled(); perfIssuesEnabled_ = flagValue; @@ -1154,7 +1136,7 @@ bool ReactNativeFeatureFlagsAccessor::perfMonitorV2Enabled() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(62, "perfMonitorV2Enabled"); + markFlagAsAccessed(61, "perfMonitorV2Enabled"); flagValue = currentProvider_->perfMonitorV2Enabled(); perfMonitorV2Enabled_ = flagValue; @@ -1172,7 +1154,7 @@ double ReactNativeFeatureFlagsAccessor::preparedTextCacheSize() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(63, "preparedTextCacheSize"); + markFlagAsAccessed(62, "preparedTextCacheSize"); flagValue = currentProvider_->preparedTextCacheSize(); preparedTextCacheSize_ = flagValue; @@ -1190,7 +1172,7 @@ bool ReactNativeFeatureFlagsAccessor::preventShadowTreeCommitExhaustion() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(64, "preventShadowTreeCommitExhaustion"); + markFlagAsAccessed(63, "preventShadowTreeCommitExhaustion"); flagValue = currentProvider_->preventShadowTreeCommitExhaustion(); preventShadowTreeCommitExhaustion_ = flagValue; @@ -1208,7 +1190,7 @@ bool ReactNativeFeatureFlagsAccessor::redBoxV2Android() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(65, "redBoxV2Android"); + markFlagAsAccessed(64, "redBoxV2Android"); flagValue = currentProvider_->redBoxV2Android(); redBoxV2Android_ = flagValue; @@ -1226,7 +1208,7 @@ bool ReactNativeFeatureFlagsAccessor::redBoxV2IOS() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(66, "redBoxV2IOS"); + markFlagAsAccessed(65, "redBoxV2IOS"); flagValue = currentProvider_->redBoxV2IOS(); redBoxV2IOS_ = flagValue; @@ -1244,7 +1226,7 @@ bool ReactNativeFeatureFlagsAccessor::shouldPressibilityUseW3CPointerEventsForHo // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(67, "shouldPressibilityUseW3CPointerEventsForHover"); + markFlagAsAccessed(66, "shouldPressibilityUseW3CPointerEventsForHover"); flagValue = currentProvider_->shouldPressibilityUseW3CPointerEventsForHover(); shouldPressibilityUseW3CPointerEventsForHover_ = flagValue; @@ -1262,7 +1244,7 @@ bool ReactNativeFeatureFlagsAccessor::shouldTriggerResponderTransferOnScrollAndr // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(68, "shouldTriggerResponderTransferOnScrollAndroid"); + markFlagAsAccessed(67, "shouldTriggerResponderTransferOnScrollAndroid"); flagValue = currentProvider_->shouldTriggerResponderTransferOnScrollAndroid(); shouldTriggerResponderTransferOnScrollAndroid_ = flagValue; @@ -1280,7 +1262,7 @@ bool ReactNativeFeatureFlagsAccessor::skipActivityIdentityAssertionOnHostPause() // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(69, "skipActivityIdentityAssertionOnHostPause"); + markFlagAsAccessed(68, "skipActivityIdentityAssertionOnHostPause"); flagValue = currentProvider_->skipActivityIdentityAssertionOnHostPause(); skipActivityIdentityAssertionOnHostPause_ = flagValue; @@ -1298,7 +1280,7 @@ bool ReactNativeFeatureFlagsAccessor::syncAndroidClipBoundsWithOverflow() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(70, "syncAndroidClipBoundsWithOverflow"); + markFlagAsAccessed(69, "syncAndroidClipBoundsWithOverflow"); flagValue = currentProvider_->syncAndroidClipBoundsWithOverflow(); syncAndroidClipBoundsWithOverflow_ = flagValue; @@ -1316,7 +1298,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(71, "traceTurboModulePromiseRejectionsOnAndroid"); + markFlagAsAccessed(70, "traceTurboModulePromiseRejectionsOnAndroid"); flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid(); traceTurboModulePromiseRejectionsOnAndroid_ = flagValue; @@ -1334,7 +1316,7 @@ bool ReactNativeFeatureFlagsAccessor::updateRuntimeShadowNodeReferencesOnCommit( // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(72, "updateRuntimeShadowNodeReferencesOnCommit"); + markFlagAsAccessed(71, "updateRuntimeShadowNodeReferencesOnCommit"); flagValue = currentProvider_->updateRuntimeShadowNodeReferencesOnCommit(); updateRuntimeShadowNodeReferencesOnCommit_ = flagValue; @@ -1352,7 +1334,7 @@ bool ReactNativeFeatureFlagsAccessor::updateRuntimeShadowNodeReferencesOnCommitT // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(73, "updateRuntimeShadowNodeReferencesOnCommitThread"); + markFlagAsAccessed(72, "updateRuntimeShadowNodeReferencesOnCommitThread"); flagValue = currentProvider_->updateRuntimeShadowNodeReferencesOnCommitThread(); updateRuntimeShadowNodeReferencesOnCommitThread_ = flagValue; @@ -1370,7 +1352,7 @@ bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(74, "useAlwaysAvailableJSErrorHandling"); + markFlagAsAccessed(73, "useAlwaysAvailableJSErrorHandling"); flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling(); useAlwaysAvailableJSErrorHandling_ = flagValue; @@ -1388,7 +1370,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(75, "useFabricInterop"); + markFlagAsAccessed(74, "useFabricInterop"); flagValue = currentProvider_->useFabricInterop(); useFabricInterop_ = flagValue; @@ -1406,7 +1388,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(76, "useNativeViewConfigsInBridgelessMode"); + markFlagAsAccessed(75, "useNativeViewConfigsInBridgelessMode"); flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode(); useNativeViewConfigsInBridgelessMode_ = flagValue; @@ -1424,7 +1406,7 @@ bool ReactNativeFeatureFlagsAccessor::useNestedScrollViewAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(77, "useNestedScrollViewAndroid"); + markFlagAsAccessed(76, "useNestedScrollViewAndroid"); flagValue = currentProvider_->useNestedScrollViewAndroid(); useNestedScrollViewAndroid_ = flagValue; @@ -1442,7 +1424,7 @@ bool ReactNativeFeatureFlagsAccessor::useSharedAnimatedBackend() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(78, "useSharedAnimatedBackend"); + markFlagAsAccessed(77, "useSharedAnimatedBackend"); flagValue = currentProvider_->useSharedAnimatedBackend(); useSharedAnimatedBackend_ = flagValue; @@ -1460,7 +1442,7 @@ bool ReactNativeFeatureFlagsAccessor::useTraitHiddenOnAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(79, "useTraitHiddenOnAndroid"); + markFlagAsAccessed(78, "useTraitHiddenOnAndroid"); flagValue = currentProvider_->useTraitHiddenOnAndroid(); useTraitHiddenOnAndroid_ = flagValue; @@ -1478,7 +1460,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(80, "useTurboModuleInterop"); + markFlagAsAccessed(79, "useTurboModuleInterop"); flagValue = currentProvider_->useTurboModuleInterop(); useTurboModuleInterop_ = flagValue; @@ -1496,7 +1478,7 @@ double ReactNativeFeatureFlagsAccessor::viewCullingOutsetRatio() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(81, "viewCullingOutsetRatio"); + markFlagAsAccessed(80, "viewCullingOutsetRatio"); flagValue = currentProvider_->viewCullingOutsetRatio(); viewCullingOutsetRatio_ = flagValue; @@ -1514,7 +1496,7 @@ bool ReactNativeFeatureFlagsAccessor::viewTransitionEnabled() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(82, "viewTransitionEnabled"); + markFlagAsAccessed(81, "viewTransitionEnabled"); flagValue = currentProvider_->viewTransitionEnabled(); viewTransitionEnabled_ = flagValue; @@ -1532,7 +1514,7 @@ bool ReactNativeFeatureFlagsAccessor::viewTransitionUseHardwareBitmapAndroid() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(83, "viewTransitionUseHardwareBitmapAndroid"); + markFlagAsAccessed(82, "viewTransitionUseHardwareBitmapAndroid"); flagValue = currentProvider_->viewTransitionUseHardwareBitmapAndroid(); viewTransitionUseHardwareBitmapAndroid_ = flagValue; @@ -1550,7 +1532,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() { // be accessing the provider multiple times but the end state of this // instance and the returned flag value would be the same. - markFlagAsAccessed(84, "virtualViewPrerenderRatio"); + markFlagAsAccessed(83, "virtualViewPrerenderRatio"); flagValue = currentProvider_->virtualViewPrerenderRatio(); virtualViewPrerenderRatio_ = flagValue; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index c5419463dd3c..485fc0276531 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<80fcb1756caccd2259335a67984d76d5>> + * @generated SignedSource<> */ /** @@ -59,7 +59,6 @@ class ReactNativeFeatureFlagsAccessor { bool enableIOSTextBaselineOffsetPerLine(); bool enableIOSViewClipToPaddingBox(); bool enableImagePrefetchingAndroid(); - bool enableImageRequestDowngradingForNonVisibleImages(); bool enableImmediateUpdateModeForContentOffsetChanges(); bool enableImperativeFocus(); bool enableInteropViewManagerClassLookUpOptimizationIOS(); @@ -128,7 +127,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 85> accessedFeatureFlags_; + std::array, 84> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> cdpInteractionMetricsEnabled_; @@ -157,7 +156,6 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> enableIOSTextBaselineOffsetPerLine_; std::atomic> enableIOSViewClipToPaddingBox_; std::atomic> enableImagePrefetchingAndroid_; - std::atomic> enableImageRequestDowngradingForNonVisibleImages_; std::atomic> enableImmediateUpdateModeForContentOffsetChanges_; std::atomic> enableImperativeFocus_; std::atomic> enableInteropViewManagerClassLookUpOptimizationIOS_; diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 42e2ddea7424..94b133a46dca 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<94d2315cb9bfc2684e18770eff3a1cf6>> + * @generated SignedSource<> */ /** @@ -135,10 +135,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { return false; } - bool enableImageRequestDowngradingForNonVisibleImages() override { - return false; - } - bool enableImmediateUpdateModeForContentOffsetChanges() override { return false; } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h index a2e10dda1703..d01628a0839c 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<215e8b28994854f31f249a5e51623c87>> + * @generated SignedSource<> */ /** @@ -288,15 +288,6 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef return ReactNativeFeatureFlagsDefaults::enableImagePrefetchingAndroid(); } - bool enableImageRequestDowngradingForNonVisibleImages() override { - auto value = values_["enableImageRequestDowngradingForNonVisibleImages"]; - if (!value.isNull()) { - return value.getBool(); - } - - return ReactNativeFeatureFlagsDefaults::enableImageRequestDowngradingForNonVisibleImages(); - } - bool enableImmediateUpdateModeForContentOffsetChanges() override { auto value = values_["enableImmediateUpdateModeForContentOffsetChanges"]; if (!value.isNull()) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index aac79cc9f568..b9911886579f 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<928b5ecbceacccae311edf4be6685c91>> */ /** @@ -52,7 +52,6 @@ class ReactNativeFeatureFlagsProvider { virtual bool enableIOSTextBaselineOffsetPerLine() = 0; virtual bool enableIOSViewClipToPaddingBox() = 0; virtual bool enableImagePrefetchingAndroid() = 0; - virtual bool enableImageRequestDowngradingForNonVisibleImages() = 0; virtual bool enableImmediateUpdateModeForContentOffsetChanges() = 0; virtual bool enableImperativeFocus() = 0; virtual bool enableInteropViewManagerClassLookUpOptimizationIOS() = 0; diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index 594d3c9d7b1b..e566499b25f9 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<84ae8c7745f319878c329e07551bcc11>> */ /** @@ -179,11 +179,6 @@ bool NativeReactNativeFeatureFlags::enableImagePrefetchingAndroid( return ReactNativeFeatureFlags::enableImagePrefetchingAndroid(); } -bool NativeReactNativeFeatureFlags::enableImageRequestDowngradingForNonVisibleImages( - jsi::Runtime& /*runtime*/) { - return ReactNativeFeatureFlags::enableImageRequestDowngradingForNonVisibleImages(); -} - bool NativeReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges( jsi::Runtime& /*runtime*/) { return ReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges(); diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index b5ddcd8a969f..ff722eb7e57b 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<92d22193e04fdbd6cfb119d69496c065>> + * @generated SignedSource<<19abe441594bf45b32c5c9cdcd9ca8d4>> */ /** @@ -90,8 +90,6 @@ class NativeReactNativeFeatureFlags bool enableImagePrefetchingAndroid(jsi::Runtime& runtime); - bool enableImageRequestDowngradingForNonVisibleImages(jsi::Runtime& runtime); - bool enableImmediateUpdateModeForContentOffsetChanges(jsi::Runtime& runtime); bool enableImperativeFocus(jsi::Runtime& runtime); diff --git a/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.cpp index 1b05a1a4cedd..caea0e5fe5fe 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.cpp @@ -13,49 +13,12 @@ #include #include #include -#include #include namespace facebook::react { const char ImageComponentName[] = "Image"; -namespace { - -bool isImageVisible( - const LayoutContext& layoutContext, - const LayoutMetrics& layoutMetrics) { - if (layoutContext.viewportSize.width <= 0 || - layoutContext.viewportSize.height <= 0 || - layoutMetrics.frame.size.width <= 0 || - layoutMetrics.frame.size.height <= 0) { - return true; - } - - auto imageFrame = layoutContext.experimental_layoutFrame; - if (imageFrame.size.width <= 0 || imageFrame.size.height <= 0) { - imageFrame = Rect{ - .origin = layoutContext.experimental_layoutOrigin, - .size = layoutMetrics.frame.size}; - } - auto viewportFrame = Rect{ - .origin = layoutContext.viewportOffset, - .size = layoutContext.viewportSize}; - auto visibleFrame = Rect::intersect(imageFrame, viewportFrame); - - return visibleFrame.size.width > 0 && visibleFrame.size.height > 0; -} - -ImageRequestPriority getImageRequestPriority( - const LayoutContext& layoutContext, - const LayoutMetrics& layoutMetrics) { - return isImageVisible(layoutContext, layoutMetrics) - ? ImageRequestPriority::Immediate - : ImageRequestPriority::Prefetch; -} - -} // namespace - void ImageShadowNode::setImageManager( const std::shared_ptr& imageManager) { ensureUnsealed(); @@ -74,16 +37,12 @@ void ImageShadowNode::setImageManager( if (sources.size() <= 1 || (layoutMetric.frame.size.width > 0 && layoutMetric.frame.size.height > 0)) { - auto priority = ReactNativeFeatureFlags:: - enableImageRequestDowngradingForNonVisibleImages() - ? getStateData().getImageRequestParams().priority - : ImageRequestPriority::Immediate; - updateStateIfNeeded(priority); + updateStateIfNeeded(); } } } -void ImageShadowNode::updateStateIfNeeded(ImageRequestPriority priority) { +void ImageShadowNode::updateStateIfNeeded() { ensureUnsealed(); const auto& savedState = getStateData(); @@ -112,9 +71,6 @@ void ImageShadowNode::updateStateIfNeeded(ImageRequestPriority priority) { layoutMetrics_.frame.size.width * layoutMetrics_.pointScaleFactor, .height = layoutMetrics_.frame.size.height * layoutMetrics_.pointScaleFactor} -#else - , - priority #endif ); @@ -199,12 +155,7 @@ ImageSource ImageShadowNode::getImageSource() const { #pragma mark - LayoutableShadowNode void ImageShadowNode::layout(LayoutContext layoutContext) { - auto imageRequestPriority = - ReactNativeFeatureFlags:: - enableImageRequestDowngradingForNonVisibleImages() - ? getImageRequestPriority(layoutContext, getLayoutMetrics()) - : ImageRequestPriority::Immediate; - updateStateIfNeeded(imageRequestPriority); + updateStateIfNeeded(); ConcreteViewShadowNode::layout(layoutContext); } diff --git a/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.h b/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.h index d5e0f817913d..3ecd4672d12d 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.h +++ b/packages/react-native/ReactCommon/react/renderer/components/image/ImageShadowNode.h @@ -57,7 +57,7 @@ class ImageShadowNode final std::shared_ptr imageManager_; - void updateStateIfNeeded(ImageRequestPriority priority); + void updateStateIfNeeded(); }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp index 07f251da88cd..fb72421213ab 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp @@ -697,13 +697,6 @@ void YogaLayoutableShadowNode::layoutTree( yogaNode_.setHasNewLayout(false); } - if (ReactNativeFeatureFlags:: - enableImageRequestDowngradingForNonVisibleImages()) { - layoutContext.experimental_layoutOrigin = layoutContext.viewportOffset; - layoutContext.experimental_layoutFrame = Rect{ - .origin = layoutContext.viewportOffset, - .size = getLayoutMetrics().frame.size}; - } layout(layoutContext); } @@ -762,21 +755,7 @@ void YogaLayoutableShadowNode::layout(LayoutContext layoutContext) { childNode.setLayoutMetrics(newLayoutMetrics); if (newLayoutMetrics.displayType != DisplayType::None) { - auto childLayoutContext = layoutContext; - if (ReactNativeFeatureFlags:: - enableImageRequestDowngradingForNonVisibleImages()) { - auto childFrame = Rect{ - .origin = layoutContext.experimental_layoutOrigin + - newLayoutMetrics.frame.origin + getContentOriginOffset(false), - .size = newLayoutMetrics.frame.size}; - if (!childNode.getTraits().check( - ShadowNodeTraits::Trait::RootNodeKind)) { - childFrame = childFrame * childNode.getTransform(); - } - childLayoutContext.experimental_layoutOrigin = childFrame.origin; - childLayoutContext.experimental_layoutFrame = childFrame; - } - childNode.layout(childLayoutContext); + childNode.layout(layoutContext); } } } diff --git a/packages/react-native/ReactCommon/react/renderer/core/LayoutContext.h b/packages/react-native/ReactCommon/react/renderer/core/LayoutContext.h index 1fce65c8d972..f54f90159d40 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/LayoutContext.h +++ b/packages/react-native/ReactCommon/react/renderer/core/LayoutContext.h @@ -10,7 +10,6 @@ #include #include -#include namespace facebook::react { @@ -65,18 +64,6 @@ struct LayoutContext { * Viewport size is size of the React Native's root view. */ Size viewportSize{}; - - /* - * Experimental: Origin of the shadow node currently being laid out, in viewport - * coordinates. This is populated while walking the layout tree. - */ - Point experimental_layoutOrigin{}; - - /* - * Experimental: Frame of the shadow node currently being laid out, in viewport - * coordinates after layout transforms are applied. - */ - Rect experimental_layoutFrame{}; }; inline bool operator==(const LayoutContext &lhs, const LayoutContext &rhs) diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageRequestParams.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageRequestParams.h index e1008696d1b2..e960e01b5b5c 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageRequestParams.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageRequestParams.h @@ -61,8 +61,6 @@ class ImageRequestParams { ImageSource loadingIndicatorSource{}; std::string analyticTag{}; Size size{}; - // Consumed by Apple image managers for now; Android keeps Immediate. - ImageRequestPriority priority{ImageRequestPriority::Immediate}; bool operator==(const ImageRequestParams &rhs) const = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequestParams.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequestParams.h index 01cf22f44f47..a30f0103dda9 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequestParams.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequestParams.h @@ -8,21 +8,15 @@ #pragma once #include -#include namespace facebook::react { class ImageRequestParams { public: ImageRequestParams() = default; - explicit ImageRequestParams(Float blurRadius, ImageRequestPriority priority = ImageRequestPriority::Immediate) - : blurRadius(blurRadius), priority(priority) - { - } + explicit ImageRequestParams(Float blurRadius) : blurRadius(blurRadius) {} Float blurRadius{}; - // Consumed by Apple image managers for now; other platforms keep Immediate. - ImageRequestPriority priority{ImageRequestPriority::Immediate}; bool operator==(const ImageRequestParams &rhs) const = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageManager.mm b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageManager.mm index 3b65868977d6..7e15cdf0a4f2 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageManager.mm +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageManager.mm @@ -37,11 +37,11 @@ ImageRequest ImageManager::requestImage( const ImageSource &imageSource, SurfaceId surfaceId, - const ImageRequestParams &imageRequestParams, + const ImageRequestParams & /*imageRequestParams*/, Tag /*tag*/) const { RCTImageManager *imageManager = (__bridge RCTImageManager *)self_; - return [imageManager requestImage:imageSource surfaceId:surfaceId priority:imageRequestParams.priority]; + return [imageManager requestImage:imageSource surfaceId:surfaceId]; } } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageRequestParams.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageRequestParams.h index e9afe1108018..389f950ed317 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageRequestParams.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageRequestParams.h @@ -8,20 +8,15 @@ #pragma once #include -#include namespace facebook::react { class ImageRequestParams { public: ImageRequestParams() {} - ImageRequestParams(Float blurRadius, ImageRequestPriority priority = ImageRequestPriority::Immediate) - : blurRadius(blurRadius), priority(priority) - { - } + ImageRequestParams(Float blurRadius) : blurRadius(blurRadius) {} Float blurRadius{}; - ImageRequestPriority priority{ImageRequestPriority::Immediate}; bool operator==(const ImageRequestParams &rhs) const = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.h index 02e8a2f48e0a..da6223a542d2 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.h @@ -21,8 +21,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithImageLoader:(id)imageLoader; - (facebook::react::ImageRequest)requestImage:(facebook::react::ImageSource)imageSource - surfaceId:(facebook::react::SurfaceId)surfaceId - priority:(facebook::react::ImageRequestPriority)priority; + surfaceId:(facebook::react::SurfaceId)surfaceId; @end diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.mm b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.mm index 40691149f9b0..601dfe45ac38 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.mm +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.mm @@ -36,9 +36,7 @@ - (instancetype)initWithImageLoader:(id)i return self; } -- (ImageRequest)requestImage:(ImageSource)imageSource - surfaceId:(SurfaceId)surfaceId - priority:(ImageRequestPriority)priority +- (ImageRequest)requestImage:(ImageSource)imageSource surfaceId:(SurfaceId)surfaceId { TraceSection s("RCTImageManager::requestImage"); @@ -98,7 +96,7 @@ - (ImageRequest)requestImage:(ImageSource)imageSource scale:imageSource.scale clipped:NO resizeMode:RCTResizeModeStretch - priority:RCTImageLoaderPriorityFromImageRequestPriority(priority) + priority:RCTImageLoaderPriorityImmediate attribution:{ .surfaceId = surfaceId, } diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManagerProtocol.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManagerProtocol.h index 00ff2227cf28..30bfbf391e35 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManagerProtocol.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManagerProtocol.h @@ -12,6 +12,5 @@ @protocol RCTImageManagerProtocol - (facebook::react::ImageRequest)requestImage:(facebook::react::ImageSource)imageSource - surfaceId:(facebook::react::SurfaceId)surfaceId - priority:(facebook::react::ImageRequestPriority)priority; + surfaceId:(facebook::react::SurfaceId)surfaceId; @end diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h index 1eae15ae4c7a..a13e6fb6d408 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h @@ -31,19 +31,6 @@ inline static UIViewContentMode RCTContentModeFromImageResizeMode(facebook::reac } } -inline static RCTImageLoaderPriority RCTImageLoaderPriorityFromImageRequestPriority( - facebook::react::ImageRequestPriority imageRequestPriority) -{ - switch (imageRequestPriority) { - case facebook::react::ImageRequestPriority::Immediate: - return RCTImageLoaderPriorityImmediate; - case facebook::react::ImageRequestPriority::Prefetch: - return RCTImageLoaderPriorityPrefetch; - default: - return RCTImageLoaderPriorityImmediate; - } -} - inline std::string toString(const facebook::react::ImageResizeMode &value) { switch (value) { diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.h index 689956e429ab..395f65b9c6b1 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.h @@ -21,8 +21,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithImageLoader:(id)imageLoader; - (facebook::react::ImageRequest)requestImage:(facebook::react::ImageSource)imageSource - surfaceId:(facebook::react::SurfaceId)surfaceId - priority:(facebook::react::ImageRequestPriority)priority; + surfaceId:(facebook::react::SurfaceId)surfaceId; @end diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm index 43fbb6a66043..42681164c70b 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm @@ -34,9 +34,7 @@ - (instancetype)initWithImageLoader:(id)i return self; } -- (ImageRequest)requestImage:(ImageSource)imageSource - surfaceId:(SurfaceId)surfaceId - priority:(ImageRequestPriority)priority +- (ImageRequest)requestImage:(ImageSource)imageSource surfaceId:(SurfaceId)surfaceId { auto telemetry = std::make_shared(surfaceId); auto sharedCancelationFunction = SharedFunction<>(); @@ -84,7 +82,7 @@ - (ImageRequest)requestImage:(ImageSource)imageSource scale:imageSource.scale clipped:YES resizeMode:RCTResizeModeStretch - priority:RCTImageLoaderPriorityFromImageRequestPriority(priority) + priority:RCTImageLoaderPriorityImmediate attribution:{ .surfaceId = surfaceId, } diff --git a/packages/react-native/ReactCommon/react/renderer/imagemanager/primitives.h b/packages/react-native/ReactCommon/react/renderer/imagemanager/primitives.h index 2230b11aaef4..66407cdd6fb1 100644 --- a/packages/react-native/ReactCommon/react/renderer/imagemanager/primitives.h +++ b/packages/react-native/ReactCommon/react/renderer/imagemanager/primitives.h @@ -169,11 +169,6 @@ enum class ImageResizeMode : int8_t { None = 5, }; -enum class ImageRequestPriority : int8_t { - Immediate = 0, - Prefetch = 1, -}; - class ImageErrorInfo { public: std::string error{}; diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 9d7ca7f313be..7da4a28af89c 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -337,17 +337,6 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, - enableImageRequestDowngradingForNonVisibleImages: { - defaultValue: false, - metadata: { - dateAdded: '2026-05-21', - description: - 'When enabled, ImageShadowNode downgrades image requests to prefetch priority when layout determines that the image does not intersect the viewport.', - expectedReleaseValue: true, - purpose: 'experimentation', - }, - ossReleaseStage: 'none', - }, enableImmediateUpdateModeForContentOffsetChanges: { defaultValue: false, metadata: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index c68254956dc1..bac34fce1658 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> * @flow strict * @noformat */ @@ -76,7 +76,6 @@ export type ReactNativeFeatureFlags = Readonly<{ enableIOSTextBaselineOffsetPerLine: Getter, enableIOSViewClipToPaddingBox: Getter, enableImagePrefetchingAndroid: Getter, - enableImageRequestDowngradingForNonVisibleImages: Getter, enableImmediateUpdateModeForContentOffsetChanges: Getter, enableImperativeFocus: Getter, enableInteropViewManagerClassLookUpOptimizationIOS: Getter, @@ -318,10 +317,6 @@ export const enableIOSViewClipToPaddingBox: Getter = createNativeFlagGe * When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout */ export const enableImagePrefetchingAndroid: Getter = createNativeFlagGetter('enableImagePrefetchingAndroid', false); -/** - * When enabled, ImageShadowNode downgrades image requests to prefetch priority when layout determines that the image does not intersect the viewport. - */ -export const enableImageRequestDowngradingForNonVisibleImages: Getter = createNativeFlagGetter('enableImageRequestDowngradingForNonVisibleImages', false); /** * Dispatches state updates for content offset changes synchronously on the main thread. */ diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index 263f1ad402d4..1641e8560b8c 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<6bbb0c4532c0762c4ae2dd1d7bc43fb9>> + * @generated SignedSource<<39fb311e84bbff2ff76c8710d493d9d9>> * @flow strict * @noformat */ @@ -52,7 +52,6 @@ export interface Spec extends TurboModule { readonly enableIOSTextBaselineOffsetPerLine?: () => boolean; readonly enableIOSViewClipToPaddingBox?: () => boolean; readonly enableImagePrefetchingAndroid?: () => boolean; - readonly enableImageRequestDowngradingForNonVisibleImages?: () => boolean; readonly enableImmediateUpdateModeForContentOffsetChanges?: () => boolean; readonly enableImperativeFocus?: () => boolean; readonly enableInteropViewManagerClassLookUpOptimizationIOS?: () => boolean; diff --git a/packages/react-native/src/private/testing/fantom/specs/NativeFantom.js b/packages/react-native/src/private/testing/fantom/specs/NativeFantom.js index f5ea5136cff0..a47d97b9aacf 100644 --- a/packages/react-native/src/private/testing/fantom/specs/NativeFantom.js +++ b/packages/react-native/src/private/testing/fantom/specs/NativeFantom.js @@ -129,9 +129,6 @@ interface Spec extends TurboModule { setImageResponse(uri: string, imageResponse: ImageResponse): void; clearImage(uri: string): void; clearAllImages(): void; - getImageRequestCount(uri: string): number; - getImageRequestPriority(uri: string): string; - clearImageRequests(): void; } export default TurboModuleRegistry.getEnforcing( diff --git a/private/react-native-fantom/tester/src/FantomImageManager.h b/private/react-native-fantom/tester/src/FantomImageManager.h deleted file mode 100644 index 46c8d2c02ba2..000000000000 --- a/private/react-native-fantom/tester/src/FantomImageManager.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -#include -#include -#include -#include -#include -#include - -namespace facebook::react { - -struct FantomImageRequest { - std::string uri; - ImageRequestPriority priority; -}; - -inline std::string toString(ImageRequestPriority priority) -{ - switch (priority) { - case ImageRequestPriority::Immediate: - return "immediate"; - case ImageRequestPriority::Prefetch: - return "prefetch"; - } -} - -class FantomImageManager final : public ImageManager { - public: - FantomImageManager() : ImageManager(nullptr) {} - - ImageRequest requestImage( - const ImageSource &imageSource, - SurfaceId surfaceId, - const ImageRequestParams &imageRequestParams, - Tag /*tag*/) const override - { - requests_.push_back({imageSource.uri, imageRequestParams.priority}); - return {imageSource, std::make_shared(surfaceId), {}}; - } - - size_t getRequestCount(const std::string &uri) const - { - auto count = size_t{}; - for (const auto &request : requests_) { - if (request.uri == uri) { - ++count; - } - } - return count; - } - - std::string getLatestRequestPriority(const std::string &uri) const - { - for (auto it = requests_.rbegin(); it != requests_.rend(); ++it) { - if (it->uri == uri) { - return toString(it->priority); - } - } - return ""; - } - - void clearRequests() - { - requests_.clear(); - } - - private: - mutable std::vector requests_; -}; - -} // namespace facebook::react diff --git a/private/react-native-fantom/tester/src/NativeFantom.cpp b/private/react-native-fantom/tester/src/NativeFantom.cpp index ff1bcd3725d6..5b18de491450 100644 --- a/private/react-native-fantom/tester/src/NativeFantom.cpp +++ b/private/react-native-fantom/tester/src/NativeFantom.cpp @@ -317,22 +317,4 @@ void NativeFantom::clearAllImages(jsi::Runtime& /*rt*/) { appDelegate_.mountingManager_->imageLoader_->clearAllImages(); } -double NativeFantom::getImageRequestCount( - jsi::Runtime& /*rt*/, - const std::string& uri) { - return static_cast( - appDelegate_.mountingManager_->imageManager_->getRequestCount(uri)); -} - -std::string NativeFantom::getImageRequestPriority( - jsi::Runtime& /*rt*/, - const std::string& uri) { - return appDelegate_.mountingManager_->imageManager_->getLatestRequestPriority( - uri); -} - -void NativeFantom::clearImageRequests(jsi::Runtime& /*rt*/) { - appDelegate_.mountingManager_->imageManager_->clearRequests(); -} - } // namespace facebook::react diff --git a/private/react-native-fantom/tester/src/NativeFantom.h b/private/react-native-fantom/tester/src/NativeFantom.h index 1a69d456dcd7..2c0a19a20fb7 100644 --- a/private/react-native-fantom/tester/src/NativeFantom.h +++ b/private/react-native-fantom/tester/src/NativeFantom.h @@ -140,9 +140,6 @@ class NativeFantom : public NativeFantomCxxSpec { const NativeFantomSetImageResponseImageResponse &imageResponse); void clearImage(jsi::Runtime &rt, const std::string &uri); void clearAllImages(jsi::Runtime &rt); - double getImageRequestCount(jsi::Runtime &rt, const std::string &uri); - std::string getImageRequestPriority(jsi::Runtime &rt, const std::string &uri); - void clearImageRequests(jsi::Runtime &rt); private: TesterAppDelegate &appDelegate_; diff --git a/private/react-native-fantom/tester/src/TesterAppDelegate.cpp b/private/react-native-fantom/tester/src/TesterAppDelegate.cpp index 1ebdaee96470..1fad3777e2f1 100644 --- a/private/react-native-fantom/tester/src/TesterAppDelegate.cpp +++ b/private/react-native-fantom/tester/src/TesterAppDelegate.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -87,7 +86,6 @@ TesterAppDelegate::TesterAppDelegate( DevToolsHttpClientFactoryKey, getHttpClientFactory()); contextContainer->insert( DevToolsWebSocketClientFactoryKey, getWebSocketClientFactory()); - contextContainer->insert(ImageManagerKey, mountingManager_->imageManager_); runLoopObserverManager_ = std::make_shared(); @@ -193,7 +191,6 @@ void TesterAppDelegate::startSurface( LayoutContext layoutContext{ .pointScaleFactor = pointScaleFactor, .viewportOffset = {.x = offsetX, .y = offsetY}, - .viewportSize = extentsDp, }; reactHost_->startSurface( @@ -229,7 +226,6 @@ void TesterAppDelegate::updateSurfaceConstraints( LayoutContext layoutContext{ .pointScaleFactor = pointScaleFactor, - .viewportSize = extentsDp, }; reactHost_->setSurfaceConstraints( diff --git a/private/react-native-fantom/tester/src/TesterMountingManager.cpp b/private/react-native-fantom/tester/src/TesterMountingManager.cpp index 4fd1765bd33e..4526eace7d21 100644 --- a/private/react-native-fantom/tester/src/TesterMountingManager.cpp +++ b/private/react-native-fantom/tester/src/TesterMountingManager.cpp @@ -21,7 +21,6 @@ TesterMountingManager::TesterMountingManager( std::function&& onAfterMount) : onAfterMount_(onAfterMount), renderer_(std::make_unique()) { imageLoader_ = std::make_shared(); - imageManager_ = std::make_shared(); } void TesterMountingManager::executeMount( diff --git a/private/react-native-fantom/tester/src/TesterMountingManager.h b/private/react-native-fantom/tester/src/TesterMountingManager.h index c14a8a7e9334..cdfdf96d584d 100644 --- a/private/react-native-fantom/tester/src/TesterMountingManager.h +++ b/private/react-native-fantom/tester/src/TesterMountingManager.h @@ -8,7 +8,6 @@ #pragma once #include "FantomImageLoader.h" -#include "FantomImageManager.h" #include #include @@ -48,7 +47,6 @@ class TesterMountingManager : public IMountingManager { } std::shared_ptr imageLoader_; - std::shared_ptr imageManager_; std::shared_ptr getImageLoader() noexcept override { diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api index beaf187d8273..347d20311324 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api @@ -2611,7 +2611,6 @@ class facebook::react::ImageRequestParams { public facebook::react::Float blurRadius; public facebook::react::Float fadeDuration; public facebook::react::Float resizeMultiplier; - public facebook::react::ImageRequestPriority priority; public facebook::react::ImageResizeMode resizeMode; public facebook::react::ImageSource defaultSource; public facebook::react::ImageSource loadingIndicatorSource; @@ -6227,11 +6226,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api index cd0a69f6db16..c1a244f13f66 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api @@ -2593,7 +2593,6 @@ class facebook::react::ImageRequestParams { public facebook::react::Float blurRadius; public facebook::react::Float fadeDuration; public facebook::react::Float resizeMultiplier; - public facebook::react::ImageRequestPriority priority; public facebook::react::ImageResizeMode resizeMode; public facebook::react::ImageSource defaultSource; public facebook::react::ImageSource loadingIndicatorSource; @@ -6041,11 +6040,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api index bdc9fdc54f0f..658f8065fbb0 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api @@ -2608,7 +2608,6 @@ class facebook::react::ImageRequestParams { public facebook::react::Float blurRadius; public facebook::react::Float fadeDuration; public facebook::react::Float resizeMultiplier; - public facebook::react::ImageRequestPriority priority; public facebook::react::ImageResizeMode resizeMode; public facebook::react::ImageSource defaultSource; public facebook::react::ImageSource loadingIndicatorSource; @@ -6218,11 +6217,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index 323f80e5161f..9cfe36b68de6 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -1201,7 +1201,7 @@ interface RCTImageLoader : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); public virtual instancetype initWithImageLoader:(id imageLoader); } @@ -1940,7 +1940,7 @@ interface RCTSwitchComponentView : public RCTViewComponentView { } interface RCTSyncImageManager : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); public virtual instancetype initWithImageLoader:(id imageLoader); } @@ -2871,7 +2871,7 @@ protocol RCTImageLoaderWithAttributionProtocol : public RCTImageLoaderProtocol, } protocol RCTImageManagerProtocol : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); } protocol RCTImageRedirectProtocol { @@ -5009,10 +5009,9 @@ class facebook::react::ImageRequest { class facebook::react::ImageRequestParams { public ImageRequestParams(); - public ImageRequestParams(facebook::react::Float blurRadius, facebook::react::ImageRequestPriority priority = facebook::react::ImageRequestPriority::Immediate); + public ImageRequestParams(facebook::react::Float blurRadius); public bool operator==(const facebook::react::ImageRequestParams& rhs) const = default; public facebook::react::Float blurRadius; - public facebook::react::ImageRequestPriority priority; } class facebook::react::ImageResponse { @@ -8370,11 +8369,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index 0e9f7bf4394e..05cedbce3f5a 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -1199,7 +1199,7 @@ interface RCTImageLoader : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); public virtual instancetype initWithImageLoader:(id imageLoader); } @@ -1929,7 +1929,7 @@ interface RCTSwitchComponentView : public RCTViewComponentView { } interface RCTSyncImageManager : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); public virtual instancetype initWithImageLoader:(id imageLoader); } @@ -2859,7 +2859,7 @@ protocol RCTImageLoaderWithAttributionProtocol : public RCTImageLoaderProtocol, } protocol RCTImageManagerProtocol : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); } protocol RCTImageRedirectProtocol { @@ -4980,10 +4980,9 @@ class facebook::react::ImageRequest { class facebook::react::ImageRequestParams { public ImageRequestParams(); - public ImageRequestParams(facebook::react::Float blurRadius, facebook::react::ImageRequestPriority priority = facebook::react::ImageRequestPriority::Immediate); + public ImageRequestParams(facebook::react::Float blurRadius); public bool operator==(const facebook::react::ImageRequestParams& rhs) const = default; public facebook::react::Float blurRadius; - public facebook::react::ImageRequestPriority priority; } class facebook::react::ImageResponse { @@ -8212,11 +8211,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index 270a0c797f5e..5b98d91d467f 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -1201,7 +1201,7 @@ interface RCTImageLoader : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); public virtual instancetype initWithImageLoader:(id imageLoader); } @@ -1940,7 +1940,7 @@ interface RCTSwitchComponentView : public RCTViewComponentView { } interface RCTSyncImageManager : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); public virtual instancetype initWithImageLoader:(id imageLoader); } @@ -2871,7 +2871,7 @@ protocol RCTImageLoaderWithAttributionProtocol : public RCTImageLoaderProtocol, } protocol RCTImageManagerProtocol : public NSObject { - public virtual facebook::react::ImageRequest requestImage:surfaceId:priority:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId, facebook::react::ImageRequestPriority priority); + public virtual facebook::react::ImageRequest requestImage:surfaceId:(facebook::react::ImageSource imageSource, facebook::react::SurfaceId surfaceId); } protocol RCTImageRedirectProtocol { @@ -5006,10 +5006,9 @@ class facebook::react::ImageRequest { class facebook::react::ImageRequestParams { public ImageRequestParams(); - public ImageRequestParams(facebook::react::Float blurRadius, facebook::react::ImageRequestPriority priority = facebook::react::ImageRequestPriority::Immediate); + public ImageRequestParams(facebook::react::Float blurRadius); public bool operator==(const facebook::react::ImageRequestParams& rhs) const = default; public facebook::react::Float blurRadius; - public facebook::react::ImageRequestPriority priority; } class facebook::react::ImageResponse { @@ -8361,11 +8360,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api index 39c05b7ffbe5..029bdefe3fa0 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api @@ -4589,11 +4589,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api index e0293739574a..bf58f8941d07 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api @@ -4443,11 +4443,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain, diff --git a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api index 0ccad701dc85..ddeb42c6e2a6 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api @@ -4580,11 +4580,6 @@ enum facebook::react::HyphenationFrequency { Normal, } -enum facebook::react::ImageRequestPriority : int8_t { - Immediate, - Prefetch, -} - enum facebook::react::ImageResizeMode : int8_t { Center, Contain,