1*65c59e02SInna Palant /* 2*65c59e02SInna Palant * Copyright (c) Facebook, Inc. and its affiliates. 3*65c59e02SInna Palant * 4*65c59e02SInna Palant * Licensed under the Apache License, Version 2.0 (the "License"); 5*65c59e02SInna Palant * you may not use this file except in compliance with the License. 6*65c59e02SInna Palant * You may obtain a copy of the License at 7*65c59e02SInna Palant * 8*65c59e02SInna Palant * http://www.apache.org/licenses/LICENSE-2.0 9*65c59e02SInna Palant * 10*65c59e02SInna Palant * Unless required by applicable law or agreed to in writing, software 11*65c59e02SInna Palant * distributed under the License is distributed on an "AS IS" BASIS, 12*65c59e02SInna Palant * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*65c59e02SInna Palant * See the License for the specific language governing permissions and 14*65c59e02SInna Palant * limitations under the License. 15*65c59e02SInna Palant */ 16*65c59e02SInna Palant 17*65c59e02SInna Palant #pragma once 18*65c59e02SInna Palant 19*65c59e02SInna Palant #include <fbjni/NativeRunnable.h> 20*65c59e02SInna Palant #include <fbjni/fbjni.h> 21*65c59e02SInna Palant 22*65c59e02SInna Palant namespace facebook { 23*65c59e02SInna Palant namespace jni { 24*65c59e02SInna Palant 25*65c59e02SInna Palant class JThread : public JavaClass<JThread> { 26*65c59e02SInna Palant public: 27*65c59e02SInna Palant static constexpr const char* kJavaDescriptor = "Ljava/lang/Thread;"; 28*65c59e02SInna Palant start()29*65c59e02SInna Palant void start() { 30*65c59e02SInna Palant static const auto method = javaClassStatic()->getMethod<void()>("start"); 31*65c59e02SInna Palant method(self()); 32*65c59e02SInna Palant } 33*65c59e02SInna Palant join()34*65c59e02SInna Palant void join() { 35*65c59e02SInna Palant static const auto method = javaClassStatic()->getMethod<void()>("join"); 36*65c59e02SInna Palant method(self()); 37*65c59e02SInna Palant } 38*65c59e02SInna Palant create(std::function<void ()> && runnable)39*65c59e02SInna Palant static local_ref<JThread> create(std::function<void()>&& runnable) { 40*65c59e02SInna Palant auto jrunnable = JNativeRunnable::newObjectCxxArgs(std::move(runnable)); 41*65c59e02SInna Palant return newInstance(static_ref_cast<JRunnable>(jrunnable)); 42*65c59e02SInna Palant } 43*65c59e02SInna Palant create(std::function<void ()> && runnable,std::string && name)44*65c59e02SInna Palant static local_ref<JThread> create( 45*65c59e02SInna Palant std::function<void()>&& runnable, 46*65c59e02SInna Palant std::string&& name) { 47*65c59e02SInna Palant auto jrunnable = JNativeRunnable::newObjectCxxArgs(std::move(runnable)); 48*65c59e02SInna Palant return newInstance( 49*65c59e02SInna Palant static_ref_cast<JRunnable>(jrunnable), make_jstring(std::move(name))); 50*65c59e02SInna Palant } 51*65c59e02SInna Palant getCurrent()52*65c59e02SInna Palant static local_ref<JThread> getCurrent() { 53*65c59e02SInna Palant static const auto method = 54*65c59e02SInna Palant javaClassStatic()->getStaticMethod<local_ref<JThread>()>( 55*65c59e02SInna Palant "currentThread"); 56*65c59e02SInna Palant return method(javaClassStatic()); 57*65c59e02SInna Palant } 58*65c59e02SInna Palant getPriority()59*65c59e02SInna Palant int getPriority() { 60*65c59e02SInna Palant static const auto method = getClass()->getMethod<jint()>("getPriority"); 61*65c59e02SInna Palant return method(self()); 62*65c59e02SInna Palant } 63*65c59e02SInna Palant setPriority(int priority)64*65c59e02SInna Palant void setPriority(int priority) { 65*65c59e02SInna Palant static const auto method = getClass()->getMethod<void(int)>("setPriority"); 66*65c59e02SInna Palant method(self(), priority); 67*65c59e02SInna Palant } 68*65c59e02SInna Palant setName(const std::string & name)69*65c59e02SInna Palant void setName(const std::string& name) { 70*65c59e02SInna Palant static const auto method = 71*65c59e02SInna Palant getClass()->getMethod<void(alias_ref<JString>)>("setName"); 72*65c59e02SInna Palant method(self(), make_jstring(std::move(name))); 73*65c59e02SInna Palant } 74*65c59e02SInna Palant }; 75*65c59e02SInna Palant 76*65c59e02SInna Palant } // namespace jni 77*65c59e02SInna Palant } // namespace facebook 78