diff --git a/packages/react-native/React/CoreModules/RCTDevMenu.mm b/packages/react-native/React/CoreModules/RCTDevMenu.mm index 035355a038eb49..9e220790d55fa4 100644 --- a/packages/react-native/React/CoreModules/RCTDevMenu.mm +++ b/packages/react-native/React/CoreModules/RCTDevMenu.mm @@ -23,6 +23,10 @@ #import #endif +@protocol RCTDevMenuItemProvider +- (RCTDevMenuItem *)devMenuItem; +@end + NSString *const RCTShowDevMenuNotification = @"RCTShowDevMenuNotification"; @implementation UIWindow (RCTDevMenu) @@ -302,6 +306,13 @@ - (void)setDefaultJSBundle }]]; } + id perfMonitorItemOpaque = [_moduleRegistry moduleForName:"PerfMonitor"]; + SEL devMenuItem = @selector(devMenuItem); + if ([perfMonitorItemOpaque respondsToSelector:devMenuItem]) { + RCTDevMenuItem *perfMonitorItem = [perfMonitorItemOpaque devMenuItem]; + [items addObject:perfMonitorItem]; + } + [items addObject:[RCTDevMenuItem buttonItemWithTitleBlock:^NSString * { diff --git a/packages/react-native/React/CoreModules/RCTPerfMonitor.mm b/packages/react-native/React/CoreModules/RCTPerfMonitor.mm index a089054feb6fb0..776b5e77083a68 100644 --- a/packages/react-native/React/CoreModules/RCTPerfMonitor.mm +++ b/packages/react-native/React/CoreModules/RCTPerfMonitor.mm @@ -60,13 +60,8 @@ static vm_size_t RCTGetResidentMemorySize(void) return memoryUsageInByte; } -@interface RCTPerfMonitor : NSObject < - RCTBridgeModule, - RCTTurboModule, - RCTInitializing, - RCTInvalidating, - UITableViewDataSource, - UITableViewDelegate> +@interface RCTPerfMonitor + : NSObject #if __has_include() @property (nonatomic, strong, readonly) RCTDevMenuItem *devMenuItem; @@ -131,13 +126,6 @@ - (dispatch_queue_t)methodQueue return dispatch_get_main_queue(); } -- (void)initialize -{ -#if __has_include() - [(RCTDevMenu *)[_moduleRegistry moduleForName:"DevMenu"] addItem:self.devMenuItem]; -#endif -} - - (void)invalidate { [self hide];