From b95631ed7fb874a04d26459bc863e37a6bb66beb Mon Sep 17 00:00:00 2001 From: Alex Hunt Date: Wed, 27 Nov 2024 11:42:31 -0800 Subject: [PATCH] Enable identifying profiling builds on proxy registration (#47967) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/47967 (Android only) Updates `jsinspector-modern` to enable identifying profiling builds (experimental) when registering the debug target with the Inspector Proxy. Changelog: [Internal] Reviewed By: rubennorte Differential Revision: D66501768 fbshipit-source-id: bbe2b9a2c7c014c952ef5ee49284a161dbeefb09 --- packages/react-native/ReactAndroid/api/ReactAndroid.api | 1 + .../com/facebook/react/devsupport/DevServerHelper.java | 5 +++-- .../java/com/facebook/react/devsupport/InspectorFlags.kt | 2 ++ .../src/main/jni/react/devsupport/JInspectorFlags.cpp | 9 +++++++++ .../src/main/jni/react/devsupport/JInspectorFlags.h | 1 + 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index babf2f085f7..693aba38ba8 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -2219,6 +2219,7 @@ public abstract interface class com/facebook/react/devsupport/HMRClient : com/fa public final class com/facebook/react/devsupport/InspectorFlags { public static final field INSTANCE Lcom/facebook/react/devsupport/InspectorFlags; public static final fun getFuseboxEnabled ()Z + public static final fun getIsProfilingBuild ()Z } public class com/facebook/react/devsupport/InspectorPackagerConnection : com/facebook/react/devsupport/IInspectorPackagerConnection { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java index a7a2b421be8..1aa1c4c3dd3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java @@ -325,11 +325,12 @@ public class DevServerHelper { private String getInspectorDeviceUrl() { return String.format( Locale.US, - "http://%s/inspector/device?name=%s&app=%s&device=%s", + "http://%s/inspector/device?name=%s&app=%s&device=%s&profiling=%b", mPackagerConnectionSettings.getDebugServerHost(), Uri.encode(AndroidInfoHelpers.getFriendlyDeviceName()), Uri.encode(mPackageName), - Uri.encode(getInspectorDeviceId())); + Uri.encode(getInspectorDeviceId()), + InspectorFlags.getIsProfilingBuild()); } public void downloadBundleFromURL( diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt index 3f0cea6132c..e4e83983fbf 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt @@ -17,4 +17,6 @@ public object InspectorFlags { } @DoNotStrip @JvmStatic public external fun getFuseboxEnabled(): Boolean + + @DoNotStrip @JvmStatic public external fun getIsProfilingBuild(): Boolean } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp index ac3752574ad..dbc58c41a91 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp @@ -16,10 +16,19 @@ bool JInspectorFlags::getFuseboxEnabled(jni::alias_ref /*unused*/) { return inspectorFlags.getFuseboxEnabled(); } +bool JInspectorFlags::getIsProfilingBuild(jni::alias_ref /*unused*/) { + auto& inspectorFlags = InspectorFlags::getInstance(); + return inspectorFlags.getIsProfilingBuild(); +} + void JInspectorFlags::registerNatives() { javaClassLocal()->registerNatives({ makeNativeMethod("getFuseboxEnabled", JInspectorFlags::getFuseboxEnabled), }); + javaClassLocal()->registerNatives({ + makeNativeMethod( + "getIsProfilingBuild", JInspectorFlags::getIsProfilingBuild), + }); } } // namespace facebook::react::jsinspector_modern diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h b/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h index ebce26a0d5b..40bd0d725ba 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h @@ -20,6 +20,7 @@ class JInspectorFlags : public jni::JavaClass { "Lcom/facebook/react/devsupport/InspectorFlags;"; static bool getFuseboxEnabled(jni::alias_ref); + static bool getIsProfilingBuild(jni::alias_ref); static void registerNatives();