1#import <RNReanimated/REAIOSScheduler.h>
2#import <RNReanimated/RuntimeManager.h>
3
4namespace reanimated {
5
6using namespace facebook;
7using namespace react;
8
9REAIOSScheduler::REAIOSScheduler(std::shared_ptr<CallInvoker> jsInvoker)
10{
11  this->jsCallInvoker_ = jsInvoker;
12}
13
14void REAIOSScheduler::scheduleOnUI(std::function<void()> job)
15{
16  if (runtimeManager.lock() == nullptr) {
17    return;
18  }
19
20  if ([NSThread isMainThread]) {
21    if (runtimeManager.lock()) {
22      job();
23    }
24    return;
25  }
26
27  Scheduler::scheduleOnUI(job);
28  if ([NSThread isMainThread]) {
29    if (runtimeManager.lock()) {
30      triggerUI();
31    }
32    return;
33  }
34
35  if (!this->scheduledOnUI) {
36    __block std::weak_ptr<RuntimeManager> blockRuntimeManager = runtimeManager;
37
38    dispatch_async(dispatch_get_main_queue(), ^{
39      if (blockRuntimeManager.lock()) {
40        triggerUI();
41      }
42    });
43  }
44}
45
46REAIOSScheduler::~REAIOSScheduler() {}
47
48} // namespace reanimated
49