react-native 0.83.0-nightly-20250922-5ef054921 → 0.83.0-nightly-20250924-53f89bacd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/Animated/components/AnimatedFlatList.js +5 -3
- package/Libraries/Animated/components/AnimatedSectionList.js +2 -2
- package/Libraries/Components/TextInput/TextInput.js +6 -0
- package/Libraries/Components/View/ViewNativeComponent.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Utilities/DevLoadingView.js +14 -6
- package/Libraries/Utilities/HMRClient.js +7 -4
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTAppearance.h +1 -1
- package/React/CoreModules/RCTDevLoadingView.mm +3 -10
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI-generated.cpp +6 -0
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +9 -0
- package/React/Views/RCTBorderDrawing.h +1 -1
- package/ReactAndroid/api/ReactAndroid.api +4 -1
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevLoadingViewImplementation.kt +13 -3
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +7 -14
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorDevHelper.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +20 -31
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +7 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +3 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.kt +3 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationController.kt +22 -174
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +38 -3
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +13 -2
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +15 -1
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -1
- package/ReactAndroid/src/main/jni/react/jni/JReactMarker.h +6 -8
- package/ReactCommon/cxxreact/JSExecutor.h +1 -1
- package/ReactCommon/cxxreact/JSIndexedRAMBundle.h +4 -4
- package/ReactCommon/cxxreact/ReactMarker.h +6 -8
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.h +1 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +68 -50
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +4 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +5 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +10 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -1
- package/ReactCommon/react/renderer/components/text/RawTextShadowNode.cpp +1 -0
- package/ReactCommon/react/renderer/components/view/conversions.h +30 -3
- package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.cpp +26 -13
- package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.h +2 -0
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.h +8 -8
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.mm +3 -15
- package/package.json +8 -8
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +6 -1
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +2 -1
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +12 -2
- package/types_generated/Libraries/Components/View/ViewNativeComponent.d.ts +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AbstractLayoutAnimation.kt +0 -137
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.kt +0 -42
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.kt +0 -96
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.kt +0 -43
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.kt +0 -46
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.kt +0 -33
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.kt +0 -37
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutHandlingAnimation.kt +0 -42
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.kt +0 -66
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.kt +0 -77
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.kt +0 -98
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.kt +0 -62
|
@@ -14,8 +14,10 @@ import FlatList, {type FlatListProps} from '../../Lists/FlatList';
|
|
|
14
14
|
import createAnimatedComponent from '../createAnimatedComponent';
|
|
15
15
|
import * as React from 'react';
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
export default createAnimatedComponent(FlatList) as $FlowFixMe as component<
|
|
18
|
+
// $FlowExpectedError[unclear-type]
|
|
19
|
+
ItemT = any,
|
|
20
|
+
>(
|
|
19
21
|
ref?: React.RefSetter<FlatList<ItemT>>,
|
|
20
22
|
...props: AnimatedProps<FlatListProps<ItemT>>
|
|
21
|
-
)
|
|
23
|
+
);
|
|
@@ -15,7 +15,7 @@ import createAnimatedComponent from '../createAnimatedComponent';
|
|
|
15
15
|
import * as React from 'react';
|
|
16
16
|
|
|
17
17
|
// $FlowFixMe[incompatible-type]
|
|
18
|
-
export default
|
|
18
|
+
export default createAnimatedComponent(SectionList) as $FlowFixMe as component<
|
|
19
19
|
// $FlowExpectedError[unclear-type]
|
|
20
20
|
ItemT = any,
|
|
21
21
|
// $FlowExpectedError[unclear-type]
|
|
@@ -23,4 +23,4 @@ export default (createAnimatedComponent(SectionList): component<
|
|
|
23
23
|
>(
|
|
24
24
|
ref?: React.RefSetter<SectionList<ItemT, SectionT>>,
|
|
25
25
|
...props: AnimatedProps<SectionListProps<ItemT, SectionT>>
|
|
26
|
-
)
|
|
26
|
+
);
|
|
@@ -449,6 +449,12 @@ function InternalTextInput(props: TextInputProps): React.Node {
|
|
|
449
449
|
before we can get to the long term breaking change.
|
|
450
450
|
*/
|
|
451
451
|
if (instance != null) {
|
|
452
|
+
// Register the input immediately when the ref is set so that focus()
|
|
453
|
+
// can be called from ref callbacks
|
|
454
|
+
// Double registering during useLayoutEffect is fine, because the underlying
|
|
455
|
+
// state is a Set.
|
|
456
|
+
TextInputState.registerInput(instance);
|
|
457
|
+
|
|
452
458
|
// $FlowFixMe[prop-missing] - See the explanation above.
|
|
453
459
|
// $FlowFixMe[unsafe-object-assign]
|
|
454
460
|
Object.assign(instance, {
|
|
@@ -21,8 +21,8 @@ const ViewNativeComponent: HostComponent<Props> =
|
|
|
21
21
|
}));
|
|
22
22
|
|
|
23
23
|
interface NativeCommands {
|
|
24
|
-
+focus: () => void;
|
|
25
|
-
+blur: () => void;
|
|
24
|
+
+focus: (viewRef: HostInstance) => void;
|
|
25
|
+
+blur: (viewRef: HostInstance) => void;
|
|
26
26
|
+hotspotUpdate: (viewRef: HostInstance, x: number, y: number) => void;
|
|
27
27
|
+setPressed: (viewRef: HostInstance, pressed: boolean) => void;
|
|
28
28
|
}
|
|
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
|
|
|
29
29
|
static major: number = 0;
|
|
30
30
|
static minor: number = 83;
|
|
31
31
|
static patch: number = 0;
|
|
32
|
-
static prerelease: string | null = 'nightly-
|
|
32
|
+
static prerelease: string | null = 'nightly-20250924-53f89bacd';
|
|
33
33
|
|
|
34
34
|
static getVersionString(): string {
|
|
35
35
|
return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
|
|
@@ -14,29 +14,37 @@ import NativeDevLoadingView from './NativeDevLoadingView';
|
|
|
14
14
|
|
|
15
15
|
const COLOR_SCHEME = {
|
|
16
16
|
dark: {
|
|
17
|
+
load: {
|
|
18
|
+
backgroundColor: '#fafafa',
|
|
19
|
+
textColor: '#242526',
|
|
20
|
+
},
|
|
17
21
|
refresh: {
|
|
18
22
|
backgroundColor: '#2584e8',
|
|
19
23
|
textColor: '#ffffff',
|
|
20
24
|
},
|
|
21
|
-
|
|
22
|
-
backgroundColor: '#
|
|
23
|
-
textColor: '#
|
|
25
|
+
error: {
|
|
26
|
+
backgroundColor: '#1065AF',
|
|
27
|
+
textColor: '#ffffff',
|
|
24
28
|
},
|
|
25
29
|
},
|
|
26
30
|
default: {
|
|
31
|
+
load: {
|
|
32
|
+
backgroundColor: '#404040',
|
|
33
|
+
textColor: '#ffffff',
|
|
34
|
+
},
|
|
27
35
|
refresh: {
|
|
28
36
|
backgroundColor: '#2584e8',
|
|
29
37
|
textColor: '#ffffff',
|
|
30
38
|
},
|
|
31
|
-
|
|
32
|
-
backgroundColor: '#
|
|
39
|
+
error: {
|
|
40
|
+
backgroundColor: '#1065AF',
|
|
33
41
|
textColor: '#ffffff',
|
|
34
42
|
},
|
|
35
43
|
},
|
|
36
44
|
};
|
|
37
45
|
|
|
38
46
|
export default {
|
|
39
|
-
showMessage(message: string, type: 'load' | 'refresh') {
|
|
47
|
+
showMessage(message: string, type: 'load' | 'refresh' | 'error') {
|
|
40
48
|
if (NativeDevLoadingView) {
|
|
41
49
|
const colorScheme =
|
|
42
50
|
getColorScheme() === 'dark' ? COLOR_SCHEME.dark : COLOR_SCHEME.default;
|
|
@@ -232,8 +232,6 @@ Error: ${e.message}`;
|
|
|
232
232
|
});
|
|
233
233
|
|
|
234
234
|
client.on('error', data => {
|
|
235
|
-
DevLoadingView.hide();
|
|
236
|
-
|
|
237
235
|
if (data.type === 'GraphNotFoundError') {
|
|
238
236
|
client.close();
|
|
239
237
|
setHMRUnavailableReason(
|
|
@@ -253,8 +251,6 @@ Error: ${e.message}`;
|
|
|
253
251
|
});
|
|
254
252
|
|
|
255
253
|
client.on('close', closeEvent => {
|
|
256
|
-
DevLoadingView.hide();
|
|
257
|
-
|
|
258
254
|
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
|
|
259
255
|
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5
|
|
260
256
|
const isNormalOrUnsetCloseReason =
|
|
@@ -296,10 +292,17 @@ function setHMRUnavailableReason(reason: string) {
|
|
|
296
292
|
}
|
|
297
293
|
hmrUnavailableReason = reason;
|
|
298
294
|
|
|
295
|
+
const DevLoadingView = require('./DevLoadingView').default;
|
|
296
|
+
DevLoadingView.hide();
|
|
297
|
+
|
|
299
298
|
// We only want to show a warning if Fast Refresh is on *and* if we ever
|
|
300
299
|
// previously managed to connect successfully. We don't want to show
|
|
301
300
|
// the warning to native engineers who use cached bundles without Metro.
|
|
302
301
|
if (hmrClient.isEnabled() && didConnect) {
|
|
302
|
+
DevLoadingView.showMessage(
|
|
303
|
+
'Fast Refresh disconnected. Reload app to reconnect.',
|
|
304
|
+
'error',
|
|
305
|
+
);
|
|
303
306
|
console.warn(reason);
|
|
304
307
|
// (Not using the `warning` module to prevent a Buck cycle.)
|
|
305
308
|
}
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
|
|
|
24
24
|
RCTVersionMajor: @(0),
|
|
25
25
|
RCTVersionMinor: @(83),
|
|
26
26
|
RCTVersionPatch: @(0),
|
|
27
|
-
RCTVersionPrerelease: @"nightly-
|
|
27
|
+
RCTVersionPrerelease: @"nightly-20250924-53f89bacd",
|
|
28
28
|
};
|
|
29
29
|
});
|
|
30
30
|
return __rnVersion;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
#import <React/RCTEventEmitter.h>
|
|
13
13
|
|
|
14
14
|
RCT_EXTERN void RCTEnableAppearancePreference(BOOL enabled);
|
|
15
|
-
RCT_EXTERN void RCTOverrideAppearancePreference(NSString *
|
|
15
|
+
RCT_EXTERN void RCTOverrideAppearancePreference(NSString *);
|
|
16
16
|
RCT_EXTERN void RCTUseKeyWindowForSystemStyle(BOOL useMainScreen);
|
|
17
17
|
RCT_EXTERN NSString *RCTCurrentOverrideAppearancePreference(void);
|
|
18
18
|
RCT_EXTERN NSString *RCTColorSchemePreference(UITraitCollection *traitCollection);
|
|
@@ -85,14 +85,6 @@ RCT_EXPORT_MODULE()
|
|
|
85
85
|
dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC), dispatch_get_main_queue(), self->_initialMessageBlock);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
- (void)hideBannerAfter:(CGFloat)delay
|
|
89
|
-
{
|
|
90
|
-
// Cancel previous hide call after the delay.
|
|
91
|
-
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hide) object:nil];
|
|
92
|
-
// Set new hide call after a delay.
|
|
93
|
-
[self performSelector:@selector(hide) withObject:nil afterDelay:delay];
|
|
94
|
-
}
|
|
95
|
-
|
|
96
88
|
- (void)showMessage:(NSString *)message color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor
|
|
97
89
|
{
|
|
98
90
|
if (!RCTDevLoadingViewGetEnabled() || _hiding) {
|
|
@@ -128,6 +120,9 @@ RCT_EXPORT_MODULE()
|
|
|
128
120
|
self->_container = [[UIView alloc] init];
|
|
129
121
|
self->_container.backgroundColor = backgroundColor;
|
|
130
122
|
self->_container.translatesAutoresizingMaskIntoConstraints = NO;
|
|
123
|
+
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hide)];
|
|
124
|
+
[self->_container addGestureRecognizer:tapGesture];
|
|
125
|
+
self->_container.userInteractionEnabled = YES;
|
|
131
126
|
|
|
132
127
|
self->_label = [[UILabel alloc] init];
|
|
133
128
|
self->_label.translatesAutoresizingMaskIntoConstraints = NO;
|
|
@@ -158,8 +153,6 @@ RCT_EXPORT_MODULE()
|
|
|
158
153
|
[self->_label.centerXAnchor constraintEqualToAnchor:self->_container.centerXAnchor],
|
|
159
154
|
[self->_label.bottomAnchor constraintEqualToAnchor:self->_container.bottomAnchor constant:-5],
|
|
160
155
|
]];
|
|
161
|
-
|
|
162
|
-
[self hideBannerAfter:15.0];
|
|
163
156
|
});
|
|
164
157
|
}
|
|
165
158
|
|
|
@@ -212,6 +212,11 @@ static jsi::Value __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableI
|
|
|
212
212
|
rt
|
|
213
213
|
);
|
|
214
214
|
}
|
|
215
|
+
static jsi::Value __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImagePrefetchingJNIBatchingAndroid(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
216
|
+
return static_cast<NativeReactNativeFeatureFlagsCxxSpecJSI *>(&turboModule)->enableImagePrefetchingJNIBatchingAndroid(
|
|
217
|
+
rt
|
|
218
|
+
);
|
|
219
|
+
}
|
|
215
220
|
static jsi::Value __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImagePrefetchingOnUiThreadAndroid(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
216
221
|
return static_cast<NativeReactNativeFeatureFlagsCxxSpecJSI *>(&turboModule)->enableImagePrefetchingOnUiThreadAndroid(
|
|
217
222
|
rt
|
|
@@ -486,6 +491,7 @@ NativeReactNativeFeatureFlagsCxxSpecJSI::NativeReactNativeFeatureFlagsCxxSpecJSI
|
|
|
486
491
|
methodMap_["enableIOSTextBaselineOffsetPerLine"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableIOSTextBaselineOffsetPerLine};
|
|
487
492
|
methodMap_["enableIOSViewClipToPaddingBox"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableIOSViewClipToPaddingBox};
|
|
488
493
|
methodMap_["enableImagePrefetchingAndroid"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImagePrefetchingAndroid};
|
|
494
|
+
methodMap_["enableImagePrefetchingJNIBatchingAndroid"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImagePrefetchingJNIBatchingAndroid};
|
|
489
495
|
methodMap_["enableImagePrefetchingOnUiThreadAndroid"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImagePrefetchingOnUiThreadAndroid};
|
|
490
496
|
methodMap_["enableImmediateUpdateModeForContentOffsetChanges"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImmediateUpdateModeForContentOffsetChanges};
|
|
491
497
|
methodMap_["enableImperativeFocus"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_enableImperativeFocus};
|
|
@@ -352,6 +352,7 @@ public:
|
|
|
352
352
|
virtual bool enableIOSTextBaselineOffsetPerLine(jsi::Runtime &rt) = 0;
|
|
353
353
|
virtual bool enableIOSViewClipToPaddingBox(jsi::Runtime &rt) = 0;
|
|
354
354
|
virtual bool enableImagePrefetchingAndroid(jsi::Runtime &rt) = 0;
|
|
355
|
+
virtual bool enableImagePrefetchingJNIBatchingAndroid(jsi::Runtime &rt) = 0;
|
|
355
356
|
virtual bool enableImagePrefetchingOnUiThreadAndroid(jsi::Runtime &rt) = 0;
|
|
356
357
|
virtual bool enableImmediateUpdateModeForContentOffsetChanges(jsi::Runtime &rt) = 0;
|
|
357
358
|
virtual bool enableImperativeFocus(jsi::Runtime &rt) = 0;
|
|
@@ -639,6 +640,14 @@ private:
|
|
|
639
640
|
return bridging::callFromJs<bool>(
|
|
640
641
|
rt, &T::enableImagePrefetchingAndroid, jsInvoker_, instance_);
|
|
641
642
|
}
|
|
643
|
+
bool enableImagePrefetchingJNIBatchingAndroid(jsi::Runtime &rt) override {
|
|
644
|
+
static_assert(
|
|
645
|
+
bridging::getParameterCount(&T::enableImagePrefetchingJNIBatchingAndroid) == 1,
|
|
646
|
+
"Expected enableImagePrefetchingJNIBatchingAndroid(...) to have 1 parameters");
|
|
647
|
+
|
|
648
|
+
return bridging::callFromJs<bool>(
|
|
649
|
+
rt, &T::enableImagePrefetchingJNIBatchingAndroid, jsInvoker_, instance_);
|
|
650
|
+
}
|
|
642
651
|
bool enableImagePrefetchingOnUiThreadAndroid(jsi::Runtime &rt) override {
|
|
643
652
|
static_assert(
|
|
644
653
|
bridging::getParameterCount(&T::enableImagePrefetchingOnUiThreadAndroid) == 1,
|
|
@@ -61,7 +61,7 @@ RCT_EXTERN CGPathRef RCTPathCreateWithRoundedRect(
|
|
|
61
61
|
CGRect bounds,
|
|
62
62
|
RCTCornerInsets cornerInsets,
|
|
63
63
|
const CGAffineTransform *transform,
|
|
64
|
-
|
|
64
|
+
BOOL inverted);
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
67
|
* Draw a CSS-compliant border as an image. You can determine if it's scalable
|
|
@@ -1892,6 +1892,7 @@ public final class com/facebook/react/devsupport/DefaultDevLoadingViewImplementa
|
|
|
1892
1892
|
public fun <init> (Lcom/facebook/react/devsupport/ReactInstanceDevHelper;)V
|
|
1893
1893
|
public fun hide ()V
|
|
1894
1894
|
public fun showMessage (Ljava/lang/String;)V
|
|
1895
|
+
public fun showMessage (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;)V
|
|
1895
1896
|
public fun updateProgress (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
|
|
1896
1897
|
}
|
|
1897
1898
|
|
|
@@ -2119,6 +2120,7 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevBund
|
|
|
2119
2120
|
public abstract interface class com/facebook/react/devsupport/interfaces/DevLoadingViewManager {
|
|
2120
2121
|
public abstract fun hide ()V
|
|
2121
2122
|
public abstract fun showMessage (Ljava/lang/String;)V
|
|
2123
|
+
public abstract fun showMessage (Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;)V
|
|
2122
2124
|
public abstract fun updateProgress (Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
|
|
2123
2125
|
}
|
|
2124
2126
|
|
|
@@ -5564,7 +5566,7 @@ public final class com/facebook/react/views/scroll/ReactHorizontalScrollContaine
|
|
|
5564
5566
|
public final class com/facebook/react/views/scroll/ReactHorizontalScrollContainerViewManager$Companion {
|
|
5565
5567
|
}
|
|
5566
5568
|
|
|
5567
|
-
public class com/facebook/react/views/scroll/ReactHorizontalScrollView : android/widget/HorizontalScrollView, android/view/View$OnLayoutChangeListener, android/view/ViewGroup$OnHierarchyChangeListener, com/facebook/react/uimanager/ReactClippingViewGroup, com/facebook/react/uimanager/ReactOverflowViewWithInset, com/facebook/react/views/scroll/ReactAccessibleScrollView, com/facebook/react/views/scroll/ReactScrollViewHelper$HasFlingAnimator, com/facebook/react/views/scroll/ReactScrollViewHelper$HasScrollEventThrottle, com/facebook/react/views/scroll/ReactScrollViewHelper$HasScrollState, com/facebook/react/views/scroll/ReactScrollViewHelper$HasSmoothScroll, com/facebook/react/views/scroll/ReactScrollViewHelper$HasStateWrapper {
|
|
5569
|
+
public class com/facebook/react/views/scroll/ReactHorizontalScrollView : android/widget/HorizontalScrollView, android/view/View$OnLayoutChangeListener, android/view/ViewGroup$OnHierarchyChangeListener, com/facebook/react/uimanager/ReactClippingViewGroup, com/facebook/react/uimanager/ReactOverflowViewWithInset, com/facebook/react/views/scroll/ReactAccessibleScrollView, com/facebook/react/views/scroll/ReactScrollViewHelper$HasFlingAnimator, com/facebook/react/views/scroll/ReactScrollViewHelper$HasScrollEventThrottle, com/facebook/react/views/scroll/ReactScrollViewHelper$HasScrollState, com/facebook/react/views/scroll/ReactScrollViewHelper$HasSmoothScroll, com/facebook/react/views/scroll/ReactScrollViewHelper$HasStateWrapper, com/facebook/react/views/scroll/VirtualViewContainer {
|
|
5568
5570
|
public fun <init> (Landroid/content/Context;)V
|
|
5569
5571
|
public fun <init> (Landroid/content/Context;Lcom/facebook/react/views/scroll/FpsListener;)V
|
|
5570
5572
|
public fun abortAnimation ()V
|
|
@@ -5594,6 +5596,7 @@ public class com/facebook/react/views/scroll/ReactHorizontalScrollView : android
|
|
|
5594
5596
|
public fun getScrollEnabled ()Z
|
|
5595
5597
|
public fun getScrollEventThrottle ()I
|
|
5596
5598
|
public fun getStateWrapper ()Lcom/facebook/react/uimanager/StateWrapper;
|
|
5599
|
+
public fun getVirtualViewContainerState ()Lcom/facebook/react/views/scroll/VirtualViewContainerState;
|
|
5597
5600
|
protected fun handleInterceptedTouchEvent (Landroid/view/MotionEvent;)V
|
|
5598
5601
|
public fun isPartiallyScrolledInView (Landroid/view/View;)Z
|
|
5599
5602
|
protected fun onAttachedToWindow ()V
|
package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt
CHANGED
|
@@ -120,7 +120,11 @@ public object DefaultNewArchitectureEntryPoint {
|
|
|
120
120
|
privateBridgelessEnabled = featureFlags.enableBridgelessArchitecture()
|
|
121
121
|
|
|
122
122
|
val (isValid, errorMessage) =
|
|
123
|
-
isConfigurationValid(
|
|
123
|
+
isConfigurationValid(
|
|
124
|
+
privateTurboModulesEnabled,
|
|
125
|
+
privateFabricEnabled,
|
|
126
|
+
privateBridgelessEnabled,
|
|
127
|
+
)
|
|
124
128
|
if (!isValid) {
|
|
125
129
|
error(errorMessage)
|
|
126
130
|
}
|
|
@@ -33,10 +33,14 @@ public class DefaultDevLoadingViewImplementation(
|
|
|
33
33
|
private var devLoadingPopup: PopupWindow? = null
|
|
34
34
|
|
|
35
35
|
override fun showMessage(message: String) {
|
|
36
|
+
showMessage(message, color = null, backgroundColor = null)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override fun showMessage(message: String, color: Double?, backgroundColor: Double?) {
|
|
36
40
|
if (!isEnabled) {
|
|
37
41
|
return
|
|
38
42
|
}
|
|
39
|
-
UiThreadUtil.runOnUiThread { showInternal(message) }
|
|
43
|
+
UiThreadUtil.runOnUiThread { showInternal(message, color, backgroundColor) }
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
override fun updateProgress(status: String?, done: Int?, total: Int?) {
|
|
@@ -59,7 +63,7 @@ public class DefaultDevLoadingViewImplementation(
|
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
private fun showInternal(message: String) {
|
|
66
|
+
private fun showInternal(message: String, color: Double?, backgroundColor: Double?) {
|
|
63
67
|
if (devLoadingPopup?.isShowing == true) {
|
|
64
68
|
// already showing
|
|
65
69
|
return
|
|
@@ -84,13 +88,19 @@ public class DefaultDevLoadingViewImplementation(
|
|
|
84
88
|
currentActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
|
85
89
|
val view = inflater.inflate(R.layout.dev_loading_view, null) as TextView
|
|
86
90
|
view.text = message
|
|
91
|
+
if (color != null) {
|
|
92
|
+
view.setTextColor(color.toInt())
|
|
93
|
+
}
|
|
94
|
+
if (backgroundColor != null) {
|
|
95
|
+
view.setBackgroundColor(backgroundColor.toInt())
|
|
96
|
+
}
|
|
97
|
+
view.setOnClickListener { hideInternal() }
|
|
87
98
|
val popup =
|
|
88
99
|
PopupWindow(
|
|
89
100
|
view,
|
|
90
101
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
91
102
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
92
103
|
)
|
|
93
|
-
popup.isTouchable = false
|
|
94
104
|
popup.showAtLocation(currentActivity.window.decorView, Gravity.NO_GRAVITY, 0, topOffset)
|
|
95
105
|
devLoadingView = view
|
|
96
106
|
devLoadingPopup = popup
|
|
@@ -78,7 +78,6 @@ import java.io.File
|
|
|
78
78
|
import java.net.MalformedURLException
|
|
79
79
|
import java.net.URL
|
|
80
80
|
import java.util.Locale
|
|
81
|
-
import javax.inject.Provider
|
|
82
81
|
|
|
83
82
|
public abstract class DevSupportManagerBase(
|
|
84
83
|
protected val applicationContext: Context,
|
|
@@ -185,6 +184,7 @@ public abstract class DevSupportManagerBase(
|
|
|
185
184
|
}
|
|
186
185
|
|
|
187
186
|
private var perfMonitorOverlayManager: PerfMonitorOverlayManager? = null
|
|
187
|
+
private var perfMonitorInitialized = false
|
|
188
188
|
private var tracingStateProvider: TracingStateProvider? = null
|
|
189
189
|
|
|
190
190
|
init {
|
|
@@ -222,13 +222,6 @@ public abstract class DevSupportManagerBase(
|
|
|
222
222
|
perfMonitorOverlayManager =
|
|
223
223
|
PerfMonitorOverlayManager(
|
|
224
224
|
reactInstanceDevHelper,
|
|
225
|
-
Provider {
|
|
226
|
-
val context = reactInstanceDevHelper.currentActivity
|
|
227
|
-
if (context == null || context.isFinishing) {
|
|
228
|
-
return@Provider null
|
|
229
|
-
}
|
|
230
|
-
context
|
|
231
|
-
},
|
|
232
225
|
{ openDebugger(DebuggerFrontendPanelName.PERFORMANCE.toString()) },
|
|
233
226
|
)
|
|
234
227
|
}
|
|
@@ -552,14 +545,16 @@ public abstract class DevSupportManagerBase(
|
|
|
552
545
|
}
|
|
553
546
|
|
|
554
547
|
override fun onNewReactContextCreated(reactContext: ReactContext) {
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
if (reactInstanceDevHelper is PerfMonitorDevHelper) {
|
|
548
|
+
if (!perfMonitorInitialized && reactInstanceDevHelper is PerfMonitorDevHelper) {
|
|
558
549
|
perfMonitorOverlayManager?.let { manager ->
|
|
559
550
|
reactInstanceDevHelper.inspectorTarget?.addPerfMonitorListener(manager)
|
|
560
551
|
}
|
|
561
552
|
perfMonitorOverlayManager?.enable()
|
|
553
|
+
perfMonitorOverlayManager?.startBackgroundTrace()
|
|
554
|
+
perfMonitorInitialized = true
|
|
562
555
|
}
|
|
556
|
+
|
|
557
|
+
resetCurrentContext(reactContext)
|
|
563
558
|
}
|
|
564
559
|
|
|
565
560
|
override fun onReactInstanceDestroyed(reactContext: ReactContext) {
|
|
@@ -877,8 +872,6 @@ public abstract class DevSupportManagerBase(
|
|
|
877
872
|
devLoadingViewManager?.showMessage("Reloading...")
|
|
878
873
|
}
|
|
879
874
|
|
|
880
|
-
perfMonitorOverlayManager?.reset()
|
|
881
|
-
|
|
882
875
|
devServerHelper.openPackagerConnection(
|
|
883
876
|
javaClass.simpleName,
|
|
884
877
|
object : PackagerCommandListener {
|
|
@@ -928,7 +921,7 @@ public abstract class DevSupportManagerBase(
|
|
|
928
921
|
hideRedboxDialog()
|
|
929
922
|
hideDevOptionsDialog()
|
|
930
923
|
devLoadingViewManager?.hide()
|
|
931
|
-
perfMonitorOverlayManager?.
|
|
924
|
+
perfMonitorOverlayManager?.disable()
|
|
932
925
|
|
|
933
926
|
devServerHelper.closePackagerConnection()
|
|
934
927
|
}
|
package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.kt
CHANGED
|
@@ -11,6 +11,8 @@ package com.facebook.react.devsupport.interfaces
|
|
|
11
11
|
public interface DevLoadingViewManager {
|
|
12
12
|
public fun showMessage(message: String)
|
|
13
13
|
|
|
14
|
+
public fun showMessage(message: String, color: Double?, backgroundColor: Double?)
|
|
15
|
+
|
|
14
16
|
public fun updateProgress(status: String?, done: Int?, total: Int?)
|
|
15
17
|
|
|
16
18
|
public fun hide()
|
package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorDevHelper.kt
CHANGED
|
@@ -7,11 +7,15 @@
|
|
|
7
7
|
|
|
8
8
|
package com.facebook.react.devsupport.perfmonitor
|
|
9
9
|
|
|
10
|
+
import android.app.Activity
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* Interface implemented by [com.facebook.react.runtime.ReactHostImplDevHelper] exposing additional
|
|
12
14
|
* hooks used to implement the V2 Perf Monitor overlay (experimental).
|
|
13
15
|
*/
|
|
14
16
|
internal interface PerfMonitorDevHelper {
|
|
17
|
+
public val currentActivity: Activity?
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
20
|
* The inspector target object. Matches the lifetime of the ReactHost. May be null if modern JS
|
|
17
21
|
* debugging is disabled.
|
|
@@ -7,44 +7,26 @@
|
|
|
7
7
|
|
|
8
8
|
package com.facebook.react.devsupport.perfmonitor
|
|
9
9
|
|
|
10
|
-
import android.content.Context
|
|
11
10
|
import com.facebook.react.bridge.UiThreadUtil
|
|
12
11
|
import com.facebook.react.devsupport.interfaces.TracingState
|
|
13
|
-
import javax.inject.Provider
|
|
14
12
|
|
|
15
13
|
internal class PerfMonitorOverlayManager(
|
|
16
14
|
private val devHelper: PerfMonitorDevHelper,
|
|
17
|
-
private val contextProvider: Provider<Context?>,
|
|
18
15
|
private val onRequestOpenDevTools: () -> Unit,
|
|
19
16
|
) : PerfMonitorUpdateListener {
|
|
20
17
|
private var enabled: Boolean = false
|
|
21
|
-
private var initialized: Boolean = false
|
|
22
18
|
private var view: PerfMonitorOverlayView? = null
|
|
23
19
|
private var tracingState: TracingState = TracingState.ENABLEDINCDPMODE
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
21
|
+
/** Enable the Perf Monitor overlay. */
|
|
22
|
+
fun enable() {
|
|
23
|
+
enabled = true
|
|
30
24
|
UiThreadUtil.runOnUiThread {
|
|
31
|
-
val context =
|
|
25
|
+
val context = devHelper.currentActivity ?: return@runOnUiThread
|
|
32
26
|
view = PerfMonitorOverlayView(context, ::handleRecordingButtonPress)
|
|
33
|
-
|
|
34
|
-
// Start background tracing
|
|
35
|
-
devHelper.inspectorTarget?.resumeBackgroundTrace()
|
|
36
|
-
|
|
37
|
-
view?.show()
|
|
38
|
-
initialized = true
|
|
39
27
|
}
|
|
40
28
|
}
|
|
41
29
|
|
|
42
|
-
/** Enable the Perf Monitor overlay. Will be shown when updates are received. */
|
|
43
|
-
fun enable() {
|
|
44
|
-
enabled = true
|
|
45
|
-
init()
|
|
46
|
-
}
|
|
47
|
-
|
|
48
30
|
/** Disable the Perf Monitor overlay. Will remain hidden when updates are received. */
|
|
49
31
|
fun disable() {
|
|
50
32
|
UiThreadUtil.runOnUiThread { view?.hide() }
|
|
@@ -52,24 +34,31 @@ internal class PerfMonitorOverlayManager(
|
|
|
52
34
|
enabled = false
|
|
53
35
|
}
|
|
54
36
|
|
|
55
|
-
/**
|
|
56
|
-
fun
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
37
|
+
/** Start background trace recording. */
|
|
38
|
+
fun startBackgroundTrace() {
|
|
39
|
+
if (!enabled) {
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
devHelper.inspectorTarget?.let { target ->
|
|
44
|
+
target.resumeBackgroundTrace()
|
|
45
|
+
onRecordingStateChanged(target.getTracingState())
|
|
46
|
+
}
|
|
61
47
|
}
|
|
62
48
|
|
|
63
49
|
override fun onRecordingStateChanged(state: TracingState) {
|
|
64
50
|
tracingState = state
|
|
65
|
-
|
|
51
|
+
UiThreadUtil.runOnUiThread {
|
|
52
|
+
view?.updateRecordingState(state)
|
|
53
|
+
view?.show()
|
|
54
|
+
}
|
|
66
55
|
}
|
|
67
56
|
|
|
68
57
|
private fun handleRecordingButtonPress() {
|
|
69
58
|
when (tracingState) {
|
|
70
59
|
TracingState.ENABLEDINBACKGROUNDMODE -> {
|
|
71
|
-
devHelper.inspectorTarget?.let {
|
|
72
|
-
if (!
|
|
60
|
+
devHelper.inspectorTarget?.let { target ->
|
|
61
|
+
if (!target.pauseAndAnalyzeBackgroundTrace()) {
|
|
73
62
|
onRequestOpenDevTools()
|
|
74
63
|
}
|
|
75
64
|
}
|
|
@@ -55,11 +55,11 @@ internal class PerfMonitorOverlayView(
|
|
|
55
55
|
|
|
56
56
|
if (state == TracingState.ENABLEDINBACKGROUNDMODE) {
|
|
57
57
|
(statusIndicator.background as GradientDrawable).setColor(Color.RED)
|
|
58
|
-
statusLabel.text = "
|
|
58
|
+
statusLabel.text = "Profiling Active"
|
|
59
59
|
tooltipLabel.text = "Press ☰ to open"
|
|
60
60
|
} else {
|
|
61
61
|
(statusIndicator.background as GradientDrawable).setColor(Color.GRAY)
|
|
62
|
-
statusLabel.text = "
|
|
62
|
+
statusLabel.text = "Profiling Stopped"
|
|
63
63
|
tooltipLabel.text = "Press ☰ to restart"
|
|
64
64
|
}
|
|
65
65
|
dialog.show()
|
|
@@ -164,7 +164,7 @@ internal class PerfMonitorOverlayView(
|
|
|
164
164
|
shape = GradientDrawable.RECTANGLE
|
|
165
165
|
setColor(Color.BLACK)
|
|
166
166
|
cornerRadius = dpToPx(14.5f)
|
|
167
|
-
alpha = (0.
|
|
167
|
+
alpha = (0.4 * 255).toInt()
|
|
168
168
|
setStroke(dpToPx(1f).toInt(), COLOR_OVERLAY_BORDER)
|
|
169
169
|
}
|
|
170
170
|
showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<6b632ac7553ae149fa42a67efde5acfa>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -180,6 +180,12 @@ public object ReactNativeFeatureFlags {
|
|
|
180
180
|
@JvmStatic
|
|
181
181
|
public fun enableImagePrefetchingAndroid(): Boolean = accessor.enableImagePrefetchingAndroid()
|
|
182
182
|
|
|
183
|
+
/**
|
|
184
|
+
* When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout and batch them together in a single JNI call
|
|
185
|
+
*/
|
|
186
|
+
@JvmStatic
|
|
187
|
+
public fun enableImagePrefetchingJNIBatchingAndroid(): Boolean = accessor.enableImagePrefetchingJNIBatchingAndroid()
|
|
188
|
+
|
|
183
189
|
/**
|
|
184
190
|
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
|
|
185
191
|
*/
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<c228bdbf6120b4715f49e03c04918a7c>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -45,6 +45,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
45
45
|
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
|
|
46
46
|
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
|
|
47
47
|
private var enableImagePrefetchingAndroidCache: Boolean? = null
|
|
48
|
+
private var enableImagePrefetchingJNIBatchingAndroidCache: Boolean? = null
|
|
48
49
|
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
|
|
49
50
|
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
|
|
50
51
|
private var enableImperativeFocusCache: Boolean? = null
|
|
@@ -320,6 +321,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
320
321
|
return cached
|
|
321
322
|
}
|
|
322
323
|
|
|
324
|
+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
|
|
325
|
+
var cached = enableImagePrefetchingJNIBatchingAndroidCache
|
|
326
|
+
if (cached == null) {
|
|
327
|
+
cached = ReactNativeFeatureFlagsCxxInterop.enableImagePrefetchingJNIBatchingAndroid()
|
|
328
|
+
enableImagePrefetchingJNIBatchingAndroidCache = cached
|
|
329
|
+
}
|
|
330
|
+
return cached
|
|
331
|
+
}
|
|
332
|
+
|
|
323
333
|
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
|
|
324
334
|
var cached = enableImagePrefetchingOnUiThreadAndroidCache
|
|
325
335
|
if (cached == null) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<26dce1945df5641ab84cbca9eaf2b10f>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -78,6 +78,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
78
78
|
|
|
79
79
|
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingAndroid(): Boolean
|
|
80
80
|
|
|
81
|
+
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
|
|
82
|
+
|
|
81
83
|
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
|
|
82
84
|
|
|
83
85
|
@DoNotStrip @JvmStatic public external fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean
|