From 614aa86916394d8ee2ecb236f38de6bb7e161ca2 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Tue, 26 Apr 2022 05:11:05 -0700 Subject: [PATCH] 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 --- React/Fabric/RCTScheduler.h | 5 +++++ React/Fabric/RCTScheduler.mm | 10 ++++++++++ React/Fabric/RCTSurfacePresenter.h | 2 ++ React/Fabric/RCTSurfacePresenter.mm | 10 +++++----- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/React/Fabric/RCTScheduler.h b/React/Fabric/RCTScheduler.h index b201c0a75f5694..c9ee613b8219c7 100644 --- a/React/Fabric/RCTScheduler.h +++ b/React/Fabric/RCTScheduler.h @@ -10,6 +10,7 @@ #import #import +#import #import #import #import @@ -64,6 +65,10 @@ NS_ASSUME_NONNULL_BEGIN - (void)animationTick; +- (void)addEventListener:(std::shared_ptr const &)listener; + +- (void)removeEventListener:(std::shared_ptr const &)listener; + @end NS_ASSUME_NONNULL_END diff --git a/React/Fabric/RCTScheduler.mm b/React/Fabric/RCTScheduler.mm index 4bc19fd9c8c7ff..b8921fdabe2f2a 100644 --- a/React/Fabric/RCTScheduler.mm +++ b/React/Fabric/RCTScheduler.mm @@ -193,4 +193,14 @@ - (void)onAllAnimationsComplete } } +- (void)addEventListener:(std::shared_ptr const &)listener +{ + return _scheduler->addEventListener(listener); +} + +- (void)removeEventListener:(std::shared_ptr const &)listener +{ + return _scheduler->removeEventListener(listener); +} + @end diff --git a/React/Fabric/RCTSurfacePresenter.h b/React/Fabric/RCTSurfacePresenter.h index d9a56ac31cc836..8e645be4c413c5 100644 --- a/React/Fabric/RCTSurfacePresenter.h +++ b/React/Fabric/RCTSurfacePresenter.h @@ -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. diff --git a/React/Fabric/RCTSurfacePresenter.mm b/React/Fabric/RCTSurfacePresenter.mm index 8ccc496c3dea8f..75e6b2c9833add 100644 --- a/React/Fabric/RCTSurfacePresenter.mm +++ b/React/Fabric/RCTSurfacePresenter.mm @@ -115,7 +115,7 @@ - (RCTMountingManager *)mountingManager return _mountingManager; } -- (RCTScheduler *_Nullable)_scheduler +- (RCTScheduler *_Nullable)scheduler { std::lock_guard lock(_schedulerAccessMutex); return _scheduler; @@ -151,7 +151,7 @@ - (void)setRuntimeExecutor:(RuntimeExecutor)runtimeExecutor - (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 @@ - (void)registerSurface:(RCTFabricSurface *)surface - (void)unregisterSurface:(RCTFabricSurface *)surface { - RCTScheduler *scheduler = [self _scheduler]; + RCTScheduler *scheduler = [self scheduler]; if (scheduler) { [scheduler unregisterSurface:surface.surfaceHandler]; } @@ -188,7 +188,7 @@ - (UIView *)findComponentViewWithTag_DO_NOT_USE_DEPRECATED:(NSInteger)tag - (BOOL)synchronouslyUpdateViewOnUIThread:(NSNumber *)reactTag props:(NSDictionary *)props { - RCTScheduler *scheduler = [self _scheduler]; + RCTScheduler *scheduler = [self scheduler]; if (!scheduler) { return NO; } @@ -212,7 +212,7 @@ - (BOOL)synchronouslyUpdateViewOnUIThread:(NSNumber *)reactTag props:(NSDictiona - (void)setupAnimationDriverWithSurfaceHandler:(facebook::react::SurfaceHandler const &)surfaceHandler { - [[self _scheduler] setupAnimationDriver:surfaceHandler]; + [[self scheduler] setupAnimationDriver:surfaceHandler]; } - (BOOL)suspend