1*4440fb50SKudo Chien #ifdef __APPLE__ 2*4440fb50SKudo Chien #include <RNReanimated/Scheduler.h> 3*4440fb50SKudo Chien #else 4*4440fb50SKudo Chien #include "Scheduler.h" 5*4440fb50SKudo Chien #endif 6*4440fb50SKudo Chien #include "ReanimatedRuntime.h" 7*4440fb50SKudo Chien #include "RuntimeManager.h" 8*4440fb50SKudo Chien 9*4440fb50SKudo Chien namespace reanimated { 10*4440fb50SKudo Chien scheduleOnUI(std::function<void ()> job)11*4440fb50SKudo Chienvoid Scheduler::scheduleOnUI(std::function<void()> job) { 12*4440fb50SKudo Chien uiJobs.push(std::move(job)); 13*4440fb50SKudo Chien } 14*4440fb50SKudo Chien scheduleOnJS(std::function<void ()> job)15*4440fb50SKudo Chienvoid Scheduler::scheduleOnJS(std::function<void()> job) { 16*4440fb50SKudo Chien jsCallInvoker_->invokeAsync(std::move(job)); 17*4440fb50SKudo Chien } 18*4440fb50SKudo Chien triggerUI()19*4440fb50SKudo Chienvoid Scheduler::triggerUI() { 20*4440fb50SKudo Chien scheduledOnUI = false; 21*4440fb50SKudo Chien #if JS_RUNTIME_HERMES 22*4440fb50SKudo Chien // JSI's scope defined here allows for JSI-objects to be cleared up after 23*4440fb50SKudo Chien // each runtime loop. Within these loops we typically create some temporary 24*4440fb50SKudo Chien // JSI objects and hence it allows for such objects to be garbage collected 25*4440fb50SKudo Chien // much sooner. 26*4440fb50SKudo Chien // Apparently the scope API is only supported on Hermes at the moment. 27*4440fb50SKudo Chien auto scope = jsi::Scope(*runtimeManager.lock()->runtime); 28*4440fb50SKudo Chien #endif 29*4440fb50SKudo Chien while (uiJobs.getSize()) { 30*4440fb50SKudo Chien auto job = uiJobs.pop(); 31*4440fb50SKudo Chien job(); 32*4440fb50SKudo Chien } 33*4440fb50SKudo Chien } 34*4440fb50SKudo Chien setJSCallInvoker(std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker)35*4440fb50SKudo Chienvoid Scheduler::setJSCallInvoker( 36*4440fb50SKudo Chien std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker) { 37*4440fb50SKudo Chien jsCallInvoker_ = jsCallInvoker; 38*4440fb50SKudo Chien } 39*4440fb50SKudo Chien setRuntimeManager(std::shared_ptr<RuntimeManager> runtimeManager)40*4440fb50SKudo Chienvoid Scheduler::setRuntimeManager( 41*4440fb50SKudo Chien std::shared_ptr<RuntimeManager> runtimeManager) { 42*4440fb50SKudo Chien this->runtimeManager = runtimeManager; 43*4440fb50SKudo Chien } 44*4440fb50SKudo Chien ~Scheduler()45*4440fb50SKudo ChienScheduler::~Scheduler() {} 46*4440fb50SKudo Chien Scheduler()47*4440fb50SKudo ChienScheduler::Scheduler() { 48*4440fb50SKudo Chien this->scheduledOnUI = false; 49*4440fb50SKudo Chien } 50*4440fb50SKudo Chien 51*4440fb50SKudo Chien } // namespace reanimated 52