react-native 0.84.0-nightly-20251112-7dcedf1de → 0.84.0-nightly-20251114-dd6805dec

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.
Files changed (77) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/React/Base/RCTAssert.m +2 -2
  3. package/React/Base/RCTModuleData.mm +2 -2
  4. package/React/Base/RCTVersion.m +1 -1
  5. package/React/CxxModule/RCTCxxMethod.mm +1 -1
  6. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +24 -8
  7. package/ReactAndroid/api/ReactAndroid.api +1 -0
  8. package/ReactAndroid/build.gradle.kts +2 -0
  9. package/ReactAndroid/gradle.properties +1 -1
  10. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +28 -0
  11. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/FrameTiming.kt +68 -0
  12. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +20 -8
  13. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +31 -11
  14. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +7 -3
  15. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +7 -3
  16. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +34 -12
  17. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +3 -1
  18. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +7 -3
  19. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +23 -0
  20. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  21. package/ReactAndroid/src/main/java/com/facebook/react/soloader/OpenSourceMergedSoMapping.kt +4 -0
  22. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +11 -2
  23. package/ReactAndroid/src/main/jni/CMakeLists.txt +8 -0
  24. package/ReactAndroid/src/main/jni/react/devsupport/CMakeLists.txt +3 -1
  25. package/ReactAndroid/src/main/jni/react/devsupport/JFrameTiming.cpp +46 -0
  26. package/ReactAndroid/src/main/jni/react/devsupport/JFrameTiming.h +32 -0
  27. package/ReactAndroid/src/main/jni/react/devsupport/OnLoad.cpp +2 -0
  28. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +14 -0
  29. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +43 -15
  30. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +10 -4
  31. package/ReactAndroid/src/main/jni/react/tracing/CMakeLists.txt +27 -0
  32. package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +2 -0
  33. package/ReactCommon/React-Fabric.podspec +8 -2
  34. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  35. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +9 -0
  36. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +13 -5
  37. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +17 -7
  38. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +117 -81
  39. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +8 -4
  40. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +13 -5
  41. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +28 -10
  42. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +5 -1
  43. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +4 -2
  44. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +2 -2
  45. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  46. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  47. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +5 -1
  48. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +16 -6
  49. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +7 -3
  50. package/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.h +4 -0
  51. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +66 -0
  52. package/ReactCommon/react/networking/NetworkReporter.cpp +19 -22
  53. package/ReactCommon/react/networking/React-networking.podspec +0 -1
  54. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.cpp +1 -1
  55. package/ReactCommon/react/renderer/animated/AnimatedModule.cpp +3 -0
  56. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +21 -1
  57. package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +14 -0
  58. package/ReactCommon/react/renderer/core/Props.cpp +23 -8
  59. package/ReactCommon/react/renderer/core/Props.h +6 -4
  60. package/ReactCommon/react/renderer/core/ShadowNode.cpp +4 -10
  61. package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +32 -0
  62. package/ReactCommon/react/renderer/graphics/BlendMode.h +2 -0
  63. package/ReactCommon/react/renderer/graphics/Filter.h +2 -0
  64. package/ReactCommon/react/renderer/imagemanager/ImageManager.h +3 -0
  65. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.cpp +7 -2
  66. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.h +6 -3
  67. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageManager.cpp +16 -4
  68. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +1 -1
  69. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +2 -3
  70. package/ReactCommon/yoga/yoga/algorithm/FlexDirection.h +6 -6
  71. package/ReactCommon/yoga/yoga/algorithm/SizingMode.h +4 -4
  72. package/ReactCommon/yoga/yoga/style/Style.h +8 -8
  73. package/package.json +8 -8
  74. package/scripts/react_native_pods.rb +1 -0
  75. package/src/private/featureflags/ReactNativeFeatureFlags.js +18 -8
  76. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +4 -2
  77. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 84;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = 'nightly-20251112-7dcedf1de';
32
+ static prerelease: string | null = 'nightly-20251114-dd6805dec';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -146,7 +146,7 @@ void RCTFatal(NSError *error)
146
146
  // userInfo: <underlying error userinfo, plus untruncated description plus JS stack trace>
147
147
  @throw [[NSException alloc] initWithName:name reason:message userInfo:userInfo];
