Skip to content

Commit 6e8fab9

Browse files
sbuggaymeta-codesync[bot]
authored andcommitted
Harden perf monitor to metro connection changes (facebook#54022)
Summary: Pull Request resolved: facebook#54022 Perf monitor shows in a broken state if metro is started while the app is running. This change improves the tracing and monitor lifecycle around the metro connection events. Before: {F1982430185} After: {F1982430062} Changelog: [Internal] Reviewed By: shwanton Differential Revision: D83714223 fbshipit-source-id: 76826122924baa1a80c04dcc5ff18bc756a8e816
1 parent 6c874f2 commit 6e8fab9

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,11 +898,13 @@ public abstract class DevSupportManagerBase(
898898
override fun onPackagerConnected() {
899899
isPackagerConnected = true
900900
perfMonitorOverlayManager?.enable()
901+
perfMonitorOverlayManager?.startBackgroundTrace()
901902
}
902903

903904
override fun onPackagerDisconnected() {
904905
isPackagerConnected = false
905906
perfMonitorOverlayManager?.disable()
907+
perfMonitorOverlayManager?.stopBackgroundTrace()
906908
}
907909

908910
override fun onPackagerReloadCommand() {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorInspectorTargetBinding.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@ internal interface PerfMonitorInspectorTargetBinding {
2525

2626
/** Attempt to start a new background performance trace. */
2727
public fun resumeBackgroundTrace()
28+
29+
/** Attempt to stop the current performance trace. */
30+
public fun stopBackgroundTrace()
2831
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@ internal class PerfMonitorOverlayManager(
5858
}
5959
}
6060

61+
/** Stop background trace recording. */
62+
fun stopBackgroundTrace() {
63+
if (!enabled) {
64+
return
65+
}
66+
67+
devHelper.inspectorTarget?.let { target ->
68+
target.stopBackgroundTrace()
69+
onRecordingStateChanged(target.getTracingState())
70+
}
71+
}
72+
6173
override fun onRecordingStateChanged(state: TracingState) {
6274
tracingState = state
6375
UiThreadUtil.runOnUiThread {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ internal class ReactHostInspectorTarget(reactHostImpl: ReactHostImpl) :
6767
}
6868
}
6969

70+
override fun stopBackgroundTrace() {
71+
stopAndDiscardBackgroundTrace()
72+
perfMonitorListeners.forEach { listener ->
73+
listener.onRecordingStateChanged(TracingState.DISABLED)
74+
}
75+
}
76+
7077
override fun close() {
7178
mHybridData.resetNative()
7279
}

0 commit comments

Comments
 (0)