Make StatusBarManager use main queue setup (#50113)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/50113

## Rationale
Rendering can now include main -> js sync calls.

If we allow js -> main sync calls during rendering, react native can deadlock.

So, this diff moves the js -> main sync calls to "main queue module setup", which occurs before rendering.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D71348559

fbshipit-source-id: 918f145d817866a5d08087c1a4a0e151f783109e
This commit is contained in:
Ramanpreet Nara
2025-03-19 21:16:05 -07:00
committed by Facebook GitHub Bot
parent 2b03fd74cb
commit b4775ebb39
3 changed files with 20 additions and 19 deletions
@@ -27,15 +27,10 @@ RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible : (BOOL)visible) {}
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)getConstants
{
__block facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants> constants;
RCTUnsafeExecuteOnMainQueueSync(^{
constants = facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
.HEIGHT = 0,
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
});
return facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
.HEIGHT = 0,
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
});
return constants;
}
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)constantsToExport
@@ -9,6 +9,7 @@
#import "CoreModulesPlugins.h"
#import <React/RCTEventDispatcherProtocol.h>
#import <React/RCTInitializing.h>
#import <React/RCTLog.h>
#import <React/RCTUtils.h>
@@ -47,10 +48,12 @@ RCT_ENUM_CONVERTER(
@end
@interface RCTStatusBarManager () <NativeStatusBarManagerIOSSpec>
@interface RCTStatusBarManager () <NativeStatusBarManagerIOSSpec, RCTInitializing>
@end
@implementation RCTStatusBarManager
@implementation RCTStatusBarManager {
facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants> _constants;
}
static BOOL RCTViewControllerBasedStatusBarAppearance()
{
@@ -72,6 +75,14 @@ RCT_EXPORT_MODULE()
return YES;
}
- (void)initialize
{
_constants = facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
.HEIGHT = RCTUIStatusBarManager().statusBarFrame.size.height,
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
});
}
- (NSArray<NSString *> *)supportedEvents
{
return @[ kStatusBarFrameDidChange, kStatusBarFrameWillChange ];
@@ -177,15 +188,7 @@ RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible : (BOOL)visible)
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)getConstants
{
__block facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants> constants;
RCTUnsafeExecuteOnMainQueueSync(^{
constants = facebook::react::typedConstants<JS::NativeStatusBarManagerIOS::Constants>({
.HEIGHT = RCTUIStatusBarManager().statusBarFrame.size.height,
.DEFAULT_BACKGROUND_COLOR = std::nullopt,
});
});
return constants;
return _constants;
}
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants>)constantsToExport
+3
View File
@@ -159,6 +159,9 @@
},
"PlatformConstants": {
"unstableRequiresMainQueueSetup": true
},
"StatusBarManager": {
"unstableRequiresMainQueueSetup": true
}
}
},