148
148
  #if DEBUG
149
- } @catch (NSException *e) {
149
+ } @catch (NSException *) {
150
150
  }
151
151
  #endif
152
152
  }
@@ -216,7 +216,7 @@ void RCTFatalException(NSException *exception)
216
216
  #endif
217
217
  @throw exception;
218
218
  #if DEBUG
219
- } @catch (NSException *e) {
219
+ } @catch (NSException *) {
220
220
  }
221
221
  #endif
222
222
  }
@@ -241,7 +241,7 @@ RCT_NOT_IMPLEMENTED(-(instancetype)init);
241
241
  RCT_PROFILE_BEGIN_EVENT(RCTProfileTagAlways, @"[RCTModuleData setBridgeForInstance]", nil);
242
242
  @try {
243
243
  [(id)_instance setValue:_bridge forKey:@"bridge"];
244
- } @catch (NSException *exception) {
244
+ } @catch (NSException *) {
245
245
  RCTLogError(
246
246
  @"%@ has no setter or ivar for its bridge, which is not "
247
247
  "permitted. You must either @synthesize the bridge property, "
@@ -291,7 +291,7 @@ RCT_NOT_IMPLEMENTED(-(instancetype)init);
291
291
  if (implementsMethodQueue) {
292
292
  @try {
293
293
  [(id)_instance setValue:_methodQueue forKey:@"methodQueue"];
294
- } @catch (NSException *exception) {
294
+ } @catch (NSException *) {
295
295
  RCTLogError(
296
296
  @"%@ is returning nil for its methodQueue, which is not "
297
297
  "permitted. You must either return a pre-initialized "
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(84),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"nightly-20251112-7dcedf1de",
27
+ RCTVersionPrerelease: @"nightly-20251114-dd6805dec",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -129,7 +129,7 @@ using namespace facebook::react;
129
129
  // TODO: we should convert this to JSValue directly
130
130
  return convertFollyDynamicToId(result);
131
131
  }
132
- } catch (const facebook::xplat::JsArgumentException &ex) {
132
+ } catch ([[maybe_unused]] const facebook::xplat::JsArgumentException &ex) {
133
133
  RCTLogError(
134
134
  @"Method %@.%s argument error: %s",
135
135
  RCTBridgeModuleNameForClass([module class]),
@@ -247,6 +247,7 @@ protected:
247
247
  methodMap_["enableDoubleMeasurementFixAndroid"] = MethodMetadata {.argCount = 0, .invoker = __enableDoubleMeasurementFixAndroid};
248
248
  methodMap_["enableEagerMainQueueModulesOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableEagerMainQueueModulesOnIOS};
249
249
  methodMap_["enableEagerRootViewAttachment"] = MethodMetadata {.argCount = 0, .invoker = __enableEagerRootViewAttachment};
250
+ methodMap_["enableExclusivePropsUpdateAndroid"] = MethodMetadata {.argCount = 0, .invoker = __enableExclusivePropsUpdateAndroid};
250
251
  methodMap_["enableFabricLogs"] = MethodMetadata {.argCount = 0, .invoker = __enableFabricLogs};
251
252
  methodMap_["enableFabricRenderer"] = MethodMetadata {.argCount = 0, .invoker = __enableFabricRenderer};
252
253
  methodMap_["enableFontScaleChangesUpdatingLayout"] = MethodMetadata {.argCount = 0, .invoker = __enableFontScaleChangesUpdatingLayout};
@@ -258,6 +259,7 @@ protected:
258
259
  methodMap_["enableImmediateUpdateModeForContentOffsetChanges"] = MethodMetadata {.argCount = 0, .invoker = __enableImmediateUpdateModeForContentOffsetChanges};
259
260
  methodMap_["enableImperativeFocus"] = MethodMetadata {.argCount = 0, .invoker = __enableImperativeFocus};
260
261
  methodMap_["enableInteropViewManagerClassLookUpOptimizationIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableInteropViewManagerClassLookUpOptimizationIOS};
262
+ methodMap_["enableIntersectionObserverByDefault"] = MethodMetadata {.argCount = 0, .invoker = __enableIntersectionObserverByDefault};
261
263
  methodMap_["enableKeyEvents"] = MethodMetadata {.argCount = 0, .invoker = __enableKeyEvents};
262
264
  methodMap_["enableLayoutAnimationsOnAndroid"] = MethodMetadata {.argCount = 0, .invoker = __enableLayoutAnimationsOnAndroid};
263
265
  methodMap_["enableLayoutAnimationsOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableLayoutAnimationsOnIOS};
@@ -267,7 +269,6 @@ protected:
267
269
  methodMap_["enableNetworkEventReporting"] = MethodMetadata {.argCount = 0, .invoker = __enableNetworkEventReporting};
268
270
  methodMap_["enablePreparedTextLayout"] = MethodMetadata {.argCount = 0, .invoker = __enablePreparedTextLayout};
269
271
  methodMap_["enablePropsUpdateReconciliationAndroid"] = MethodMetadata {.argCount = 0, .invoker = __enablePropsUpdateReconciliationAndroid};
270
- methodMap_["enableResourceTimingAPI"] = MethodMetadata {.argCount = 0, .invoker = __enableResourceTimingAPI};
271
272
  methodMap_["enableSwiftUIBasedFilters"] = MethodMetadata {.argCount = 0, .invoker = __enableSwiftUIBasedFilters};
272
273
  methodMap_["enableViewCulling"] = MethodMetadata {.argCount = 0, .invoker = __enableViewCulling};
273
274
  methodMap_["enableViewRecycling"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecycling};
@@ -292,6 +293,7 @@ protected:
292
293
  methodMap_["preparedTextCacheSize"] = MethodMetadata {.argCount = 0, .invoker = __preparedTextCacheSize};
293
294
  methodMap_["preventShadowTreeCommitExhaustion"] = MethodMetadata {.argCount = 0, .invoker = __preventShadowTreeCommitExhaustion};
294
295
  methodMap_["shouldPressibilityUseW3CPointerEventsForHover"] = MethodMetadata {.argCount = 0, .invoker = __shouldPressibilityUseW3CPointerEventsForHover};
296
+ methodMap_["shouldSetEnabledBasedOnAccessibilityState"] = MethodMetadata {.argCount = 0, .invoker = __shouldSetEnabledBasedOnAccessibilityState};
295
297
  methodMap_["shouldTriggerResponderTransferOnScrollAndroid"] = MethodMetadata {.argCount = 0, .invoker = __shouldTriggerResponderTransferOnScrollAndroid};
296
298
  methodMap_["skipActivityIdentityAssertionOnHostPause"] = MethodMetadata {.argCount = 0, .invoker = __skipActivityIdentityAssertionOnHostPause};
297
299
  methodMap_["traceTurboModulePromiseRejectionsOnAndroid"] = MethodMetadata {.argCount = 0, .invoker = __traceTurboModulePromiseRejectionsOnAndroid};
@@ -481,6 +483,13 @@ private:
481
483
  return bridging::callFromJs<bool>(rt, &T::enableEagerRootViewAttachment, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
482
484
  }
483
485
 
486
+ static jsi::Value __enableExclusivePropsUpdateAndroid(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
487
+ static_assert(
488
+ bridging::getParameterCount(&T::enableExclusivePropsUpdateAndroid) == 1,
489
+ "Expected enableExclusivePropsUpdateAndroid(...) to have 1 parameters");
490
+ return bridging::callFromJs<bool>(rt, &T::enableExclusivePropsUpdateAndroid, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
491
+ }
492
+
484
493
  static jsi::Value __enableFabricLogs(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
485
494
  static_assert(
486
495
  bridging::getParameterCount(&T::enableFabricLogs) == 1,
@@ -558,6 +567,13 @@ private:
558
567
  return bridging::callFromJs<bool>(rt, &T::enableInteropViewManagerClassLookUpOptimizationIOS, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
559
568
  }
560
569
 
570
+ static jsi::Value __enableIntersectionObserverByDefault(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
571
+ static_assert(
572
+ bridging::getParameterCount(&T::enableIntersectionObserverByDefault) == 1,
573
+ "Expected enableIntersectionObserverByDefault(...) to have 1 parameters");
574
+ return bridging::callFromJs<bool>(rt, &T::enableIntersectionObserverByDefault, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
575
+ }
576
+
561
577
  static jsi::Value __enableKeyEvents(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
562
578
  static_assert(
563
579
  bridging::getParameterCount(&T::enableKeyEvents) == 1,
@@ -621,13 +637,6 @@ private:
621
637
  return bridging::callFromJs<bool>(rt, &T::enablePropsUpdateReconciliationAndroid, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
622
638
  }
623
639
 
624
- static jsi::Value __enableResourceTimingAPI(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
625
- static_assert(
626
- bridging::getParameterCount(&T::enableResourceTimingAPI) == 1,
627
- "Expected enableResourceTimingAPI(...) to have 1 parameters");
628
- return bridging::callFromJs<bool>(rt, &T::enableResourceTimingAPI, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
629
- }
630
-
631
640
  static jsi::Value __enableSwiftUIBasedFilters(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
632
641
  static_assert(
633
642
  bridging::getParameterCount(&T::enableSwiftUIBasedFilters) == 1,
@@ -796,6 +805,13 @@ private:
796
805
  return bridging::callFromJs<bool>(rt, &T::shouldPressibilityUseW3CPointerEventsForHover, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
797
806
  }
798
807
 
808
+ static jsi::Value __shouldSetEnabledBasedOnAccessibilityState(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
809
+ static_assert(
810
+ bridging::getParameterCount(&T::shouldSetEnabledBasedOnAccessibilityState) == 1,
811
+ "Expected shouldSetEnabledBasedOnAccessibilityState(...) to have 1 parameters");
812
+ return bridging::callFromJs<bool>(rt, &T::shouldSetEnabledBasedOnAccessibilityState, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
813
+ }
814
+
799
815
  static jsi::Value __shouldTriggerResponderTransferOnScrollAndroid(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
800
816
  static_assert(
801
817
  bridging::getParameterCount(&T::shouldTriggerResponderTransferOnScrollAndroid) == 1,
@@ -3186,6 +3186,7 @@ public final class com/facebook/react/soloader/OpenSourceMergedSoMapping : com/f
3186
3186
  public final fun libreact_devsupportjni_so ()I
3187
3187
  public final fun libreact_featureflagsjni_so ()I
3188
3188
  public final fun libreact_newarchdefaults_so ()I
3189
+ public final fun libreact_performancetracerjni_so ()I
3189
3190
  public final fun libreactnative_so ()I
3190
3191
  public final fun libreactnativeblob_so ()I
3191
3192
  public final fun libreactnativejni_common_so ()I
@@ -104,6 +104,8 @@ val preparePrefab by
104
104
  Pair(File(buildDir, "third-party-ndk/glog/exported/").absolutePath, ""),
105
105
  // jsiinpsector
106
106
  Pair("../ReactCommon/jsinspector-modern/", "jsinspector-modern/"),
107
+ // jsitooling
108
+ Pair("../ReactCommon/jsitooling/", ""),
107
109
  // mapbufferjni
108
110
  Pair("src/main/jni/react/mapbuffer", ""),
109
111
  // turbomodulejsijni
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.84.0-nightly-20251112-7dcedf1de
1
+ VERSION_NAME=0.84.0-nightly-20251114-dd6805dec
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
  react.internal.hermesPublishingGroup=com.facebook.hermes
4
4
 
@@ -72,6 +72,7 @@ import com.facebook.react.devsupport.perfmonitor.PerfMonitorDevHelper
72
72
  import com.facebook.react.devsupport.perfmonitor.PerfMonitorOverlayManager
73
73
  import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
74
74
  import com.facebook.react.internal.featureflags.ReactNativeNewArchitectureFeatureFlags
75
+ import com.facebook.react.internal.tracing.PerformanceTracer
75
76
  import com.facebook.react.modules.core.RCTNativeAppEventEmitter
76
77
  import com.facebook.react.modules.debug.interfaces.DeveloperSettings
77
78
  import com.facebook.react.packagerconnection.RequestHandler
@@ -211,6 +212,8 @@ public abstract class DevSupportManagerBase(
211
212
  private var perfMonitorOverlayManager: PerfMonitorOverlayManager? = null
212
213
  private var perfMonitorInitialized = false
213
214
  private var tracingStateProvider: TracingStateProvider? = null
215
+ private var tracingStateSubscriptionId: Int? = null
216
+ private var frameTiming: FrameTiming? = null
214
217
 
215
218
  public override var keyboardShortcutsEnabled: Boolean = true
216
219
  public override var devMenuEnabled: Boolean = true
@@ -969,12 +972,37 @@ public abstract class DevSupportManagerBase(
969
972
  isPackagerConnected = true
970
973
  perfMonitorOverlayManager?.enable()
971
974
  perfMonitorOverlayManager?.startBackgroundTrace()
975
+
976
+ // Subscribe to tracing state changes
977
+ tracingStateSubscriptionId =
978
+ PerformanceTracer.subscribeToTracingStateChanges(
979
+ object : PerformanceTracer.TracingStateCallback {
980
+ override fun onTracingStateChanged(isTracing: Boolean) {
981
+ if (isTracing) {
982
+ if (frameTiming == null) {
983
+ currentActivity?.window?.let { window ->
984
+ frameTiming = FrameTiming(window)
985
+ }
986
+ }
987
+ frameTiming?.startMonitoring()
988
+ } else {
989
+ frameTiming?.stopMonitoring()
990
+ }
991
+ }
992
+ }
993
+ )
972
994
  }
973
995
 
974
996
  override fun onPackagerDisconnected() {
975
997
  isPackagerConnected = false
976
998
  perfMonitorOverlayManager?.disable()
977
999
  perfMonitorOverlayManager?.stopBackgroundTrace()
1000
+
1001
+ // Unsubscribe from tracing state changes
1002
+ tracingStateSubscriptionId?.let { subscriptionId ->
1003
+ PerformanceTracer.unsubscribeFromTracingStateChanges(subscriptionId)
1004
+ tracingStateSubscriptionId = null
1005
+ }
978
1006
  }
979
1007
 
980
1008
  override fun onPackagerReloadCommand() {
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ package com.facebook.react.devsupport
9
+
10
+ import android.os.Build
11
+ import android.os.Handler
12
+ import android.os.Looper
13
+ import android.view.FrameMetrics
14
+ import android.view.Window
15
+ import com.facebook.proguard.annotations.DoNotStripAny
16
+ import com.facebook.soloader.SoLoader
17
+
18
+ @DoNotStripAny
19
+ internal class FrameTiming(private val window: Window) {
20
+ init {
21
+ SoLoader.loadLibrary("react_devsupportjni")
22
+ }
23
+
24
+ private var frameCounter: Int = 0
25
+
26
+ private external fun setLayerTreeId(frame: String, layerTreeId: Int)
27
+
28
+ private val frameMetricsListener =
29
+ Window.OnFrameMetricsAvailableListener { _, frameMetrics, dropCount ->
30
+ val metrics = FrameMetrics(frameMetrics)
31
+
32
+ val paintStartTime = metrics.getMetric(FrameMetrics.INTENDED_VSYNC_TIMESTAMP)
33
+ val totalDuration = metrics.getMetric(FrameMetrics.TOTAL_DURATION)
34
+
35
+ val currentFrame = frameCounter++
36
+ reportFrameTiming(
37
+ frame = currentFrame,
38
+ paintStartNanos = paintStartTime,
39
+ paintEndNanos = paintStartTime + totalDuration,
40
+ )
41
+ }
42
+
43
+ companion object {
44
+ @JvmStatic
45
+ private external fun reportFrameTiming(frame: Int, paintStartNanos: Long, paintEndNanos: Long)
46
+ }
47
+
48
+ private val handler = Handler(Looper.getMainLooper())
49
+
50
+ internal fun startMonitoring() {
51
+ frameCounter = 0
52
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
53
+ return
54
+ }
55
+ window.addOnFrameMetricsAvailableListener(frameMetricsListener, handler)
56
+
57
+ // Hardcoded frame identfier and layerTreeId. Needed for DevTools to
58
+ // begin parsing frame events.
59
+ setLayerTreeId("", 1)
60
+ }
61
+
62
+ internal fun stopMonitoring() {
63
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
64
+ return
65
+ }
66
+ window.removeOnFrameMetricsAvailableListener(frameMetricsListener)
67
+ }
68
+ }
@@ -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<<a9af5f83c6e958cf170cd77f69e85ef0>>
7
+ * @generated SignedSource<<10999fe360a25451c316eed2d27b6d92>>
8
8
  */
9
9
 
10
10
  /**
@@ -168,6 +168,12 @@ public object ReactNativeFeatureFlags {
168
168
  @JvmStatic
169
169
  public fun enableEagerRootViewAttachment(): Boolean = accessor.enableEagerRootViewAttachment()
170
170
 
171
+ /**
172
+ * When enabled, Android will disable Props 1.5 raw value merging when Props 2.0 is available.
173
+ */
174
+ @JvmStatic
175
+ public fun enableExclusivePropsUpdateAndroid(): Boolean = accessor.enableExclusivePropsUpdateAndroid()
176
+
171
177
  /**
172
178
  * This feature flag enables logs for Fabric.
173
179
  */
@@ -234,6 +240,12 @@ public object ReactNativeFeatureFlags {
234
240
  @JvmStatic
235
241
  public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = accessor.enableInteropViewManagerClassLookUpOptimizationIOS()
236
242
 
243
+ /**
244
+ * Enables the IntersectionObserver Web API in React Native.
245
+ */
246
+ @JvmStatic
247
+ public fun enableIntersectionObserverByDefault(): Boolean = accessor.enableIntersectionObserverByDefault()
248
+
237
249
  /**
238
250
  * Enables key up/down/press events to be sent to JS from components
239
251
  */
@@ -271,7 +283,7 @@ public object ReactNativeFeatureFlags {
271
283
  public fun enableNativeCSSParsing(): Boolean = accessor.enableNativeCSSParsing()
272
284
 
273
285
  /**
274
- * Enable network event reporting hooks in each native platform through `NetworkReporter`. This flag should be combined with `enableResourceTimingAPI` and `fuseboxNetworkInspectionEnabled` to enable end-to-end reporting behaviour via the Web Performance API and CDP debugging respectively.
286
+ * Enable network event reporting hooks in each native platform through `NetworkReporter` (Web Perf APIs + CDP). This flag should be combined with `fuseboxNetworkInspectionEnabled` to enable Network CDP debugging.
275
287
  */
276
288
  @JvmStatic
277
289
  public fun enableNetworkEventReporting(): Boolean = accessor.enableNetworkEventReporting()
@@ -288,12 +300,6 @@ public object ReactNativeFeatureFlags {
288
300
  @JvmStatic
289
301
  public fun enablePropsUpdateReconciliationAndroid(): Boolean = accessor.enablePropsUpdateReconciliationAndroid()
290
302
 
291
- /**
292
- * Enables the reporting of network resource timings through `PerformanceObserver`.
293
- */
294
- @JvmStatic
295
- public fun enableResourceTimingAPI(): Boolean = accessor.enableResourceTimingAPI()
296
-
297
303
  /**
298
304
  * When enabled, it will use SwiftUI for filter effects like blur on iOS.
299
305
  */
@@ -438,6 +444,12 @@ public object ReactNativeFeatureFlags {
438
444
  @JvmStatic
439
445
  public fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean = accessor.shouldPressibilityUseW3CPointerEventsForHover()
440
446
 
447
+ /**
448
+ * Fix BaseViewManager to properly set view.setEnabled() based on accessibilityState.disabled.
449
+ */
450
+ @JvmStatic
451
+ public fun shouldSetEnabledBasedOnAccessibilityState(): Boolean = accessor.shouldSetEnabledBasedOnAccessibilityState()
452
+
441
453
  /**
442
454
  * Do not emit touchcancel from Android ScrollView, instead native topScroll event will trigger responder transfer and terminate in RN renderer.
443
455
  */
@@ -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<<3b95ad320a62bf77d5090436f457d87a>>
7
+ * @generated SignedSource<<b935cd2546fdba877e317aea30fceaf9>>
8
8
  */
9
9
 
10
10
  /**
@@ -43,6 +43,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
43
43
  private var enableDoubleMeasurementFixAndroidCache: Boolean? = null
44
44
  private var enableEagerMainQueueModulesOnIOSCache: Boolean? = null
45
45
  private var enableEagerRootViewAttachmentCache: Boolean? = null
46
+ private var enableExclusivePropsUpdateAndroidCache: Boolean? = null
46
47
  private var enableFabricLogsCache: Boolean? = null
47
48
  private var enableFabricRendererCache: Boolean? = null
48
49
  private var enableFontScaleChangesUpdatingLayoutCache: Boolean? = null
@@ -54,6 +55,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
54
55
  private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
55
56
  private var enableImperativeFocusCache: Boolean? = null
56
57
  private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
58
+ private var enableIntersectionObserverByDefaultCache: Boolean? = null
57
59
  private var enableKeyEventsCache: Boolean? = null
58
60
  private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
59
61
  private var enableLayoutAnimationsOnIOSCache: Boolean? = null
@@ -63,7 +65,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
63
65
  private var enableNetworkEventReportingCache: Boolean? = null
64
66
  private var enablePreparedTextLayoutCache: Boolean? = null
65
67
  private var enablePropsUpdateReconciliationAndroidCache: Boolean? = null
66
- private var enableResourceTimingAPICache: Boolean? = null
67
68
  private var enableSwiftUIBasedFiltersCache: Boolean? = null
68
69
  private var enableViewCullingCache: Boolean? = null
69
70
  private var enableViewRecyclingCache: Boolean? = null
@@ -88,6 +89,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
88
89
  private var preparedTextCacheSizeCache: Double? = null
89
90
  private var preventShadowTreeCommitExhaustionCache: Boolean? = null
90
91
  private var shouldPressibilityUseW3CPointerEventsForHoverCache: Boolean? = null
92
+ private var shouldSetEnabledBasedOnAccessibilityStateCache: Boolean? = null
91
93
  private var shouldTriggerResponderTransferOnScrollAndroidCache: Boolean? = null
92
94
  private var skipActivityIdentityAssertionOnHostPauseCache: Boolean? = null
93
95
  private var traceTurboModulePromiseRejectionsOnAndroidCache: Boolean? = null
@@ -314,6 +316,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
314
316
  return cached
315
317
  }
316
318
 
319
+ override fun enableExclusivePropsUpdateAndroid(): Boolean {
320
+ var cached = enableExclusivePropsUpdateAndroidCache
321
+ if (cached == null) {
322
+ cached = ReactNativeFeatureFlagsCxxInterop.enableExclusivePropsUpdateAndroid()
323
+ enableExclusivePropsUpdateAndroidCache = cached
324
+ }
325
+ return cached
326
+ }
327
+
317
328
  override fun enableFabricLogs(): Boolean {
318
329
  var cached = enableFabricLogsCache
319
330
  if (cached == null) {
@@ -413,6 +424,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
413
424
  return cached
414
425
  }
415
426
 
427
+ override fun enableIntersectionObserverByDefault(): Boolean {
428
+ var cached = enableIntersectionObserverByDefaultCache
429
+ if (cached == null) {
430
+ cached = ReactNativeFeatureFlagsCxxInterop.enableIntersectionObserverByDefault()
431
+ enableIntersectionObserverByDefaultCache = cached
432
+ }
433
+ return cached
434
+ }
435
+
416
436
  override fun enableKeyEvents(): Boolean {
417
437
  var cached = enableKeyEventsCache
418
438
  if (cached == null) {
@@ -494,15 +514,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
494
514
  return cached
495
515
  }
496
516
 
497
- override fun enableResourceTimingAPI(): Boolean {
498
- var cached = enableResourceTimingAPICache
499
- if (cached == null) {
500
- cached = ReactNativeFeatureFlagsCxxInterop.enableResourceTimingAPI()
501
- enableResourceTimingAPICache = cached
502
- }
503
- return cached
504
- }
505
-
506
517
  override fun enableSwiftUIBasedFilters(): Boolean {
507
518
  var cached = enableSwiftUIBasedFiltersCache
508
519
  if (cached == null) {
@@ -719,6 +730,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
719
730
  return cached
720
731
  }
721
732
 
733
+ override fun shouldSetEnabledBasedOnAccessibilityState(): Boolean {
734
+ var cached = shouldSetEnabledBasedOnAccessibilityStateCache
735
+ if (cached == null) {
736
+ cached = ReactNativeFeatureFlagsCxxInterop.shouldSetEnabledBasedOnAccessibilityState()
737
+ shouldSetEnabledBasedOnAccessibilityStateCache = cached
738
+ }
739
+ return cached
740
+ }
741
+
722
742
  override fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean {
723
743
  var cached = shouldTriggerResponderTransferOnScrollAndroidCache
724
744
  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<<ba3df1f078a7f5f10dced908ef1d170a>>
7
+ * @generated SignedSource<<b7a9d14c50bae9afa15b3ead8308fc9b>>
8
8
  */
9
9
 
10
10
  /**
@@ -74,6 +74,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
74
74
 
75
75
  @DoNotStrip @JvmStatic public external fun enableEagerRootViewAttachment(): Boolean
76
76
 
77
+ @DoNotStrip @JvmStatic public external fun enableExclusivePropsUpdateAndroid(): Boolean
78
+
77
79
  @DoNotStrip @JvmStatic public external fun enableFabricLogs(): Boolean
78
80
 
79
81
  @DoNotStrip @JvmStatic public external fun enableFabricRenderer(): Boolean
@@ -96,6 +98,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
96
98
 
97
99
  @DoNotStrip @JvmStatic public external fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
98
100
 
101
+ @DoNotStrip @JvmStatic public external fun enableIntersectionObserverByDefault(): Boolean
102
+
99
103
  @DoNotStrip @JvmStatic public external fun enableKeyEvents(): Boolean
100
104
 
101
105
  @DoNotStrip @JvmStatic public external fun enableLayoutAnimationsOnAndroid(): Boolean
@@ -114,8 +118,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
114
118
 
115
119
  @DoNotStrip @JvmStatic public external fun enablePropsUpdateReconciliationAndroid(): Boolean
116
120
 
117
- @DoNotStrip @JvmStatic public external fun enableResourceTimingAPI(): Boolean
118
-
119
121
  @DoNotStrip @JvmStatic public external fun enableSwiftUIBasedFilters(): Boolean
120
122
 
121
123
  @DoNotStrip @JvmStatic public external fun enableViewCulling(): Boolean
@@ -164,6 +166,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
164
166
 
165
167
  @DoNotStrip @JvmStatic public external fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean
166
168
 
169
+ @DoNotStrip @JvmStatic public external fun shouldSetEnabledBasedOnAccessibilityState(): Boolean
170
+
167
171
  @DoNotStrip @JvmStatic public external fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean
168
172
 
169
173
  @DoNotStrip @JvmStatic public external fun skipActivityIdentityAssertionOnHostPause(): Boolean
@@ -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<<e5c3f111e00075dac0a6e594ce622ca7>>
7
+ * @generated SignedSource<<4b24bc3165b6ab1583efc8e1a22444ed>>
8
8
  */
9
9
 
10
10
  /**
@@ -69,6 +69,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
69
69
 
70
70
  override fun enableEagerRootViewAttachment(): Boolean = false
71
71
 
72
+ override fun enableExclusivePropsUpdateAndroid(): Boolean = false
73
+
72
74
  override fun enableFabricLogs(): Boolean = false
73
75
 
74
76
  override fun enableFabricRenderer(): Boolean = false
@@ -91,6 +93,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
91
93
 
92
94
  override fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = false
93
95
 
96
+ override fun enableIntersectionObserverByDefault(): Boolean = false
97
+
94
98
  override fun enableKeyEvents(): Boolean = false
95
99
 
96
100
  override fun enableLayoutAnimationsOnAndroid(): Boolean = false
@@ -109,8 +113,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
109
113
 
110
114
  override fun enablePropsUpdateReconciliationAndroid(): Boolean = false
111
115
 
112
- override fun enableResourceTimingAPI(): Boolean = false
113
-
114
116
  override fun enableSwiftUIBasedFilters(): Boolean = false
115
117
 
116
118
  override fun enableViewCulling(): Boolean = false
@@ -159,6 +161,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
159
161
 
160
162
  override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean = false
161
163
 
164
+ override fun shouldSetEnabledBasedOnAccessibilityState(): Boolean = true
165
+
162
166
  override fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean = false
163
167
 
164
168
  override fun skipActivityIdentityAssertionOnHostPause(): Boolean = false