1*5f154df9Saleqsio #ifdef __APPLE__ 2*5f154df9Saleqsio #include <RNReanimated/Scheduler.h> 3*5f154df9Saleqsio #else 404819bfdSŁukasz Kosmaty #include "Scheduler.h" 5*5f154df9Saleqsio #endif 6*5f154df9Saleqsio #include "ReanimatedRuntime.h" 7*5f154df9Saleqsio #include "RuntimeManager.h" 804819bfdSŁukasz Kosmaty 904819bfdSŁukasz Kosmaty namespace reanimated { 1004819bfdSŁukasz Kosmaty scheduleOnUI(std::function<void ()> job)1104819bfdSŁukasz Kosmatyvoid Scheduler::scheduleOnUI(std::function<void()> job) { 1204819bfdSŁukasz Kosmaty uiJobs.push(std::move(job)); 1304819bfdSŁukasz Kosmaty } 1404819bfdSŁukasz Kosmaty scheduleOnJS(std::function<void ()> job)1504819bfdSŁukasz Kosmatyvoid Scheduler::scheduleOnJS(std::function<void()> job) { 1604819bfdSŁukasz Kosmaty jsCallInvoker_->invokeAsync(std::move(job)); 1704819bfdSŁukasz Kosmaty } 1804819bfdSŁukasz Kosmaty triggerUI()1904819bfdSŁukasz Kosmatyvoid Scheduler::triggerUI() { 2004819bfdSŁukasz Kosmaty scheduledOnUI = false; 21*5f154df9Saleqsio #if JS_RUNTIME_HERMES 22*5f154df9Saleqsio // JSI's scope defined here allows for JSI-objects to be cleared up after 23*5f154df9Saleqsio // each runtime loop. Within these loops we typically create some temporary 24*5f154df9Saleqsio // JSI objects and hence it allows for such objects to be garbage collected 25*5f154df9Saleqsio // much sooner. 26*5f154df9Saleqsio // Apparently the scope API is only supported on Hermes at the moment. 27*5f154df9Saleqsio auto scope = jsi::Scope(*runtimeManager.lock()->runtime); 28*5f154df9Saleqsio #endif 2904819bfdSŁukasz Kosmaty while (uiJobs.getSize()) { 3004819bfdSŁukasz Kosmaty auto job = uiJobs.pop(); 3104819bfdSŁukasz Kosmaty job(); 3204819bfdSŁukasz Kosmaty } 3304819bfdSŁukasz Kosmaty } 3404819bfdSŁukasz Kosmaty setJSCallInvoker(std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker)3504819bfdSŁukasz Kosmatyvoid Scheduler::setJSCallInvoker( 3604819bfdSŁukasz Kosmaty std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker) { 3704819bfdSŁukasz Kosmaty jsCallInvoker_ = jsCallInvoker; 3804819bfdSŁukasz Kosmaty } 3904819bfdSŁukasz Kosmaty setRuntimeManager(std::shared_ptr<RuntimeManager> runtimeManager)4004819bfdSŁukasz Kosmatyvoid Scheduler::setRuntimeManager( 4104819bfdSŁukasz Kosmaty std::shared_ptr<RuntimeManager> runtimeManager) { 4204819bfdSŁukasz Kosmaty this->runtimeManager = runtimeManager; 4304819bfdSŁukasz Kosmaty } 4404819bfdSŁukasz Kosmaty ~Scheduler()4504819bfdSŁukasz KosmatyScheduler::~Scheduler() {} 4604819bfdSŁukasz Kosmaty Scheduler()4704819bfdSŁukasz KosmatyScheduler::Scheduler() { 4804819bfdSŁukasz Kosmaty this->scheduledOnUI = false; 4904819bfdSŁukasz Kosmaty } 5004819bfdSŁukasz Kosmaty 5104819bfdSŁukasz Kosmaty } // namespace reanimated 52