1*5f154df9Saleqsio #ifdef __APPLE__ 2*5f154df9Saleqsio #include <RNReanimated/Scheduler.h> 3*5f154df9Saleqsio #else 4a48bc6c0SBrent Vatne #include "Scheduler.h" 5*5f154df9Saleqsio #endif 6*5f154df9Saleqsio #include "ReanimatedRuntime.h" 7*5f154df9Saleqsio #include "RuntimeManager.h" 8a48bc6c0SBrent Vatne 9c7e4709dSKudo Chien namespace reanimated { 10a48bc6c0SBrent Vatne scheduleOnUI(std::function<void ()> job)11a48bc6c0SBrent Vatnevoid Scheduler::scheduleOnUI(std::function<void()> job) { 12a48bc6c0SBrent Vatne uiJobs.push(std::move(job)); 13a48bc6c0SBrent Vatne } 14a48bc6c0SBrent Vatne scheduleOnJS(std::function<void ()> job)15a48bc6c0SBrent Vatnevoid Scheduler::scheduleOnJS(std::function<void()> job) { 16a48bc6c0SBrent Vatne jsCallInvoker_->invokeAsync(std::move(job)); 17a48bc6c0SBrent Vatne } 18a48bc6c0SBrent Vatne triggerUI()19a48bc6c0SBrent Vatnevoid Scheduler::triggerUI() { 20c7e4709dSKudo Chien 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 29c7e4709dSKudo Chien while (uiJobs.getSize()) { 30a48bc6c0SBrent Vatne auto job = uiJobs.pop(); 31a48bc6c0SBrent Vatne job(); 32a48bc6c0SBrent Vatne } 33c7e4709dSKudo Chien } 34a48bc6c0SBrent Vatne setJSCallInvoker(std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker)35c7e4709dSKudo Chienvoid Scheduler::setJSCallInvoker( 36c7e4709dSKudo Chien std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker) { 37a48bc6c0SBrent Vatne jsCallInvoker_ = jsCallInvoker; 38a48bc6c0SBrent Vatne } 39a48bc6c0SBrent Vatne setRuntimeManager(std::shared_ptr<RuntimeManager> runtimeManager)40c7e4709dSKudo Chienvoid Scheduler::setRuntimeManager( 41c7e4709dSKudo Chien std::shared_ptr<RuntimeManager> runtimeManager) { 4265c59487SŁukasz Kosmaty this->runtimeManager = runtimeManager; 43a48bc6c0SBrent Vatne } 44a48bc6c0SBrent Vatne ~Scheduler()45a48bc6c0SBrent VatneScheduler::~Scheduler() {} 46a48bc6c0SBrent Vatne Scheduler()47c7e4709dSKudo ChienScheduler::Scheduler() { 48c7e4709dSKudo Chien this->scheduledOnUI = false; 49a48bc6c0SBrent Vatne } 50c7e4709dSKudo Chien 51c7e4709dSKudo Chien } // namespace reanimated 52