Skip to content

Commit

Permalink
Merge pull request #23759 from Expensify/revert-23550-wojtus7/bump-re…
Browse files Browse the repository at this point in the history
…animated-340

Revert "Bump Reanimated to 3.4.0"

(cherry picked from commit 0435b6a)
  • Loading branch information
marcaaron authored and OSBotify committed Jul 27, 2023
1 parent 3ddd31d commit 2e60531
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 12 deletions.
6 changes: 2 additions & 4 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -672,12 +672,11 @@ PODS:
- React-Core
- RNReactNativeHapticFeedback (1.14.0):
- React-Core
- RNReanimated (3.4.0):
- RNReanimated (3.1.0):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
- glog
- hermes-engine
- RCT-Folly
- RCTRequired
- RCTTypeSafety
Expand All @@ -687,7 +686,6 @@ PODS:
- React-Core/RCTWebSocket
- React-CoreModules
- React-cxxreact
- React-hermes
- React-jsi
- React-jsiexecutor
- React-jsinspector
Expand Down Expand Up @@ -1132,7 +1130,7 @@ SPEC CHECKSUMS:
RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81
RNPermissions: dcdb7b99796bbeda6975a6e79ad519c41b251b1c
RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c
RNReanimated: 532818a3578a0832d95ea9d0a6a9dc0e73bbce29
RNReanimated: b1220a0e5168745283ff5d53bfc7d2144b2cee1b
RNScreens: 0df01424e9e0ed7827200d6ed1087ddd06c493f9
RNSVG: 53c661b76829783cdaf9b7a57258f3d3b4c28315
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
Expand Down
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
"react-native-plaid-link-sdk": "^10.0.0",
"react-native-qrcode-svg": "^6.2.0",
"react-native-quick-sqlite": "^8.0.0-beta.2",
"react-native-reanimated": "3.4.0",
"react-native-reanimated": "3.1.0",
"react-native-render-html": "6.3.1",
"react-native-safe-area-context": "4.4.1",
"react-native-screens": "3.17.0",
Expand Down
177 changes: 177 additions & 0 deletions patches/react-native-reanimated+3.1.0.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
diff --git a/node_modules/react-native-reanimated/ios/REANodesManager.mm b/node_modules/react-native-reanimated/ios/REANodesManager.mm
index 26bb253..4108293 100644
--- a/node_modules/react-native-reanimated/ios/REANodesManager.mm
+++ b/node_modules/react-native-reanimated/ios/REANodesManager.mm
@@ -85,19 +85,77 @@ - (void)runSyncUIUpdatesWithObserver:(id<RCTUIManagerObserver>)observer

@end

-@interface REANodesManager () <RCTUIManagerObserver>
+#ifndef RCT_NEW_ARCH_ENABLED

+@interface REASyncUpdateObserver : NSObject <RCTUIManagerObserver>
@end

+@implementation REASyncUpdateObserver {
+ volatile void (^_mounting)(void);
+ volatile BOOL _waitTimedOut;
+ dispatch_semaphore_t _semaphore;
+}
+
+- (instancetype)init
+{
+ self = [super init];
+ if (self) {
+ _mounting = nil;
+ _waitTimedOut = NO;
+ _semaphore = dispatch_semaphore_create(0);
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ RCTAssert(_mounting == nil, @"Mouting block was set but never executed. This may lead to UI inconsistencies");
+}
+
+- (void)unblockUIThread
+{
+ RCTAssertUIManagerQueue();
+ dispatch_semaphore_signal(_semaphore);
+}
+
+- (void)waitAndMountWithTimeout:(NSTimeInterval)timeout
+{
+ RCTAssertMainQueue();
+ long result = dispatch_semaphore_wait(_semaphore, dispatch_time(DISPATCH_TIME_NOW, timeout * NSEC_PER_SEC));
+ if (result != 0) {
+ @synchronized(self) {
+ _waitTimedOut = YES;
+ }
+ }
+ if (_mounting) {
+ _mounting();
+ _mounting = nil;
+ }
+}
+
+- (BOOL)uiManager:(RCTUIManager *)manager performMountingWithBlock:(RCTUIManagerMountingBlock)block
+{
+ RCTAssertUIManagerQueue();
+ @synchronized(self) {
+ if (_waitTimedOut) {
+ return NO;
+ } else {
+ _mounting = block;
+ return YES;
+ }
+ }
+}
+
+@end
+
+#endif
+
@implementation REANodesManager {
CADisplayLink *_displayLink;
BOOL _wantRunUpdates;
NSMutableArray<REAOnAnimationCallback> *_onAnimationCallbacks;
BOOL _tryRunBatchUpdatesSynchronously;
REAEventHandler _eventHandler;
- volatile void (^_mounting)(void);
- NSObject *_syncLayoutUpdatesWaitLock;
- volatile BOOL _syncLayoutUpdatesWaitTimedOut;
NSMutableDictionary<NSNumber *, ComponentUpdate *> *_componentUpdateBuffer;
NSMutableDictionary<NSNumber *, UIView *> *_viewRegistry;
#ifdef RCT_NEW_ARCH_ENABLED
@@ -125,7 +183,6 @@ - (nonnull instancetype)initWithModule:(REAModule *)reanimatedModule
_operationsInBatch = [NSMutableDictionary new];
_componentUpdateBuffer = [NSMutableDictionary new];
_viewRegistry = [_uiManager valueForKey:@"_viewRegistry"];
- _syncLayoutUpdatesWaitLock = [NSObject new];
}

_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onAnimationFrame:)];
@@ -241,19 +298,6 @@ - (void)onAnimationFrame:(CADisplayLink *)displayLink
}
}

