From 28b069ae659910e4248e72e8ff5164cbfe54fede Mon Sep 17 00:00:00 2001 From: David Vacca Date: Wed, 5 Mar 2025 10:16:53 -0800 Subject: [PATCH] Log class loading for uimanager and layoutaninations classes annotated with @LegacyArchitecture (#49827) Summary: Log class loading for uimanager and layoutaninations classes annotated with LegacyArchitecture changelog: [internal] internal Reviewed By: cortinico Differential Revision: D70607606 --- .../com/facebook/react/uimanager/LayoutDirectionUtil.kt | 5 +++++ .../react/uimanager/NativeViewHierarchyManager.java | 7 +++++++ .../java/com/facebook/react/uimanager/OnLayoutEvent.java | 7 +++++++ .../com/facebook/react/uimanager/ReactShadowNodeImpl.java | 7 +++++++ .../facebook/react/uimanager/ReactYogaConfigProvider.kt | 4 ++++ .../com/facebook/react/uimanager/ShadowNodeRegistry.java | 7 +++++++ .../com/facebook/react/uimanager/UIViewOperationQueue.java | 7 +++++++ .../uimanager/layoutanimation/AbstractLayoutAnimation.java | 7 +++++++ .../layoutanimation/LayoutAnimationController.java | 7 +++++++ .../react/uimanager/layoutanimation/LayoutAnimationType.kt | 7 +++++++ .../uimanager/layoutanimation/LayoutCreateAnimation.kt | 7 +++++++ .../uimanager/layoutanimation/LayoutDeleteAnimation.kt | 7 +++++++ .../uimanager/layoutanimation/LayoutUpdateAnimation.kt | 7 +++++++ .../react/uimanager/layoutanimation/OpacityAnimation.java | 7 +++++++ .../uimanager/layoutanimation/SimpleSpringInterpolator.kt | 7 +++++++ 15 files changed, 100 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt index d4155d13158a..5724be40ce6a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt @@ -9,10 +9,15 @@ package com.facebook.react.uimanager import android.view.View import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger import com.facebook.yoga.YogaDirection @LegacyArchitecture internal object LayoutDirectionUtil { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled("LayoutDirectionUtil") + } + @JvmStatic fun toAndroidFromYoga(direction: YogaDirection): Int = when (direction) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java index f4e6b1c3ec72..660b4b9a9185 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -27,6 +27,8 @@ import com.facebook.react.bridge.SoftAssertions; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import com.facebook.react.common.build.ReactBuildConfig; import com.facebook.react.touch.JSResponderHandler; import com.facebook.react.uimanager.layoutanimation.LayoutAnimationController; @@ -68,6 +70,11 @@ @LegacyArchitecture public class NativeViewHierarchyManager { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "NativeViewHierarchyManager", LegacyArchitectureLogLevel.WARNING); + } + private static final String TAG = NativeViewHierarchyManager.class.getSimpleName(); private final boolean DEBUG_MODE = ReactBuildConfig.DEBUG && false; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java index 4666b9a80382..23b2af1d0d57 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java @@ -13,6 +13,8 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import com.facebook.react.uimanager.events.Event; /** Event used to notify JS component about changes of its position or dimensions */ @@ -20,6 +22,11 @@ @LegacyArchitecture public class OnLayoutEvent extends Event { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "OnLayoutEvent", LegacyArchitectureLogLevel.WARNING); + } + private static final Pools.SynchronizedPool EVENTS_POOL = new Pools.SynchronizedPool<>(20); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java index c5d9e6066468..7f8bf892d720 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java @@ -10,6 +10,8 @@ import androidx.annotation.Nullable; import com.facebook.infer.annotation.Assertions; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import com.facebook.react.uimanager.annotations.ReactPropertyHolder; import com.facebook.yoga.YogaAlign; import com.facebook.yoga.YogaBaselineFunction; @@ -64,6 +66,11 @@ public class ReactShadowNodeImpl implements ReactShadowNode sYogaConfig = ReactYogaConfigProvider.INSTANCE.getYogaConfig(); } + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "ReactShadowNodeImpl", LegacyArchitectureLogLevel.WARNING); + } + private int mReactTag; private @Nullable String mViewClassName; private int mRootTag; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt index 5b5fcf560b5e..348e38af4061 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt @@ -8,12 +8,16 @@ package com.facebook.react.uimanager import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger import com.facebook.yoga.YogaConfig import com.facebook.yoga.YogaConfigFactory import com.facebook.yoga.YogaErrata @LegacyArchitecture internal object ReactYogaConfigProvider { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled("ReactYogaConfigProvider") + } val yogaConfig: YogaConfig by lazy(LazyThreadSafetyMode.NONE) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java index 6c10f3561f48..a2a286f9e1d3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java @@ -12,6 +12,8 @@ import android.view.View; import com.facebook.react.common.SingleThreadAsserter; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; /** * Simple container class to keep track of {@link ReactShadowNode}s associated with a particular @@ -20,6 +22,11 @@ @LegacyArchitecture class ShadowNodeRegistry { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "ShadowNodeRegistry", LegacyArchitectureLogLevel.WARNING); + } + private final SparseArray mTagsToCSSNodes; private final SparseBooleanArray mRootTags; private final SingleThreadAsserter mThreadAsserter; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java index e809f955934c..221ffc4d6fee 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java @@ -26,6 +26,8 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import com.facebook.react.modules.core.ReactChoreographer; import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener; import com.facebook.systrace.Systrace; @@ -49,6 +51,11 @@ @LegacyArchitecture public class UIViewOperationQueue { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "UIViewOperationQueue", LegacyArchitectureLogLevel.WARNING); + } + public static final int DEFAULT_MIN_TIME_LEFT_IN_FRAME_FOR_NONBATCHED_OPERATION_MS = 8; private static final String TAG = UIViewOperationQueue.class.getSimpleName(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AbstractLayoutAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AbstractLayoutAnimation.java index 0b7c533a5ffd..d71bb36e9743 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AbstractLayoutAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AbstractLayoutAnimation.java @@ -19,6 +19,8 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.MapBuilder; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import com.facebook.react.uimanager.IllegalViewOperationException; import java.util.Map; @@ -29,6 +31,11 @@ @LegacyArchitecture /* package */ abstract class AbstractLayoutAnimation { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "AbstractLayoutAnimation", LegacyArchitectureLogLevel.WARNING); + } + // Forces animation to be playing 10x slower, used for debug purposes. private static final boolean SLOWDOWN_ANIMATION_MODE = false; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationController.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationController.java index 9dfc705c10c0..612f0b015cc4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationController.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationController.java @@ -17,6 +17,8 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; import javax.annotation.concurrent.NotThreadSafe; /** @@ -28,6 +30,11 @@ @LegacyArchitecture public class LayoutAnimationController { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "LayoutAnimationController", LegacyArchitectureLogLevel.WARNING); + } + private final AbstractLayoutAnimation mLayoutCreateAnimation = new LayoutCreateAnimation(); private final AbstractLayoutAnimation mLayoutUpdateAnimation = new LayoutUpdateAnimation(); private final AbstractLayoutAnimation mLayoutDeleteAnimation = new LayoutDeleteAnimation(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.kt index fba6928e2d35..44f36699ab47 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.kt @@ -8,6 +8,8 @@ package com.facebook.react.uimanager.layoutanimation import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** * Enum representing the different animation type that can be specified in layout animation config. @@ -19,6 +21,11 @@ internal enum class LayoutAnimationType { DELETE; companion object { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "LayoutAnimationType", LegacyArchitectureLogLevel.WARNING) + } + @JvmStatic fun toString(type: LayoutAnimationType): String { return when (type) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.kt index 19a11ca848fb..840fb45e9158 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.kt @@ -8,6 +8,8 @@ package com.facebook.react.uimanager.layoutanimation import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** * Class responsible for handling layout view creation animation, applied to view whenever a valid @@ -16,5 +18,10 @@ import com.facebook.react.common.annotations.internal.LegacyArchitecture @LegacyArchitecture internal class LayoutCreateAnimation : BaseLayoutAnimation() { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "LayoutCreateAnimation", LegacyArchitectureLogLevel.WARNING) + } + override fun isReverse(): Boolean = false } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.kt index 00bd94d100a6..671ba128d5b1 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.kt @@ -8,6 +8,8 @@ package com.facebook.react.uimanager.layoutanimation import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** * Class responsible for handling layout view deletion animation, applied to view whenever a valid @@ -16,5 +18,10 @@ import com.facebook.react.common.annotations.internal.LegacyArchitecture @LegacyArchitecture internal class LayoutDeleteAnimation : BaseLayoutAnimation() { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "LayoutDeleteAnimation", LegacyArchitectureLogLevel.WARNING) + } + override fun isReverse(): Boolean = true } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.kt index 0e9a8040caf8..6a50f3a9588b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.kt @@ -11,6 +11,8 @@ import android.view.View import android.view.animation.Animation import android.view.animation.TranslateAnimation import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** * Class responsible for handling layout update animation, applied to view whenever a valid config @@ -19,6 +21,11 @@ import com.facebook.react.common.annotations.internal.LegacyArchitecture @LegacyArchitecture internal class LayoutUpdateAnimation : AbstractLayoutAnimation() { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "LayoutUpdateAnimation", LegacyArchitectureLogLevel.WARNING) + } + internal override fun isValid(): Boolean = mDurationMs > 0 internal override fun createAnimationImpl( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java index 601888fa005f..739d5103dbbe 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java @@ -12,6 +12,8 @@ import android.view.animation.Transformation; import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; /** * Animation responsible for updating opacity of a view. It should ideally use hardware texture to @@ -21,6 +23,11 @@ @LegacyArchitecture class OpacityAnimation extends Animation { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "OpacityAnimation", LegacyArchitectureLogLevel.WARNING); + } + static class OpacityAnimationListener implements Animation.AnimationListener { private final View mView; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.kt index 6058630aa29f..69cad5f196ac 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.kt @@ -12,6 +12,8 @@ import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.ReadableType import com.facebook.react.bridge.ReadableType.Number import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** Simple spring interpolator */ // TODO(7613736): Improve spring interpolator with friction and damping variable support @@ -24,6 +26,11 @@ internal class SimpleSpringInterpolator : Interpolator { _springDamping = springDamping } + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "SimpleSpringInterpolator", LegacyArchitectureLogLevel.WARNING) + } + override fun getInterpolation(input: Float): Float = // Using mSpringDamping in this equation is not really the exact mathematical springDamping, // but a good approximation