Expose scheduler through RCTSurfacePresenter

Summary:
Exposes event listener through iOS scheduler wrapper (`RCTScheduler`) and exposes scheduler itself through `RCTSurfacePresenter`.

Changelog: [Changed] Exposed `RCTScheduler` to allow setting event listeners.

Reviewed By: philIip

Differential Revision: D35313398

fbshipit-source-id: 794179d47f407fee5692a98b13ac08f92e85a61c
This commit is contained in:
Nicola Corti
2022-04-26 05:11:05 -07:00
committed by Facebook GitHub Bot
parent 1730949e94
commit 614aa86916
4 changed files with 22 additions and 5 deletions
+5
View File
@@ -10,6 +10,7 @@
#import <react/renderer/componentregistry/ComponentDescriptorFactory.h>
#import <react/renderer/core/ComponentDescriptor.h>
#import <react/renderer/core/EventListener.h>
#import <react/renderer/core/LayoutConstraints.h>
#import <react/renderer/core/LayoutContext.h>
#import <react/renderer/mounting/MountingCoordinator.h>
@@ -64,6 +65,10 @@ NS_ASSUME_NONNULL_BEGIN
- (void)animationTick;
- (void)addEventListener:(std::shared_ptr<facebook::react::EventListener> const &)listener;
- (void)removeEventListener:(std::shared_ptr<facebook::react::EventListener> const &)listener;
@end
NS_ASSUME_NONNULL_END
+10
View File
@@ -193,4 +193,14 @@ class LayoutAnimationDelegateProxy : public LayoutAnimationStatusDelegate, publi
}
}
- (void)addEventListener:(std::shared_ptr<EventListener> const &)listener
{
return _scheduler->addEventListener(listener);
}
- (void)removeEventListener:(std::shared_ptr<EventListener> const &)listener
{
return _scheduler->removeEventListener(listener);
}
@end
+2
View File
@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN
@class RCTFabricSurface;
@class RCTImageLoader;
@class RCTMountingManager;
@class RCTScheduler;
/**
* Coordinates presenting of React Native Surfaces and represents application
@@ -53,6 +54,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)unregisterSurface:(RCTFabricSurface *)surface;
@property (readonly) RCTMountingManager *mountingManager;
@property (readonly, nullable) RCTScheduler *scheduler;
/*
* Allow callers to initialize a new fabric surface without adding Fabric as a Buck dependency.
+5 -5
View File
@@ -115,7 +115,7 @@ static BackgroundExecutor RCTGetBackgroundExecutor()
return _mountingManager;
}
- (RCTScheduler *_Nullable)_scheduler
- (RCTScheduler *_Nullable)scheduler
{
std::lock_guard<std::mutex> lock(_schedulerAccessMutex);
return _scheduler;
@@ -151,7 +151,7 @@ static BackgroundExecutor RCTGetBackgroundExecutor()
- (void)registerSurface:(RCTFabricSurface *)surface
{
[_surfaceRegistry registerSurface:surface];
RCTScheduler *scheduler = [self _scheduler];
RCTScheduler *scheduler = [self scheduler];
if (scheduler) {
[scheduler registerSurface:surface.surfaceHandler];
}
@@ -159,7 +159,7 @@ static BackgroundExecutor RCTGetBackgroundExecutor()
- (void)unregisterSurface:(RCTFabricSurface *)surface
{
RCTScheduler *scheduler = [self _scheduler];
RCTScheduler *scheduler = [self scheduler];
if (scheduler) {
[scheduler unregisterSurface:surface.surfaceHandler];
}
@@ -188,7 +188,7 @@ static BackgroundExecutor RCTGetBackgroundExecutor()
- (BOOL)synchronouslyUpdateViewOnUIThread:(NSNumber *)reactTag props:(NSDictionary *)props
{
RCTScheduler *scheduler = [self _scheduler];
RCTScheduler *scheduler = [self scheduler];
if (!scheduler) {
return NO;
}
@@ -212,7 +212,7 @@ static BackgroundExecutor RCTGetBackgroundExecutor()
- (void)setupAnimationDriverWithSurfaceHandler:(facebook::react::SurfaceHandler const &)surfaceHandler
{
[[self _scheduler] setupAnimationDriver:surfaceHandler];
[[self scheduler] setupAnimationDriver:surfaceHandler];
}
- (BOOL)suspend