-- (BOOL)uiManager:(RCTUIManager *)manager performMountingWithBlock:(RCTUIManagerMountingBlock)block
-{
- RCTAssert(_mounting == nil, @"Mouting block is expected to not be set");
- @synchronized(_syncLayoutUpdatesWaitLock) {
- if (_syncLayoutUpdatesWaitTimedOut) {
- return NO;
- } else {
- _mounting = block;
- return YES;
- }
- }
-}
-
- (void)performOperations
{
#ifdef RCT_NEW_ARCH_ENABLED
@@ -268,8 +312,7 @@ - (void)performOperations
_tryRunBatchUpdatesSynchronously = NO;

__weak __typeof__(self) weakSelf = self;
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
- _syncLayoutUpdatesWaitTimedOut = NO;
+ REASyncUpdateObserver *syncUpdateObserver = [REASyncUpdateObserver new];
RCTExecuteOnUIManagerQueue(^{
__typeof__(self) strongSelf = weakSelf;
if (strongSelf == nil) {
@@ -278,7 +321,7 @@ - (void)performOperations
BOOL canUpdateSynchronously = trySynchronously && ![strongSelf.uiManager hasEnqueuedUICommands];

if (!canUpdateSynchronously) {
- dispatch_semaphore_signal(semaphore);
+ [syncUpdateObserver unblockUIThread];
}

for (int i = 0; i < copiedOperationsQueue.count; i++) {
@@ -286,8 +329,8 @@ - (void)performOperations
}

if (canUpdateSynchronously) {
- [strongSelf.uiManager runSyncUIUpdatesWithObserver:strongSelf];
- dispatch_semaphore_signal(semaphore);
+ [strongSelf.uiManager runSyncUIUpdatesWithObserver:syncUpdateObserver];
+ [syncUpdateObserver unblockUIThread];
}
// In case canUpdateSynchronously=true we still have to send uiManagerWillPerformMounting event
// to observers because some components (e.g. TextInput) update their UIViews only on that event.
@@ -298,17 +341,7 @@ - (void)performOperations
// from CADisplayLink but it is easier to hardcode it for the time being.
// The reason why we use frame duration here is that if takes longer than one frame to complete layout tasks
// there is no point of synchronizing layout with the UI interaction as we get that one frame delay anyways.
- long result = dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 16 * NSEC_PER_MSEC));
- if (result != 0) {
- @synchronized(_syncLayoutUpdatesWaitLock) {
- _syncLayoutUpdatesWaitTimedOut = YES;
- }
- }
- }
-
- if (_mounting) {
- _mounting();
- _mounting = nil;
+ [syncUpdateObserver waitAndMountWithTimeout:0.016];
}
}
_wantRunUpdates = NO;
diff --git a/node_modules/react-native-reanimated/mock.js b/node_modules/react-native-reanimated/mock.js
index 68b20d2..b088001 100644
--- a/node_modules/react-native-reanimated/mock.js
+++ b/node_modules/react-native-reanimated/mock.js
@@ -41,6 +41,9 @@ const Reanimated = {
createAnimatedComponent: (Component) => Component,
addWhitelistedUIProps: NOOP,
addWhitelistedNativeProps: NOOP,
+
+ // used by react-navigation fork
+ isConfigured: () => true,
};

module.exports = {

0 comments on commit 2e60531

Please sign in to comment.